查看memcache所有key的小程序

09月 10, 2011 发表评论

本地开发过程中经常要查看内容写没写到memcache中,一般看一下memcache中有没有想对应的key就好了,懒得用telnet连接memcache,自带的memcached-tool输出又不怎么方便阅读,so 写了一个简单的查看memcache中key的python小程序

# /usr/bin/env python
# -*- coding: utf-8 -* 
import socket
import re

class MemcacheServer(object):
    def __init__(self):
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def connect(self, host=None, port=None):
        self.host = host
        self.port = port
        try:
            self.server.connect((host, port))
        except:
            print "connect error ......"


    def send(self, msg):
        self.server.send(msg)

    def get_msg(self):
        buf_len = 1024
        msg = u""
        while True:
            buf = self.server.recv(buf_len)
            msg += buf
            if len(buf)!=buf_len:
                break
        return msg

if __name__ == "__main__":
    ms = MemcacheServer()
    ms.connect("127.0.0.1", 11211)

    items = {}
    totalitems = 0
    ms.send("stats items\r\n")
    for line in ms.get_msg().splitlines():
        match = re.search(u"^STAT items:(\d*):number (\d*)", line)
        if match:
            i, j = match.groups()
            items[int(i)] = int(j)
            totalitems += int(j)

    for buckets in sorted(items.keys()):
        ms.send("stats cachedump %d %d\r\n" % (buckets, items[buckets]))
        for line in ms.get_msg().splitlines():
            match = re.search(u"^ITEM (\S+) \[.* (\d+) s\]", line)
            if match:
                print match.groups()[0]

分类: linux 标签:,

更新了下Rhythmbox文件夹视图插件

05月 31, 2011 发表评论

本来想这个东西没什么用 烂尾了算了

谁知道有人发邮件提起这个东东 说喜欢用 可现在用不了了

那国外友人用的是F15

我装上Rhythmbox一看 这玩意蹦的也太快了吧

我好像才不用它也就几个月的时间吧 版本号直接从0.12蹦到了2.90

女大十八变啊……API都长大了……依稀还能辨认出模样

也用上GTK3了 细节地方各种不同啊……

配置也改成dconf了

改了小两天 终于勉强能用了

欢迎大家各种使用各种围观~~~~

 

PS:项目地址也从google code搬到了github上,https://github.com/imdiot/rhythmbox_folder_view

分类: linux 标签:

来~让我们把gnome-shell中ibus的tray挪挪地儿~~~

04月 23, 2011 发表评论

在很久很久以前 那时的gnome-shell的系统托盘还在右上角

不知从何时起 他们分成了status-icon和message-icon

status-icon有了CSS的外衣住在了右上角 message-icon则搬到了右下角

但是因为底部的通知区域设计成了有消息才会有反应 例如dbus的一些通知什么的

因此产生了一些不爽的感觉

比如我想看一些程序tray的变化 我只能把鼠标挪到右下角才能看到

毕竟现在适合gnome-shell的这种通知模式的程序还很少

下面就以ibus为例 让ibus的tray挪挪窝:

打开statusIconDispatcher.js文件

我用的是arch+testing安装的gnome-shell,statusIconDispatcher.js文件在/usr/share/gnome-shell/js/ui目录下

如果是自己编译的gnome-shell那就应该在~/gnome-shell/install/share/gnome-shell/js/ui目录下

看到statusIconDispatcher.js中的STANDARD_TRAY_ICON_IMPLEMENTATIONS变量了吗 没错 这就是右上方status-icon的白名单~

这个字典的key呢 则是程序tray的wm_class

大家看出来了吧 其实gnome-shell是想把ibus的tray放在右上方的status-icon区域的

可他们毕竟不是中国人 不用ibus………… 这个ibus-ui-gtk好像还是很久很久以前要装ibus-gtk、ibus-qt时候的东西呢吧????

现在ibus tray的wm_class没有设 是默认的main.py……

所以我们只要吧ibus-ui-gtk改成main.py就大功告成啦~~~

其实这根本就不是什么问题嘛 只要ibus的人和gnome-shell的人稍微沟通一些 下个版本大家一起做一两行的就该就OK了嘛

白名单加上statusIconDispatcher.js中的_onTrayIconAdded、_onTrayIconRemoved就可以随你挪啦~想挪谁挪谁 像以前那样放在一起都没问题~

PS:

ibus extensions

StatusIconDispatcher = imports.ui.statusIconDispatcher;

function main() {
    StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS['main.py'] = 'ibus';
}

分类: linux 标签:,

gnome-shell alt+tab 扩展

04月 13, 2011 发表评论

详情见《小hack一下gnome-shell的alt+tab》and《GNOME Shell的“Alt+Tab”革新

听从TualatriX建议写成了个扩展

这可是我第一个gnome-shell扩展哦

刚开始看js 也刚耍上gnome-shell

用的也是最笨的方法………………

使用方法:

在~/.local/share/gnome-shell/extensions/建立alt_tab_key_press@imdiot.wordpress.com文件夹

在alt_tab_key_press@imdiot.wordpress.com文件夹中建立两文件

extension.js:

const St = imports.gi.St;
const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell;
const Clutter = imports.gi.Clutter;
const Meta = imports.gi.Meta;
const Lang = imports.lang;

const Main = imports.ui.main;
const AltTab = imports.ui.altTab;

function startAppSwitcher (shellwm, binding, window, backwards) {
    if (shellwm._workspaceSwitcherPopup != null)
        shellwm._workspaceSwitcherPopup.actor.hide();

    let tabPopup = new AltTab.AltTabPopup();
    tabPopup._keyPressEvent = function(actor, event) {
        let keysym = event.get_key_symbol();
        let event_state = Shell.get_event_state(event);
        let backwards = event_state & Clutter.ModifierType.SHIFT_MASK;
        let action = global.screen.get_display().get_keybinding_action(event.get_key_code(), event_state);

        this._disableHover();

        if (action == Meta.KeyBindingAction.SWITCH_GROUP)
            this._select(this._currentApp, backwards ? this._previousWindow() : this._nextWindow());
        else if (keysym == Clutter.Escape)
            this.destroy();
        else if (this._thumbnailsFocused) {
            if (action == Meta.KeyBindingAction.SWITCH_WINDOWS)
                if (backwards) {
                    if (this._currentWindow == 0 || this._currentWindow == -1)
                        this._select(this._previousApp());
                    else
                        this._select(this._currentApp, this._previousWindow());
                } else {
                    if (this._currentWindow == this._appIcons[this._currentApp].cachedWindows.length - 1)
                        this._select(this._nextApp());
                    else
                        this._select(this._currentApp, this._nextWindow());
                }
            else if (keysym == Clutter.Left || keysym == Clutter.a)
                this._select(this._currentApp, this._previousWindow());
            else if (keysym == Clutter.Right || keysym == Clutter.d || keysym == 96)
                this._select(this._currentApp, this._nextWindow());
            else if (keysym == Clutter.Up || keysym == Clutter.w)
                this._select(this._currentApp, null, true);
        } else {
            if (action == Meta.KeyBindingAction.SWITCH_WINDOWS)
                this._select(backwards ? this._previousApp() : this._nextApp());
            else if (keysym == Clutter.Left || keysym == Clutter.a)
                this._select(this._previousApp());
            else if (keysym == Clutter.Right || keysym == Clutter.d)
                this._select(this._nextApp());
            else if (keysym == Clutter.Down || keysym == Clutter.s || keysym == 96)
                this._select(this._currentApp, 0);
        }

        return true;
    }

    if (!tabPopup.show(backwards, binding == 'switch_group'))
        tabPopup.destroy();
}

function main() {
    Main.wm.setKeybindingHandler('switch_windows', Lang.bind(Main.wm, startAppSwitcher));
}

metadata.json:

{
    "shell-version": ["3.0.0.2"],
    "uuid": "alt_tab_key_press@imdiot.wordpress.com",
    "name": "alt_tab_key_press",
    "description": "change alt+tab key press -> begin alt+tab you can alt+w,s,a,d,` control",
    "url": "imdiot.wordpress.com"
}

分类: linux 标签:,

小hack一下gnome-shell的alt+tab

04月 10, 2011 3 条评论

TualatriX在《GNOME Shell的“Alt+Tab”革新》中介绍了gnome-shell的alt+tab 那时我还没用过gnome-shell 虽说之后偶尔耍耍gnome-shell 但也是浅尝即止 这几天有时间好好玩了玩gnome-sehll

看过TualatriX的那篇文章后 发现自己的alt+tab的快捷键与那时的已经不一样了 可能是代码做了调整了 已经没有alt+`了 alt+a、w、s、d也变成了alt+上、下、左、右 感觉还没有`、a、w、s、d方便

所以就hack了一下alt+tab 具体的使用方式可以看TualatriX的文章

[yangguang] [~/gnome-shell/install/share/gnome-shell/js/ui]
> diff altTab.js ../../../../../source/gnome-shell/js/ui/altTab.js
253c253
<             else if (keysym == Clutter.Left || keysym == Clutter.a)
---
>             else if (keysym == Clutter.Left)
255c255
<             else if (keysym == Clutter.Right || keysym == Clutter.d || keysym == 96)
---
>             else if (keysym == Clutter.Right)
257c257
<             else if (keysym == Clutter.Up || keysym == Clutter.w)
---
>             else if (keysym == Clutter.Up)2
62c262
<             else if (keysym == Clutter.Left || keysym == Clutter.a)
---
>             else if (keysym == Clutter.Left)
264c264
<             else if (keysym == Clutter.Right || keysym == Clutter.d)
---
>             else if (keysym == Clutter.Right)
266c266
<             else if (keysym == Clutter.Down || keysym == Clutter.s || keysym == 96)
---
>             else if (keysym == Clutter.Down)

分类: linux 标签:
加关注

Get every new post delivered to your Inbox.