Archive@2008/01

Macでユーザの追加のやり方

Leopardになって、NetInfoが無くなってから、 どうやってユーザ追加するのかな?と思ってたら、 dscl ってコマンドで出来るらしいよ。

$ sudo dscl . -create /Users/<USERNAME>
$ sudo dscl . -create /Users/<USERNAME> UniqueID <uid>
$ sudo dscl . -create /Users/<USERNAME>  PrimaryGroupID <gid>
$ sudo dscl . -create /Users/<USERNAME> UserShell </path/to/shell>
$ sudo dscl . -create /Users/<USERNAME> NFSHomeDirectory </path/to/home>

グループの追加はこんな感じらしい。

$ sudo dscl . -create /Groups/<GROUPNAME>
$ sudo dscl . -create /Groups/<GROUPNAME> PrimaryGroupID <gid>

【コラム】OS X ハッキング! (251) Leopard解体新書(2) ~さようならNetInfo~ | パソコン | マイコミジャーナル で、 結構詳しく解説してくれるよ。

迷ったときは、とりあえず、

$ dscl
>help

して、ヘルプみたら良いって覚えておく。

Posted at: 
2008/01/23 08:51:35
0 Comments
0 TrackBacks
Tags: 
CUI
Mac
Trackback: 
http://humming.via-kitchen.com/2008/01/23/how-to-add-user-on-mac/trackback/

AS3でイベントのブロードキャスト。

AS3でイベントをブロードキャストしたくて、 色々試してたら、意外に素直に出来る事が分かったよ。 間にイベントハンドラで1クッション入れるだけで出来た。

例えば、こんな感じの SomeView なムービークリップがいたとして、

public class SomeView extends Sprite
{
    public function SomeView():void
    {
    }
}

それの子要素にn個の SomeButton がいたとする。

public class SomeButton extends Sprite
{
    public function SomeButton():void
    {

    }
}

で、どれか1個の SomeView がクリックされたら、 全部にイベントを送信したい場合とか、

public function SomeView():void
{
    var b:SomeButton;
    for (var i:int = 0; i < 20; i++)
    {
        b = addChild(new SomeButton()) as SomeButton;
        //  SomeButtonを初期化。
        b.initialize();
        //  自分がクリックされたら、親のリスナーをコール。
        b.addEventListener(MouseEvent.CLICK, clickListener);
    }
}

private function clickListener(evt:MouseEvent):void
{
    //  ココでイベントをブロードキャスト。
    dispatchEvent(new Event('someType'));
}

親をこんな感じにしておいて、 子供側では、

public function SomeButton():void
{
    //  ココではparentが取れない(時がある)。
}

public function initialize():void
{
    //  親からブロードキャストされたイベントを補足。
    parent.addEventListener('someType', someTypeListener);
}

public function someTypeListener(evt:Event):void
{
    //  ココに処理を書く。
}

こうしておくと結構シンプルに書けるんじゃないかと。 色々殴り書き感が否めないのはご愛嬌 :-)

berian 氏、こんな感じでどうでしょ?

Posted at: 
2008/01/20 14:12:48
2 Comments
1 TrackBack
Tags: 
ActionScript
Flash
Trackback: 
http://humming.via-kitchen.com/2008/01/20/broadcast-event-on-actionscript3/trackback/

Macでパスワード付きzipを作る。

Mac でパスワード付きzipを作りたいと思って、 色々探しまわってみたら、 Zip Tools for Mac OSX なんてモノを見つけた。 これの中に入ってる zipcloak ってコマンドでパスワードを設定出来るらしい。

で、入れる前になんとなくwhichしてみたら、 10.5にデフォルトで入ってたよ。

//  圧縮自体はしてくれないので、先にやっておく。
$ zipcloak /path/to/hoge.zip

ってやると、パスワードを聞かれる。 2回聞かれるので、同じのを入力しておしまい。

デフォルトのアーカイブユーティリティだとエラー吐いて展開出来ないけど、 StuffIt Expander なら問題なく展開出来た。

Posted at: 
2008/01/15 05:24:49
0 Comments
1 TrackBack
Tags: 
CUI
Mac
Trackback: 
http://humming.via-kitchen.com/2008/01/15/create-locked-zip-on-mac/trackback/

flashでタグクラウド作ってみたよ。

flash でタグクラウド作ってみたよ。 実際に横で動いてるのがそれ。 なかなかぐにゃぐにゃしてて良い感じ。

出来るだけブログパーツっぽく作りたかったので、 xmlを取りに行くurlや、背景、ボーダー部分は指定出来るようにしてみたよ。 flashVarsで渡してあげると、それぞれ反映されますです。

オプション 説明 デフォルト値
url xmlを取りに行くurl /tagcloud.xml
background-color 背景の色 0xFFFFFF
border-color ボーダーの色 0xD8D8D8
min-font-size フォントの最小値 12
max-font-size フォントの最大値 72

url以外は指定しなくてもちゃんと動く(ハズ)なので、 後はお好みで変えてみてくださいまし。 実際使うときは SWFObject 使うと楽で良いと思われます。

var so = new SWFObject('tagcloud.swf', 'tagcloudId', '400', '400', '9', '0xFFFFFF');
//  オプションを指定。
so.addVariable('url', '/path/to/xml');
...
so.write('replaceId');

最大の欠点は日本語の表示が出来ません! 埋め込んでいるフォントの兼ね合いなのですが、 日本語フォントはどれもちょっと...。 なので、対応予定もございません。

モノ自体は ココ にあるので、 万が一使っても良いよ。って方は気軽に持って行ってくださいまし。

ps. kishi-r 氏、お待たせ致しました!

追記

xmlの形式書くの忘れてました。 こんな形式のxmlを受け取るようになっております。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cloudset>
    <cloud>
        <label>タグの名前</label>
        <url>遷移するURL</url>
        <rank>タグのランク</rank>
    </cloud>
    <cloud>...</cloud>
    ...
</cloudset>

ランクは0〜24までの25段階になっております。 計算方法は それなりブログ さんの タグクラウドのアルゴリズム が分かりやすくて参考になると思います。

Posted at: 
2008/01/12 03:17:13
5 Comments
1 TrackBack
Tags: 
ActionScript
Flash
Trackback: 
http://humming.via-kitchen.com/2008/01/12/make-tagcloud-on-flash/trackback/

jquery.hotkeys.jsを試してみたよ。

jQuery のプラグイン jquery.hotkeys.js を試してみたよ。

ダウンロードは js-hotkeys - Google Code から。 落としてきたものを展開するんだけれども、 カレントディレクトリに散乱してしまうのでディレクトリを掘った方が良いと思う。

展開した中に入っている jquery.hotkeys.js がそれ。 一緒に入ってる jQuery は 1.1.4なものの、 1.2.1もサポートされているみたいなので気にせず1.2.1で動かす。 サンプル的な動きは Live Demo を見るのが良いと思う。

インターフェイスはこうなってるらしい。

//  イベント設定。
$.hotkeys.add(KEY, OPTIONS, CALLBACK);

//  イベント削除。
$.hotkey.remove(KEY, OPTIONS);

引数の中で、 OPTIONS はオプションで、 特に指定が無ければ省略出来るよ。 なので、一番簡単な使い方はこんな感じになる。

//  "j"のkeydown(デフォルト)にイベントリスナーを設定。
$.hotkeys.add('j', function ()
{
    alert('hit.');
});

//  "j"のkeydown(デフォルト)のイベントリスナーを削除。
$.hotkeys.remove('j');

オプションは以下のようなものがある。

キー タイプ デフォルト値 説明
type String keydown 補足するイベント
propagate Boolean false イベントの伝達を制御
disableInInput Boolean false inputやtextareaのフォーカス時の処理を制御
target element/String html callbackのthisを指定
checkParent Boolean true OperaとSafariのバグ依存回避用?

オプション指定する場合こんな感じ。

//  "Ctrl+a"のkeyupにイベントリスナーを設定。
$.hotkeys.add('Ctrl+a',
{
    target  : 'div.select',
    type    : 'keyup'
}, function()
{
    //  クラスhigeをトグル。
    $(this).toggleClass('hige');
});

//  "Ctrl+a"のイベントリスナーを削除。
$.hotkeys.remove('Ctrl+a', {target: 'div.select'});

このオプションの中でも良く使うと思うのが、 type はまぁ良しとして、 disableInInput だと思う。 これ、物凄く便利っす。 こいつを true にしておくだけで、 inputtextarea にフォーカスしてる時は処理をスルーしてくれる。 今回はフォームとは全く関係ない処理を書いてたので、 本当に助かった。

何となくですが、今回書いたものを晒してみたり。 jとkでh1〜h6を行ったり来たりするだけ。

(function ()
{
    //  hotkeysのオプションを定義。
    var options = {
        'type': 'keydown',
        'disableInInput': true
    }
    //  ポジションホルダー
    var positions = [0];
    //  それぞれのヘッダの位置を取ってくる。
    $('h1, h2, h3, h4, h5, h6').each(function ()
    {
        positions.push(this.offsetTop + 15);
    });
    //  ソート。
    positions.sort(function (a, b)
    {
        return a > b ? 1 : -1;
    });
    //  現在の位置を取得する関数を定義。
    var getOffset = function ()
    {
        if ($.browser.msie)
            return document.body.scrollTop || document.documentElement.scrollTop;
        else
            return window.pageYOffset;
    }
    //  "j"にイベントリスナーを登録。
    $.hotkeys.add('j', options, function ()
    {
        var offset = getOffset();
        for (var i = 0; i < positions.length; i++)
        {
            if (offset < positions[i])
            {
                window.scrollTo(0, positions[i]);
                break;
            }
        }
    });
    //  "k"にイベントリスナーを登録。
    $.hotkeys.add('k', options, function ()
    {
        var offset = getOffset();
        for (var i = positions.length; i >= 0; --i)
        {
            if (offset > positions[i])
            {
                window.scrollTo(0, positions[i]);
                break;
            }
        }
    });

})();//END: lambda.
Posted at: 
2008/01/07 23:34:25
0 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
plugin
Trackback: 
http://humming.via-kitchen.com/2008/01/07/tried-using-js-hotkeys/trackback/

threadの動作の違うよ。

Python でスレッドまわりを勉強してて、未解決メモ。

3つのスレッドが、それぞれ0から9まで数え上げるって言う、 簡単なものなのですが、 こんな感じで実装すると、 シェルから叩いた時には全部数え上げる前に終了してしまう。

#!/usr/bin/env python2.5
# vim: encoding=utf-8 :

import time
import thread

def run():
    for i in range(10):
        print i
        time.sleep(1)

def main():
    for i in range(3):
        thread.start_new_thread(run, ())
        time.sleep(1)

if __name__ == '__main__':
    main()

でも、この実装だとちゃんと数え上げられた数字が全て表示される。

#!/usr/bin/env python2.5
# vim: encoding=utf-8 :

import time
from threading import Thread

class CountThread(Thread):
    def run(self):
        for i in range(10):
            print i
            time.sleep(1)

def main():
    for i in range(3):
        CountThread().start()
        time.sleep(1)

if __name__ == '__main__':
    main()

この挙動の違いはどうなってるんだろう?

本当に途中で終わっているのかテストしてみようと、 数え上げている数字をファイルに書き出してみると、 上の方だと、 Bus error とかエラー吐いて終了する。 どうやら、ホントに途中で終わってるっぽい。

threading.Thread の方が高水準なインターフェイスらしいので、 何か知らない処理が挟まっているんだろうと推測。 まだまだ勉強が必要ですな。

ちなみに、 threading.Thread のコンストラクタに target を渡すやり方で起動しても、 run をオーバライドした時と同じ動作をしてくれた。 ので、今のところは後者を使っていきたいと思います。

Posted at: 
2008/01/06 23:00:56
0 Comments
1 TrackBack
Tags: 
Python
Thread
Trackback: 
http://humming.via-kitchen.com/2008/01/06/2-threads-have-different-motion/trackback/

明けましておめでとうございます。

明けましておめでとうございます。

去年は本当に濃い1年だったのですが、 今年はさらにアグレッシビリティの高い1年にしたいと思います。

とりあえず今年の目標として、

  • ActionScript 3.0 を思い通りに。
  • PythonThread まわりと仲良しに。

ってか、まぁプログラムを人並みに書けるようになりたいっすな。 「なんちゃって」を抜け出したいと思います。

そんなこんなで、今年も1年宜しくお願いいたしますー。

Posted at: 
2008/01/02 23:06:31
3 Comments
0 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2008/01/02/a-happy-new-year/trackback/

Categories

Archives