2013年10月20日日曜日

久しぶりに蕎麦をリバースエンジニアリングしてきました

油でHackされた体を蕎麦で健康な体に


自社の社員用弁当注文管理システムに、自分の弁当の注文をし忘れたので、久しぶりに油まみれの体を浄化するため、蕎麦にしてみました。自分の弁当が無いことを、注文システム開発部門に、注文機能関連のバグではないかと、問い合わせをしていますが返事が帰ってきません。

三島近辺で仕事をしている割にはお店の情報には疎いのですが、ここのお蕎麦はなかなかおいしいと思いました。このお蕎麦やさんが有名かどうかは解りませんが、お近くにイらした際はよってみてはいかがでしょうか?


蕎麦処 飯嶋


三島の楽寿園の裏あたりにあるお店です、店内からは外の緑が綺麗に見れる落ち着いた雰囲気のお店です、日本蕎麦屋的な感じが高級に感じます。お店の外観はこんな感じです。




お蕎麦


食べたのは二八そば、その他に2種類のそばが選べます、こしがあっておいしかったです。蕎麦つゆが甘くなく自分にあっていたような気がします。蕎麦には日本酒が合うと聞いたことを急に思いだしました。



お店近辺


お店の外には川が流れてまして、巨大な鯉などが泳いでいます。休日に散歩なんかも洒落ています。



お昼のあとは

飯を食った後は、フルーツを...


頂きません!!!、お昼から仕事が待っています。

話がそれましたが、皆さんもたまには内臓を休める為にも、お蕎麦なんかどうでしょう?体を洗われたような感じがして、お腹もすっきりしますよ。三島はいいところです。



場所 

 


大きな地図で見る


2013年10月7日月曜日

「第2回 コンテナ型仮想化の情報交換会@東京」へ参加してきました

コンテナ型VMのお話を聞いてきました


以前から多少追っかけていたコンテナ型仮想化のお話に興味をそそられて行ってきました。勉強会の内容はここ最近のLXCやgcroupの最新動向や、他のLinux、BSD系のコンテナ技術などが学べてだいぶ勉強になりました。

「第2回 コンテナ型仮想化の情報交換会@東京」内容
  • Linuxコンテナの最新動向(Linux kernel と LXC)
  • OpenVZ
  • OpenStack環境で、FreeBSD Jail + VIMAGE を使った疑似インターネット実験環境の構築
  • Sqale で cgroup に forkbomb 対策入れた話
  • libcgroupとmrubyを使ったWebサーバのリソース制御アーキテクチャ
  • vagrantとdockerでの簡単開発環境 / hot patchingで遊ぼう
最後の2つは時間の都合上お話をきけづに撤収したのが残念でした。


LXC


コンテナ間の隔離機能としてのnamespaceや、コンテナのリソース制限のためのcgroupsなどの最近の実装状況や、使い方などが大変参考になりました。

加藤泰文 さん(@ten_forward) の資料


OpenVZ


Virtuozzo界隈ではもう有名な、OpenVZも最近ではいろいろな機能が追加されていて何かと新鮮味を感じました。やはり結構まえからこの手の仮想化で歴史があるので、コンテナの管理系コマンドやその他の操作のしやすさがあるのではないのかなと、個人的には感じました。中でもチョット気になったものに
  • ploop(disk loopback block device) ・・・ ファイルシステムをブロックデバイスとして見せる機能
  • CRIU ・・・ checkpoint/restore in userspace(コンテナの全プロセスのスナップショット)
poolp+CRIUでコンテナのライブマイグレーションの効率的な実行が出きるとか(実際やって見たことはないのですが、古いVirtuozzoではvzctl migrateはできなかったような記憶があります)
コンテナのマイグレーションを結構な短いダウンタイムで実行できるらしいので今度試してみようかと思います。

@ebikenさんの資料


FreeBSD Jail + VIMAGE


FreeBSDのコンテナ環境のjailとVIMAGEで複雑なコンテナ間のネットワーク構築方法等を教えていただきました。

 山本 茂さんの資料


Sqale で cgroup に forkbomb 対策


(株)paperboy&co.さんのホスティングサービスsqaleのお話、可能な限りオーバーヘッドなくす事や、集積度をあげるためのLXCの採用事例の説明や、為になるお話を聞けたと思いました。
中でもSqaleで発生したfork bombに対する対策ではcgroup controller "fork"というパッチを独自にカスタマイズして対応したあたりなんかは技術力の高さが素晴らしいと感心してしまいました。

MIZZYさんの資料

感想


普段はOpenIndiana、Solaris11のZoneを利用することが多いので、それ以外のコンテナ技術から離れていたので最近のコンテナ技術の動向や、技術面での情報等が非常に参考になりました。LXCなんかは結構、他社の皆さんがリリース環境で利用されているのですね。仮想化技術も色々ありますが、選択肢が増えたような気がします。


情報量が多すぎてブログなどでは説明しきれないので、あまり詳細にかけませんが、非常に内容の濃い勉強会でした。また機会があれば行きたいと思います。

みなさんこの度はありがとうございました。



2013年9月26日木曜日

アワビに合う焼酎を見つけたい

子供のころから捕獲しすぎたアワビが、大人になってだいぶ飽きてきた。
ビールではなく、いいちこで飲みたいが、どのいいちこが合うのだろうか?

「いいちこ20度」

「いいちこ25度」

選択肢は2つしかない、選びようがあまり無いような感じがします。

@ando_ando_ando先生、どうかほっといてください。



2013年9月16日月曜日

gentooでwebサイトのキャプチャをとりまくる

webサイトのURLからそのままキャプチャする


webサイトとかのキャプチャをブラウザなどで取得することが多いとは思いますが、そのままコマンドで取得できれば便利ですよね。

そんな僕達の悩みを叶えてくれるライブラリがありましたのでご紹介します。

wkhtmltopdf、wkhtmltoimageを使ってみる


これはwebkitのレンダを利用してURLやhtmlファイルからPDFや画像ファイルへ変換してしまうアプリケーションです。
X Serverを利用するためチョットインストールが面倒なのですが頑張って入れれば何とかなるでしょう。

wkhtmltopdfをインストール


gentooでしたらmaskを外してこれだけです
karky7 ~ # emerge -pv media-gfx/wkhtmltopdf
これでコマンドとライブラリがはいります

wkhtmltopdfを使ってみる


インストールされるコマンドは2つで
  • wkhtmltopdf
  • wkhtmltoimage
使い方はすごく簡単

WebサイトをPDF化する


PDFにする場合は、wkhtmltopdfを利用する
karky7 ~ # wkhtmltopdf https://www.google.co.jp/ /tmp/google.pdf
Loading page (1/2)
Printing pages (2/2)
Done
karky7 ~ #
ローカルのhtmlファイルもPDF化できる、画像が外部ですとしっかり表示できませんでした。
karky7 ~ # wkhtmltopdf gentoo.html /tmp/gentoo.pdf
Loading page (1/2)
Printing pages (2/2)                                               
Done                                                           
karky7 ~ #
これは便利、その他にもgrayscaleや色々オプションがありますので試してください

Webサイトを画像で取得する


画像で取得する場合は、wkhtmltoimageを利用する
karky7 ~ # wkhtmltoimage http://news.livedoor.com/article/detail/7052329/ /tmp/kyaba.png
Loading page (1/2)
Rendering (2/2)                                                    
Done                                                               
karky7 ~ #
こんな感じです


webページ全体が取得できます、画質やサイズなどはオプションで指定できますので--helpで確認してください。

Pythonからご利用する


コマンドでけでも結構便利なのですが、Pythonなんかから使えればなお便利と言うことで探しました、で、ありました。
Gentooでしたらebuildを作っておきましたのでよかったら使ってください。
karky7 ~ # layman -a karky7
karky7 ~ # emerge dev-python/py-wkhtmltox
使い方、公開されているリポジトリをcloneすればサンプルが入っていますのでそれを実行してください、画像が取得できるはずです。
その他のOSの方は、setup.pyを実行すれば入ると思います
import wkhtmltox

img = wkhtmltox.Image()
img.set_global_setting('out', 'test.jpg')
img.set_global_setting('in', 'http://www.google.com')
img.convert()

PHPからご利用する


これは外せない言語ですよね、みんなのPHPが使えないってありえない、で、インストール

Gentooでしたらebuildを作っておきましたのでよかったら使ってください。
その他の、OSの方は、phpizeからのconfigure、makeでインストールできると思います。
karky7 ~ # layman -a karky7
karky7 ~ # emerge dev-php/php-wkhtmltox
使い方はほぼ一緒
<?php

wkhtmltox_convert('image', 
    array('out' => '/tmp/test.jpg', 
          'in' => 'http://www.google.com/')
); // global settings

?>
LWLな言語から使えるとお手軽に実装が出きると思います、gdとかimagemagickでいじればwebサイトのモールとかリスト表示にサムネイルとか表示できて、かっこいいかも。
ちなみに、かわいいおねぇさんの画像をとるためのものではありません。

参考サイト


こちらのサイトを参考にさせていただきました。

2013年9月15日日曜日

EvernoteのLinuxクライアントNixNoteのebuildを作りました

NixNoteのGentoo用のebuildを作りました

元々scrillというlaymanリポジトリでnervernoteというEvernoteのクライアントがあったのですが、そろそろ古くなったので新しいバージョンのNixNoteを入れてみました(名前も変わっていましたね)

インストール


いつのもようにemergeしてください
karky7 ~ # emerge -pv x11-misc/nixnote

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] dev-java/icedtea-bin-6.1.12.6:6  USE="X alsa doc -cjk -cups -examples -nsplugin -source" 0 kB
[ebuild  N     ] virtual/jdk-1.6.0-r2:1.6  0 kB
[ebuild  N    ~] x11-misc/nixnote-1.6::karky7  0 kB

Total: 3 packages (3 new), Size of downloads: 0 kB

 * IMPORTANT: 1 news items need reading for repository 'hacking-gentoo'.
 * IMPORTANT: 16 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

karky7 ~ #

使ってみる


起動してからアカウント設定をすればご利用を開始できます



  「Syncronize」辺りを押すと認証ダイアログが出力されるのでEvernoteのアカウントを入力してください


こんな感の画面です



ネットワークが利用できないような時にローカルで見れるのでチョットしたときに重宝します。
よかったらご利用ください。


2013年9月6日金曜日

PHPとPythonでAES暗号化、復号化

キャバクラに行ったことを女房にバレないように暗号化する


非SSL環境などで他人に見られたくない情報をURLなどで渡したいがそのまま丸見えで渡したくはないという時ってありますよね?

ない?、いやありました。
そんなことがあったので、こんな感じでやってやりました。
AES暗号の詳しい事は専門の方にお願いするとして、簡単に説明しますと、共通鍵ブロック暗号と言うことです。

これはたまんない、秘密にしたいですよね。
 

PHPで暗号化する


ECBモードを利用するのでIV(初期化ベクトル)パラメータは利用しない、そのためキーのみを利用した暗号化になってしまうのでキーがバレればそれまで。
<?php
/* keyは32文字 256bit */
$key = '12345678901234567890123456789012';

/* python側へ0x00の制御文字が入る*/
$text = '私は妻に内緒で昨日キャバクラに行ってしまいました';

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_ECB);
$encstr = base64_encode($encrypted);
print($encstr);
print("\n");
?>
実行してみる
cuomo@karky7 ~/Code/lwl/php/aes $ php aes3.php 
hiPI4JYACRvv16+WVuJf0BcooUjHFJ7kkLFg+ZYxW0wxFBmeGL3CmPpJM++/VKFs/tVeiC2ZDb+2i77Yke6pg4xNgBrD6sKDcRc4JDAWzY4=
cuomo@karky7 ~/Code/lwl/php/aes $

これでキャバクラに行ったことは解らない。

残念ですがPythonで複合化される


秘密の文字を複合化してみる、ブロック暗号なのでブロック境界に満たない場合\x00の(多分NULL)が埋められて復号化されるのでその分を削除する。enc_messageにPHPで出力された文字をコピーしてください。
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from Crypto.Cipher import AES
import base64

'''鍵 16、32で指定しなければならない'''
key = '12345678901234567890123456789012'

'''暗号化情報'''
cipher = AES.new(key)

'''秘密の文字'''
enc_message = 'hiPI4JYACRvv16+WVuJf0BcooUjHFJ7kkLFg+ZYxW0wxFBmeGL3CmPpJM++/VKFs/tVeiC2ZDb+2i77Yke6pg4xNgBrD6sKDcRc4JDAWzY4='
data = base64.b64decode(enc_message)

''' 復号化'''
message = cipher.decrypt(data)
message = unicode(message, 'utf-8')

''' \x00の削除 '''
message = message.rstrip(unichr(0))
print("元メッセージ: " + message.encode('utf-8'))
実行してみる
cuomo@karky7 ~/Code/lwl/Python/aes $ python aes2.py 
元メッセージ: 私は妻に内緒で昨日キャバクラに行ってしまいました

これはヤバい、これをやられてしまうと、キャバクラに行ったことがバレますね。

普段の何気ない生活の中でも、少し暗号化すればセキュリティが上がるのでは無いでしょうか?


2013年8月16日金曜日

朝霧ジャンボリーゴルフクラブでゴルフをやってやりましたよ

久しぶりのゴルフで、マネージャポイント下げました


「8月の暑い最中ゴルフなんか出きるかよっ!」って思ってる皆さんこんにちは。
出きるんですよ、朝霧なら。

今回は会社のゴルフ仲間と、仲間といっても3人デスが... 久しぶりのゴルフを楽しんできました。天気もよく、富士山の近くなのでウダルような暑さも感じられず、この時期にしては最高のコンディションでプレイしてきました。

AJGCのツツジ?文字がきらめいています。




朝霧ゴルフカントリークラブとは


 第13回世界ジャンボリー開催地

1971年8月に日本で初めての第13回世界ジャンボリーが開催され、何と参加国は87ヶ国、参加人数は23758人と大規模なイベントだったそうです。各国のパレード、キャンプファイヤー、富士登山・ワイドゲーム(これはなにか不明)などのイベントが盛大に行われて、海を越えたスカウトの皆さんが親睦を深めたそうです。
8月7日には、当時の皇太子殿下(現天皇陛下)と美智子妃殿下(皇后殿下)が会場にお越しになりスカウトの皆さんを励まされたそうです。

世界ジャンボリーとは

ボーイスカウトの創始者である英国のベーテン・パウエル卿が青少年の訓育理念を確認するため1907年にイギリス沿岸のウラウンシー島で開催した実験キャンプを記念して生まれたもです。「ジャンボリー」の語源は定かではないのですがスカウトにとっては日頃の訓練を示す場であり、言い換えれば「世界平和の道標となる祭典」といえるでしょう。

朝霧ジャンボリークラブは、この大会を記念して命名され、1975年4月29日に会場となりました。

wiki: ベーテン・パウエル卿

貴重品ロッカーの操作方法を間違える

お財布などを保管しておく貴重品ロッカーですがユーザーインターフェースがあまりよくないので注意してください。ちなみに僕達3人はお財布を保管するのに同じ操作ミスをしていました。IT系の私たちが操作を間違えているようだと、相当数の人が同じ操作ミスをしているんじゃないかとおもいます。

その操作ミスとは
  •  バーコードの読み込み装置の位置(バーコードをかざす)を間違える
  • ランプをみる位置によって使用中(点灯)、未使用中(消灯)が分かりにくい
間違える順序も概ね同じで、まず、登録のためのバーコード読込をキーボードの上部でかざしてしまい(キーボードの設置位置が凹んでいるため、無意識にその奥が読み込み機器があると勝手に思い込んでしまう)、機械の反応が無い状態でしばらく悩む。それから、バーコードtrapをクリアした直後に、「使用中」の金庫を選択してしまう。本来は「未使用」のロッカー番号を選択しなければならい。

これによって、ランプの目視確認のために、ランプの正面で発光状態を確認しにいくという、体の状態を左右、上下運動を行って、足腰に負担をかけてしまう。これはゴルフのスコアを下げる事になるので止めた方がいい。

改善策としては、バーコードを当てる場所をもう少し目立つようにし、メッセージに早い段階に目に入るようにUIを修正する。
ランプに関しては、LEDなどもう少し発行し、省エネなものに変えることと、赤いプラスチックの反射板をどこの角度でも見分けられるようなものに変更するなどの処置が必要と思われる。

画像をあげて置きますので、皆さん使用する事があれば、注意してください。



そしてゴルフ


コース

コースは「富士コース」「駿河コース」「甲斐コース」の三つのコースがあり、本日私たちは「富士コース」と「甲斐コース」でした。幅が広く、右へ左への私としては安心して思いっきりドライバーを使えるような広々としたコースでした。フェアーウエイ、ラフ、グリーンもすごく手入れされていて贅沢な感じです。



こいつはあの憎き宿敵、弊社マネージャーN氏、赤い彗星のシャー好きのくせに何で今日はグフ色のパンツなのかは突っ込めなかった。
奴とは最終ホールで1打差の攻防を繰り広げたが、最終的に私が撃破されました。まずぃっ! (アゴなしゲンとオレ物語風に)

wiki: アゴなしゲンとオレ物語


青ズボン、ムカッ、ナイチュ ショット! 彼の捨て台詞が、

「俺に勝ったらマネージャーポイントをあげてやるっ!」、なな、なんだって!!!! ざけんな!

結果

もうぐちゃぐちゃです、無残にも破れました、マネージャポイントゲットならず...見ていろよっ!、次はちゃんと練習してリベンジしてやる。

真夏のゴルフも気持ちよく楽しいです、いい運動にもなりますし、運動嫌いのエンジニアもみんなでワイワイとゴルフしながらだったら楽しめるかもよ。


 最後に、ゴルフは、できれば乗用車で行った方がいいぞ、玄関先の人がちょっと対応に困るのと(困っているように確実に見える)、止める場所がかなり遠くになる(高級車の横とか前とか、後ろとか色々問題が...)。

まぁ、それでも車が無いのでこれで行きますが、また近いうちにゴルフやりましょう。

場所


大きな地図で見る

2013年8月14日水曜日

haskellでmemcachedとお友達になれる

haskellでmemcachedにアクセスする

ここ最近pythonなどでmemcacheを触ることが多かったので、「haskellにはあるのかな?」と思い探して見たところ、
githubのbeketaさんのリポジトリにhaskell-memcachedが公開されていましたのでforkさせて頂き、Gentoo用のebuildを作らさせていただきました。
ありがとうございました。


haskell-memcacheインストール

自分の使用しているghcが7.6.3で現行のバージョンが動かなかったため、ちょっとcabalファイルにパッチを当てさせてもらいました。

インストールはGentooでしたら、
karky7 ~ # emerge -pv dev-haskell/memcached
[ebuild  N    ~] dev-haskell/memcached-9999:0/9999::karky7  USE="doc hscolour -profile" 0 kB
karky7 ~ #

直接git cloneでしたら、
cuomo@karky7 ~/blogs $ git clone https://github.com/karky7/haskell-memcached.git
Cloning into 'haskell-memcached'...
remote: Counting objects: 111, done.
remote: Compressing objects: 100% (58/58), done.
remote: Total 111 (delta 55), reused 105 (delta 51)
Receiving objects: 100% (111/111), 17.94 KiB, done.
Resolving deltas: 100% (55/55), done.
cuomo@karky7 ~/blogs $ cd haskell-memcached/
cuomo@karky7 ~/blogs/haskell-memcached $ runhaskell Setup.hs install
でいくとは思われますが、やった事はございません。

クライアントコードを書いてみる

インストールが完了したら、実際にアクセスできるか試します、テストコードを見つつ、サンプルコードを書いてみました。

処理内容は以下の3つ
  • memcachedの設定値の取得
  • Intの値の保存と取得
  • ユーザー定義型の保存と取得
を単純に実行しています

import qualified Network.Memcache as M
import Network.Memcache.Protocol as P
import Network.Memcache.Serializable(Serializable(..))
import Data.ByteString.Char8 as C (pack, unpack, words)

data User = User {
  getUsername :: String,
  getAge :: Int
} deriving Show

instance Serializable User where
  serialize (User name age) = pack $ name ++ " " ++ show(age::Int)
  deserialize str = case C.words str of
    (un:ag:[]) -> Just (User (unpack $ un) (read (unpack ag)))
    _          -> Nothing

main :: IO ()
main = do
  memcache <- P.connect "localhost" 11211
  -- Memcacheステータス表示
  putStrLn "------------------"
  putStrLn "Memcacheステータス"
  putStrLn "------------------"
  status <- stats memcache
  _ <- mapM (\tp -> do
                let name = fst tp
                    val  = snd tp
                putStr $ name ++ " = " ++ val ++ "\n") status
  putStrLn ""

  -- Int値を保存
  let foo = 8888 :: Int
  putStr "Setting foo => 3: ... " >> M.set memcache "foo" foo >>= putResult
  -- Int値を取得
  foo' <- M.get memcache "foo"
  case foo' of
    Nothing -> putStrLn "Retrieving foo: expired from cache?"
    Just v  -> putStrLn ("Cached value for foo is " ++ show (v::Int) ++ ".")

  -- ユーザー定義型を保存
  let ando = User "#Ando" 29
  putStr "#A to memcache ... " >> M.set memcache "ando" ando >>= putResult
  -- ユーザー定義型を取得
  ando' <- M.get memcache "ando"
  case ando' of
    Nothing -> putStrLn "#Aは逝ってしまいました"
    Just v  -> putStrLn $ "#A 見っけ お名前は " ++ getUsername v ++ " お年は " ++ show (getAge v)
  P.disconnect memcache

putResult :: Bool -> IO()
putResult r = case r of
  True -> putStrLn "成功じゃないの"
  _    -> putStrLn "それそれ..."

memcachedへ接続してみる

まずmemcachedデーモンを起動しましてサンプルコードの実行
karky7 ~ # /etc/init.d/memcached start
 * Starting memcached ...
 * You should edit /etc/conf.d/memcached and specify an address to listen on.
 * Listening on any address (check your firewall!)                [ ok ]
karky7 ~ #

cuomo@karky7 ~ $ runhaskell memcache_client.hs
------------------
Memcacheステータス
------------------
pid = 7704
uptime = 179
time = 1376452659
version = 1.4.5
pointer_size = 64
rusage_user = 0.016000
rusage_system = 0.000000
curr_connections = 10
total_connections = 11
connection_structures = 11
cmd_get = 0
cmd_set = 0
cmd_flush = 0
get_hits = 0
get_misses = 0
delete_misses = 0
delete_hits = 0
incr_misses = 0
incr_hits = 0
decr_misses = 0
decr_hits = 0
cas_misses = 0
cas_hits = 0
cas_badval = 0
auth_cmds = 0
auth_errors = 0
bytes_read = 7
bytes_written = 0
limit_maxbytes = 67108864
accepting_conns = 1
listen_disabled_num = 0
threads = 4
conn_yields = 0
bytes = 0
curr_items = 0
total_items = 0
evictions = 0
reclaimed = 0

Setting foo => 3: ... 成功じゃないの
Cached value for foo is 8888.
#A to memcache ... 成功じゃないの
#A 見っけ お名前は #Ando お年は 29
cuomo@karky7 ~/Code/haskell/memcached $

memcached付属のコマンドツールでメモリをdumpしてみる

cuomo@karky7 ~ $ memcached-tool localhost dump
Dumping memcache contents
  Number of buckets: 1
  Number of items  : 2
Dumping bucket 1 - 2 total items
add foo 0 1376452480 4
8888
add ando 0 1376452480 8
#Ando 29
cuomo@karky7 ~ $

#A君を突っ込んで、出したりと出きるようになりました、User型みたいのは別として、シリアライズ方法がshowとreadで概ねhaskell用になっているのでjsonとかで保存すれば汎用性が上がっていいかもしれません。
しかし、haskellは書いてて楽しい

2013年7月5日金曜日

Solaris11のemacsをカラフルにする

Solaris11のemacsに色がほしい

 Windowsの使えない僕にはSolarisが与えられたのですが、肝心のemacsがこの状態


 白黒で味気ない、これではphpが書けないではないですか!なので色をつけてみた。

emacsに色をつけるのはこれだけ


.bach_profileへ1行追加するだけ
alias emacs='emacs --color -nw'
で起動するとぉ....ほぉーら


これならPHPが書けるような気がしてきた。

2013年7月4日木曜日

WTFormsで動的にフォームを作成する

WTFromsで動的にフォームを作成

色々試行錯誤して何とか動的にフォームを作成できたので、その時の備忘録てきなメモ。
説明とか面倒なのでコードを記載します

ソースコード

クロージャーで書いてるところがミソで、CreateForm()からどんどん追加していくだけ。
IichikoFormCreateクラスへパラメータを渡して、それを利用して色々ゴニョゴニョ設定にそってフォームを作成可能。
と言うことを伝えたいだけです。
# -*- coding: utf-8 -*-

from ReadSomeSetting import ReadSomeSetting
from wtforms import Form, BooleanField, TextField, validators, SelectField, TextAreaField


name_validates = [
    validators.Required(message=u"入力してください"),
    validators.Length(max=10, message=u"10文字以内で入力してください"),
]


class IichikoFormCreater(object):
    def __init__(self, param=None):
        super(IichikoFormCreater, self).__init__()
        self.param = param

    def CreateForm(self, form):
        ''' form class definition'''
        class IichikoForm(Form):
            pass

        def _createKicchomuField():
            setattr(IichikoForm, 'kicchomu',
                    BooleanField(u'吉四六', default=False))

        '''
            例えばDBから設定値を読み込み、それにそってFormを作成したりどうなの?
        '''
        rs = ReadSomeSetting()
        self.val = rs.GetSettings(self.param)

        IichikoForm.name = TextField(u'なまえ', name_validates)
        IichikoForm.kosa   = SelectField(u'アルコール濃度', None,
                                         choices=[(0, u'-----'),
                                                  (1, u'20度'),
                                                  (2, u'25度')], coerce=int, default=1)
        if self.val['iichiko_com'] is True:
            IichikoForm.comment = TextAreaField(u'いいちこコメント')

        _createKicchomuField()
        return IichikoForm(form)
ニセ、設定読み込みクラス
# -*- coding: utf-8 -*-


class ReadSomeSetting(object):
    def __init__(self):
        super(ReadSomeSetting, self).__init__()

    def GetSettings(self, param=None):
        # Do someting
        return dict(iichiko_com=True)

flaskで使ってみる


出来たと動くか?と言われたら動かしてみないとわからなのでflaskで動かしてみる、ファイル配置は以下のとおり。

└── iichiko
    ├── forms
    │   ├── IichikoFormCreater.py
    │   ├── ReadSomeSetting.py
    │   └── __init__.py
    ├── iichiko.py
    ├── iichiko.wsgi
    ├── static
    │   ├── script.js
    │   └── style.css
    └── templates
        ├── complete.html
        ├── index.html
        └── layout.html
# -*- coding: utf-8 -*-

from flask import Flask, render_template, request
from forms.IichikoFormCreater import IichikoFormCreater


app = Flask(__name__)

app.debug = True


@app.route("/", methods=['GET', 'POST'])
def index():
    ii = IichikoFormCreater()
    form = ii.CreateForm(request.form)
    if request.method == 'POST' and form.validate():
        return render_template("complete.html", title=u"たまんない")
    else:
        return render_template("index.html", title=u"いいちこフォーム", form=form)

if __name__ == '__main__':
    app.run()

こんな感じです

バリデーションも動いてます、ちょっと上手くいかなかったのがDjangoのCheckboxSelectMultiple的なものが無いかと調べてはみたもののいまいちでした。WTFormsだとCheckboxSelectMultipleとかでやるのか?ちょっと調べてみます。



2013年6月29日土曜日

direx.elが素晴らしい

direx.elをいれてみた 

emacsのdiredで不自由していなかったのですが、ちょっとeclipse的なファイラーのようなものが無いものかと探してみましたところなかなか素晴らしいdired.elを見つけてしまい静岡のみんなが欲しがる僕のGentooへいれてみました。

インストール

popwinパッケージを先にインストールしておく
karky7 ~ # emerge -pv app-emacs/popwin

 * IMPORTANT: config file '/etc/portage/package.keywords' needs updating.
 * See the CONFIGURATION FILES section of the emerge
 * man page to learn how to update config files.

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ~] app-emacs/popwin-0.5.1  0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

 * IMPORTANT: 1 news items need reading for repository 'hacking-gentoo'.
 * IMPORTANT: 13 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.
karky7 ~ #
karky7 ~ # emerge app-emacs/popwin

direx.elを設置

ここからdirex.elをダウンロードしパスの通っている場所へ設置する

init.elへ追加


;; direx-el
;; (use popwin-el devloper ver.)
;; https://github.com/m2ym/direx-el
(require 'popwin)
(setq display-buffer-function 'popwin:display-buffer)

(require 'direx)
(setq direx:leaf-icon "  "
      direx:open-icon "- "
      direx:closed-icon "+ ")
(push '(direx:direx-mode :position left :width 40 :dedicated t)
      popwin:special-display-config)
(global-set-key (kbd "C-x C-j") 'direx:jump-to-directory-other-window)

使い方

ほぼDiredと同じ使い方で非常に編集しやすくなりました、C-x C-jでファイラーが左へpopupします、こんな感じです

n,        C-n,<down>       direx:next-node              次のノードを選択する
p,        C-p,<up>         direx:previous-node          前のノードを選択する
C-M-n,    C-M-<down>       direx:next-sibling           次の兄弟ノードを選択する
C-M-p,    C-M-<up>         direx:previous-sibling       前の兄弟ノードを選択する
^, C-M-u, C-M-<left>       direx:up-node                親ノードを選択する
C-M-d,    C-M-<right>      direx:down-node              最初の子ノードを選択する
f                          direx:find-node              そのノードを現在のウィンドウに開く
o                          direx:find-node-other-window そのノードを別のウィンドウに開く
RET                        direx:maybe-find-node        そのノードをトグルする
q                          quit-window                  ウィンドウを閉じる

ターミナルを有効活用出きるようになりました、また、emacs環境が具合よくなったきがすします

参考URL

2013年4月29日月曜日

ffmepgコマンドでmp4の動画からm4a(音声)を抜き出してみた

ffmpegコマンドでmp4からm4a音声データだけを抜き出す


中学時代の同級生から電話があり、何かと思ったら

「区民大会で使うBGMが欲しいのだけどどうにかならない? CDとか作り方分からないし...」

それは困った...けど俺もやりたくないし、やり方が分からない。
地元の区民大会にも「必ず出るように!」と町内の先輩から念を押されているので、「そんなこと、嫌です」なんて言えないし。

「了解しました、やりましょう」ということ引き受けてしまい、さらに悪いことに、
Windows8でやろうと思ったのですが、操作方法が難しいのでGentooでやってみました

まず、youtubeで適当にmp4を拾ってくる


これはブラウザで拾ってきてね

次にffmpegパッケージをインストールする


USEフラグはaacを入れてください、自分はこんな感じです
karky7 ~ # equery u media-video/ffmpeg 
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for media-video/ffmpeg-0.10.7:
 U I
 - - 3dnow                : Adds support for 3dnow multimedia processor instructions
 - - 3dnowext             : Enable manually-optimised routines using the AMD 3DNow!Ex SIMD instruction set, present in modern AMD CPUs. (Check for 3dnowext in
                            /proc/cpuinfo to know whether your CPU supports it). 
 + + X                    : Adds support for X11
 + + aac                  : Enables support for MPEG-4 AAC Audio
 - - aacplus              : AAC+ encoding via media-libs/libaacplus.
 + + alsa                 : Adds support for media-libs/alsa-lib (Advanced Linux Sound Architecture)
 - - amr                  : Enables Adaptive Multi-Rate Audio support
 - - avx                  : Adds support for Advanced Vector Extensions instructions (Intel Sandy Bridge, AMD Bulldozer and later chips)
 - - bindist              : Enforces license compatibility constraints via REQUIRED_USE.
 + + bzip2                : Use the bzlib compression library
 - - cdio                 : Enables audio CD grabbing with dev-libs/libcdio.
 - - cpudetection         : Enables runtime CPU detection (useful for bindist, compatibility on other CPUs)
 - - debug                : Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see
                            http://www.gentoo.org/proj/en/qa/backtraces.xml
 - - dirac                : Enable Dirac video support (an advanced royalty-free video compression format) via the reference library: dirac.
 + + doc                  : Adds extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
 + + encode               : Adds support for encoding of audio or video files
 - - faac                 : Use external faac library for AAC encoding
 + - fftools_aviocat      : cat's an URL to another one, useful for dumping streams.
 + - fftools_cws2fws      : converts cws files (Macromedia Flash, compressed) to fws ones (Macromedia Flash, uncompressed).
 + - fftools_ffeval       : A simple expression evalutor.
 + - fftools_graph2dot    : A tool to convert a libavfilter graph to a dot file.
 + - fftools_ismindex     : A tool for creating smooth streaming manifests.
 + - fftools_pktdumper    : Dumps packets as demuxed by libavformat.
 + - fftools_qt-faststart : Rearranges a Quicktime file to facilitate network streaming.
 + - fftools_trasher      : Writes burts of random data into a file. Great for testing error robustness/resilience/concealment.
 - - frei0r               : Enable frei0r wrapping in libavfilter
 - - gnutls               : Adds support for net-libs/gnutls (TLS 1.0 and SSL 3.0 support)
 - - gsm                  : Adds support for the gsm lossy speech compression codec
 + - hardcoded-tables     : Use pre-calculated tables rather than calculating them on the fly.
 - - ieee1394             : Enable FireWire/iLink IEEE1394 support (dv, camera, ...)
 - - jack                 : Adds support for the JACK Audio Connection Kit
 - - jpeg2k               : Support for JPEG 2000, a wavelet-based image compression format
 - - libass               : SRT/SSA/ASS (SubRip / SubStation Alpha) subtitle support
 - - libv4l               : Uses media-libs/libv4l for video4linux instead of direct calls. Adds support for more devices via the userspace library.
 + + mmx                  : Adds support for optimizations for Pentium MMX and Athlon class processors
 - - mmxext               : Enables mmx2 support
 - - modplug              : Adds libmodplug support for playing SoundTracker-style music files
 + + mp3                  : Add support for reading mp3 files
 - - network              : Enables network streaming support
 - - openal               : Adds support for the Open Audio Library
 - - openssl              : Enables dev-libs/openssl support. Adds support for encrypted network protocols (TLS/HTTPS).
 - - oss                  : Adds support for OSS (Open Sound System)
 - - pic                  : Force shared libraries to be built as PIC (this is slower)
 + + pulseaudio           : Adds support for PulseAudio sound server
 - - rtmp                 : Enable Real Time Messaging Protocol using librtmp
 - - schroedinger         : Enable Dirac video support (an advanced royalty-free video compression format) via libschroedinger (high-speed implementation in C of the
                            Dirac codec).
 + + sdl                  : Adds support for Simple Direct Layer (media library)
 - - speex                : Adds support for the speex audio codec (used for speech)
 - - ssse3                : Faster floating point optimization for SSSE3 capable chips (Intel Core 2 and later chips)
 - - static-libs          : Build static libraries
 - - test                 : Workaround to pull in packages needed to run with FEATURES=test. Portage-2.1.2 handles this internally, so don't set it in
                            make.conf/package.use anymore
 - - theora               : Adds support for the Theora Video Compression Codec
 - - threads              : Adds threads support for various packages. Usually pthreads
 + + truetype             : Adds support for FreeType and/or FreeType2 fonts
 - - v4l                  : Enable support for video4linux (using linux-headers or userspace libv4l libraries)
 - - vaapi                : Enables VAAPI (Video Acceleration API) for hardware decoding
 - - vdpau                : Enable the Video Decode and Presentation API for Unix acceleration interface
 + + vorbis               : Adds support for the OggVorbis audio codec
 - - vpx                  : Enables vp8 codec support using libvpx: Decoding vp8 does not require this to be enabled but libvpx can also be used for decoding; encoding
                            vp8 requires this useflag to be enabled though.
 + + x264                 : Enable h264 encoding using x264
 + + xvid                 : Adds support for xvid.org's open-source mpeg-4 codec
 + + zlib                 : Adds support for zlib (de)compression
karky7 ~ # 

次にffmpegパッケージをインストールする


USEフラグを決めたらffmpegパッケージのインストール
karky7 ~ # emerge -pv media-video/ffmpeg 

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     U  ] media-video/ffmpeg-0.10.7 [0.10.3] USE="X aac alsa bzip2 doc encode hardcoded-tables mmx mp3 pulseaudio sdl truetype vorbis x264 xvid zlib -3dnow -3dnowext -aacplus (-altivec) -amr -avx -bindist -cdio (-celt) -cpudetection -debug -dirac -faac -frei0r -gnutls -gsm -ieee1394 -jack -jpeg2k -libass -libv4l -mmxext -modplug (-neon) -network -openal -openssl -oss -pic -rtmp -schroedinger -speex -ssse3 -static-libs {-test} -theora -threads -v4l -vaapi -vdpau (-vis) -vpx" FFTOOLS="aviocat cws2fws ffeval graph2dot ismindex pktdumper qt-faststart trasher" 5,647 kB

Total: 1 package (1 upgrade), Size of downloads: 5,647 kB

 * IMPORTANT: 1 news items need reading for repository 'hacking-gentoo'.
 * IMPORTANT: 13 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

karky7 ~ # emerge media-video/ffmpeg

ffmpegをコマンドから使ってみる

こんな感じで変換できる、とりあえずffmpeg --helpしても膨大なヘルプが出てくるので後で確認してください

オプションの説明
  • -i
    • inputファイル
  • -nv
    • 音声のみ抽出(disable video) 
  • -acodec copy
    •  force audio codec ('copy' to copy stream)

と言うような感じで、抜き出す

cuomo@karky7 ~/m4a $ ffmpeg -i ニンジャリバンバンキャリーパミュパミュ.mp4 -vn -acodec copy ニンジャリバンバンキャリーパミュパミュ.m4a
ffmpeg version 0.10.7 Copyright (c) 2000-2013 the FFmpeg developers
  built on Apr 29 2013 16:33:56 with gcc 4.5.4
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-mtune=native -O2 -pipe' --extra-cflags='-mtune=native -O2 -pipe' --extra-cxxflags='-mtune=native -O2 -pipe' --disable-static --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --disable-stripping --disable-debug --disable-network --disable-vaapi --disable-vdpau --enable-libmp3lame --enable-libvo-aacenc --enable-libvorbis --enable-libx264 --enable-libxvid --disable-indev=v4l --disable-indev=v4l2 --disable-indev=oss --disable-indev=jack --enable-x11grab --enable-libpulse --disable-outdev=oss --enable-libfreetype --disable-amd3dnow --disable-amd3dnowext --disable-altivec --disable-avx --disable-mmx2 --disable-ssse3 --disable-vis --disable-neon --cpu=host --enable-hardcoded-tables
  libavutil      51. 35.100 / 51. 35.100
  libavcodec     53. 61.100 / 53. 61.100
  libavformat    53. 32.100 / 53. 32.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 61.100 /  2. 61.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ニンジャリバンバンキャリーパミュパミュ.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-04-08 12:52:24
  Duration: 00:04:24.31, start: 0.000000, bitrate: 725 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360, 626 kb/s, 23.98 fps, 23.98 tbr, 48k tbn, 47.95 tbc
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 96 kb/s
    Metadata:
      creation_time   : 2013-04-08 12:52:25
      handler_name    : 
Output #0, ipod, to 'ニンジャリバンバンキャリーパミュパミュ.m4a':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-04-08 12:52:24
    encoder         : Lavf53.32.100
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, 96 kb/s
    Metadata:
      creation_time   : 2013-04-08 12:52:25
      handler_name    : 
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=    3143kB time=00:04:24.31 bitrate=  97.4kbits/s    
video:0kB audio:3098kB global headers:0kB muxing overhead 1.460185%
cuomo@karky7 ~/m4a $

一つ一つコマンドを打つのは面倒なのでhaskellで片付ける


頑張ってhaskellで変換スクリプトをシコシコ作ってみました
第1引数にmp4のファイルがあるディレクトリを指定すると全部をm4aファイルに変換する優れものです
import System.Directory
import System.Environment (getArgs)
import System.Posix
import Control.Monad (forM, filterM)
import System.Process
import Data.List.Split
import System.Exit

main :: IO()
main = do
  path <- getPath
  fs <- getDirectoryContents path
  fullpath <- filterM isFile $ map (\filepath -> path ++ filepath) fs
  _ <- forM fullpath (\file ->
                   do (exitCode, stdout, stderr) <- readProcessWithExitCode "ffmpeg" (createArg file) []
                      case exitCode of
                        ExitFailure _ -> putStrLn stderr >> exitFailure
                        _ -> putStrLn $ "Convert OK: " ++ file)
  putStrLn "Complete."

getPath :: IO String
getPath = do
  path <- getArgs
  return (head path)


createArg :: FilePath -> [String]
createArg fname = case splitOn "." fname of
  [file, _] -> ["-i" , fname, "-vn", "-acodec", "copy", file ++ ".m4a"]
  _ -> []

isFile :: FilePath -> IO Bool
isFile file = getFileStatus file >>= (\fs -> return $ not $ isDirectory fs)
実行結果すると、こんな感じです
cuomo@karky7 ~ $ runhaskell convert.hs ~/mp4/
Convert OK: /home/cuomo/mp4/そのまま東へ-ファンモン.mp4
Convert OK: /home/cuomo/mp4/晴伝説-湘南乃風.mp4
Convert OK: /home/cuomo/mp4/虹-福山雅治.mp4
Convert OK: /home/cuomo/mp4/キセキ-GReeeeN.mp4
Convert OK: /home/cuomo/mp4/ワイルトアットハート-嵐.mp4
Convert OK: /home/cuomo/mp4/夏色-ゆす.mp4
Convert OK: /home/cuomo/mp4/ヘヒーローテーション-AKB48.mp4
Convert OK: /home/cuomo/mp4/JAMBOREE!!-AAA.mp4
Convert OK: /home/cuomo/mp4/あの紙ヒコーキくもり空わって-19.mp4
Convert OK: /home/cuomo/mp4/女々しくて-ゴールデンボンバー.mp4
Convert OK: /home/cuomo/mp4/栄光の架け橋-ゆず.mp4
Convert OK: /home/cuomo/mp4/PartyItUp-AAA.mp4
Convert OK: /home/cuomo/mp4/パンダヒーロー-初音ミク.mp4
Convert OK: /home/cuomo/mp4/走れ-ももいろクローバー.mp4
Convert OK: /home/cuomo/mp4/つけまつける-きゃりーぱみゅぱみゅ.mp4
Convert OK: /home/cuomo/mp4/PONPONPON-きゃりーぱみゅぱみゅ.mp4
Convert OK: /home/cuomo/mp4/あなたに-MONGOL800.mp4
Convert OK: /home/cuomo/mp4/にんじゃりばんばん-きゃりーぱみゅぱみゅ.mp4
Convert OK: /home/cuomo/mp4/Sunny Day Sunday-センチメンタル・バス.mp4
Convert OK: /home/cuomo/mp4/JOINT-RIPSLYME.mp4
Convert OK: /home/cuomo/mp4/ウルトラソウル-Bz.mp4
Convert OK: /home/cuomo/mp4/楽園ベイベー-RipSlyme.mp4
Convert OK: /home/cuomo/mp4/夢叶う-MONGOL800.mp4
Convert OK: /home/cuomo/mp4/高架線-ELLEGARDEN.mp4
Convert OK: /home/cuomo/mp4/ロコローション-オレンジレンジ.mp4
Convert OK: /home/cuomo/mp4/世界はそれを愛と呼ぶんだぜ-サンボマスター.mp4
Convert OK: /home/cuomo/mp4/日曜日よりの使者.mp4
Convert OK: /home/cuomo/mp4/マトリョシカ-初音ミク.mp4
Convert OK: /home/cuomo/mp4/SPARK-三代目.mp4
Convert OK: /home/cuomo/mp4/Sabotage-Beastie Boys.mp4
Convert OK: /home/cuomo/mp4/以心電信-オレンジレンジ.mp4
Convert OK: /home/cuomo/mp4/マツケンサンバII.mp4
Convert OK: /home/cuomo/mp4/Monster-嵐.mp4
Convert OK: /home/cuomo/mp4/フライングゲット-AKB48.mp4
Convert OK: /home/cuomo/mp4/爆音男-湘南乃風.mp4
Complete.
cuomo@karky7 ~ $ 
こんな感じでm4aファイルができあがる、Shellスクリプトで書いた方が早いような気がしますが...笑 ^^;

抜いたm4aがMacで聞けるか試してみる


これをMacで聞いてみる、と


ニンジャリバンバン、松ケンとか、聞けてる、とりあえずこれでOK、区民大会はGentoo >>= Macな音楽転送で何とかなりそうです。

2013年4月23日火曜日

HACKING: 美しき策謀(第2版) がたまらなく面白い

正しいHACKINGを学びましょう

前から欲しかった本がタマタマ本屋さんにあったので、思わず買ってしまいました。ほぼバイナリー的なお話が多いです。そちらに興味がある方には必読の本でしょう。



昨今、セキュリティーや脆弱性をついた攻撃などが多いデスよね、最近も色々あったばかりで、やはり自社システムなどを正常、安定に保にはいろいろな攻撃方法、クラッキング方法などを知っていた方が為になるとは思います。

偉いことをいってるようですが、さほど知っている理由ではありません 笑...

単純なコードでもこんなことになってる! 

 

日頃、仕事上LWな言語で仕事をするので、Lowレベルなところを意識する事が少なくなったような感じがします。
バイナリーの世界ではこんなことになってるって事が多いのです(タマタマ発見したのですが...)


普通のCのコード、見れば分かりますが5回「I'm tired today」を表示する
#include <stdio.h>

int main(void)
{
  int i;
  for(i = 0; i < 5; i++) {
    printf("Ah, I'm tired today\n");                                                     
  }
  return 0;
}

これをコンパイルして実行
cuomo@karky7 ~/sample $ gcc print.c -o print
cuomo@karky7 ~/sample $ ./print 
Ah, I'm tired today
Ah, I'm tired today
Ah, I'm tired today
Ah, I'm tired today
Ah, I'm tired today
cuomo@karky7 ~/sample $

これをobjdumpで見てみると、こうなってます。 アセンブラのコードはx86系の64bitCPUならこうなると思います。

レジスタはrsp(64bitスタックポインタレジスタ)、rbp(64bitスタックベースポインタ)、eax(32bitアキュムレータレジスタ)など色々ありますが割愛させて下さい。

cuomo@karky7 ~/sample $ objdump -D print | grep -A14 '<main>'
0000000000400534 <main>:
  400534:       55                      push   %rbp
  400535:       48 89 e5                mov    %rsp,%rbp
  400538:       48 83 ec 10             sub    $0x10,%rsp
  40053c:       c7 45 fc 00 00 00 00    movl   $0x0,-0x4(%rbp)
  400543:       eb 0e                   jmp    400553 <main+0x1f>
  400545:       bf 4c 06 40 00          mov    $0x40064c,%edi
  40054a:       e8 e1 fe ff ff          callq  400430 <puts@plt>
  40054f:       83 45 fc 01             addl   $0x1,-0x4(%rbp)
  400553:       83 7d fc 04             cmpl   $0x4,-0x4(%rbp)
  400557:       7e ec                   jle    400545 <main+0x11>
  400559:       b8 00 00 00 00          mov    $0x0,%eax
  40055e:       c9                      leaveq 
  40055f:       c3                      retq 

ちなみに知らなかったのですがobjdumpがIntelシンタックスでも出力できる
cuomo@karky7 ~/sample $ objdump -M intel -D print | grep -A14 '<main>'
0000000000400534 <main>:
  400534:       55                      push   rbp
  400535:       48 89 e5                mov    rbp,rsp
  400538:       48 83 ec 10             sub    rsp,0x10
  40053c:       c7 45 fc 00 00 00 00    mov    DWORD PTR [rbp-0x4],0x0 ーー> i=0
  400543:       eb 0e                   jmp    400553 <main+0x1f> ーー> 400553のアドレスへジャンプ
  400545:       bf 4c 06 40 00          mov    edi,0x40064c ーー> I'm tired todaiのIの保存されているアドレスをediへ入れる
  40054a:       e8 e1 fe ff ff          call   400430 <puts@plt> ーー> printfのcall(コンパイラがputsに修正)
  40054f:       83 45 fc 01             add    DWORD PTR [rbp-0x4],0x1 ーー> i++
  400553:       83 7d fc 04             cmp    DWORD PTR [rbp-0x4],0x4 ーー> i < 5
  400557:       7e ec                   jle    400545 <main+0x11>
  400559:       b8 00 00 00 00          mov    eax,0x0 ーー> return 0(関数の戻り値はeaxレジスタに入れて返す)
  40055e:       c9                      leave  
  40055f:       c3                      ret  
MS-DOSとかでアセンブラを書いていた自分にとってはこちらの方が読みやすいのデスが、今となってはもうどちらでもいいです。コード中に説明を書いてしまいましたが、こんな感じでプログラムが動くって分かります。printfでコード中に書いているのデスが、可変長引数が無いので、gccがputsへ最適化してくれたりと色々「ふーん」っていうことがたくさんあります。 さらにgccのオプションをちょっと変えると....
cuomo@karky7 ~/sample $ gcc -O3 print.c -o print
cuomo@karky7 ~/sample $ objdump -M intel -D print | grep -A14 '<main>'
0000000000400540 <main>:
  400540:       48 83 ec 08             sub    rsp,0x8
  400544:       bf 6c 06 40 00          mov    edi,0x40066c
  400549:       e8 e2 fe ff ff          call   400430 <puts@plt>
  40054e:       bf 6c 06 40 00          mov    edi,0x40066c
  400553:       e8 d8 fe ff ff          call   400430 <puts@plt>
  400558:       bf 6c 06 40 00          mov    edi,0x40066c
  40055d:       e8 ce fe ff ff          call   400430 <puts@plt>
  400562:       bf 6c 06 40 00          mov    edi,0x40066c
  400567:       e8 c4 fe ff ff          call   400430 <puts@plt>
  40056c:       bf 6c 06 40 00          mov    edi,0x40066c
  400571:       e8 ba fe ff ff          call   400430 <puts@plt>
  400576:       31 c0                   xor    eax,eax ーー> return 0
  400578:       48 83 c4 08             add    rsp,0x8
  40057c:       c3                      ret

初め見たときは、これなんだ?って思いますがよく見てみると、forが単純にそのまま5回分展開されてprintf(puts)がcallされてるアセンブラコードの展開されているのですね。xor eax,eaxなんてmov eax,0ってやるよりオペコードのバイト数が少なく済むようにちゃんと変わってるところが凄い。オペコードが少なければCPUクロック数が少なく済むからね、 

エコじゃないか!!!!!!

まぁそんなことはどうでもいいのですが、こんな感じで色々バイナリ感を楽しむ事ができます、タイトルと内容がかなりかけ離れてしまいましたが、とにかくバイナリは楽しいです。
みなさんも是非.....



2013年4月21日日曜日

gentooのpython-pptxで美人の水着画像をpptx化する

python-pptxで美人の水着画像をpptx化する


Shizuoka.pyでちょっと人気だったpythonのパッケージpython-pptxのebuildを作りました。良かったら使って下さい。
まずpython-pptxパッケージをインストールする

karky7 ~ # layman -a karky7
...
...
...
karky7 ~ # emerge -pv dev-python/python-pptx

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] dev-python/beautifulsoup-4.1.3-r1:4  USE="doc {-test}" PYTHON_TARGETS="python2_7 python3_2 -python2_6 -python3_1 (-python3_3)" 129 kB
[ebuild  N     ] dev-python/lxml-3.0.1  USE="doc threads -examples" PYTHON_TARGETS="python2_7 python3_2 -python2_6 -python3_1 (-python3_3)" 3,131 kB
[ebuild  N     ] dev-python/python-pptx-0.2.2::karky7  PYTHON_TARGETS="python2_7 -python2_6" 0 kB

Total: 3 packages (3 new), Size of downloads: 3,259 kB

 * IMPORTANT: 1 news items need reading for repository 'hacking-gentoo'.
 * IMPORTANT: 12 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

karky7 ~ # emerge dev-python/python-pptx


画像収集pythonスクリプトを実行する


適当なディレクトリを掘って、その中でスクリプトを実行する。
これで、かわいい水着のおねぇさんの画像がpptxで出来上がる

cuomo@karky7 ~ $ mkdir mizugi
cuomo@karky7 ~ $ cd mizugi/
cuomo@karky7 ~/mizugi $ python mizugi-pptx.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

from pptx import Presentation
from pptx.util import Inches, Px
import requests
import re

prs = Presentation()
bullet_slidelayout = prs.slidelayouts[0]
c = requests.get('http://matome.naver.jp/odai/2135350364969742801').content
urls = [x.group(1) for x in re.finditer(r'', c)]
for i, url in enumerate(urls[:10], 1):
    img_path = "{}.jpg".format(i)
    r = requests.get(url)
    if r.status_code == 200:
        img = r.content
        with open(img_path, 'w') as f:
            f.write(img)
        shapes = prs.slides.add_slide(bullet_slidelayout).shapes
        shapes.placeholders[0].text = '水着アイドル({})'.format(i)
        top = Inches(1.5)
        led = Inches(3)
        width = Px(280)
        height = int(width * 1.427)
        pic = shapes.add_picture(img_path, led, top, width, height)

prs.save('tamannai.pptx')



これはたまんない、Pythonの無限の可能性を感じる、今日この頃です....


2013年4月16日火曜日

静岡Python会、Shizuoka.py行ってきました

Shizuoka.py面白かった

4月13日(土)に静岡市で行われたPythonの勉強会へ出席させて頂きました。やはりPythonの人気は凄いですね。
静岡中部にはPython遣いが多くいるととある日本酒党のコワモテHaskellerに聞いていたのでちょっとビビってました...


Shizuoka.pyやったこと

  • 他言語ユーザーが素早くpythonを学ぶために(@kzfm)
  • Try not. Do or do not.〜GAE4Pと開発環境のお話〜(@secondarykey)
  • お手軽構成管理ツールfabricの紹介(@ando_ando_ando)
  • azureでdjango(@ishisaka)
  • igo-pythonでTwitterに共有された音楽情報の簡単な形態素解析(@oec014)
  • subprocessのススメ(@ksmakoto)
  • Python でmunin plugin を書いてみる(@ftnk)
  • pythonでpptx(@kzfm)
色々、情報が収集できたきがします、Python系の新しい書籍や、GAE for python、から形態素解析、Pythonのプロセス、IPC系functionの説明、サーバー管理者のPythonの使いどころ、Pythonで収集した水着系アイドル写真のpptx化(ebuild作成中です)など、皆さんのPythonの使い方が半端ない事がわかりました。 笑

最近、HaskellにハマってPythonが手薄になっているのでまたPythonを書こうかと思っています。

ちなみに、静岡にくる他県の方は、この様な縮図になっているので注意してください

ネタ元・・・@kzfm

また参加したいと思いますのでよろしくお願いします

2013年3月25日月曜日

gentooのJuicyPixelsのebuildを作りました

JuicyPixelsで画像をオイタしてみた

JuicyPixelsとは、png、jpg、gif、などの画像を色々いたずらできるhaskellのパッケージで、お勉強をかねて画像をいたずらしてみました、でついでにgentooのebuildも作って見ましたので良かったら使って下さい

JuicyPixelsのインストール

laymanリポジトリにebuildを作っておいたのでそちらをもってきて、maskを外してください。

iichiko ~ # layman -a karky7
...
...
iichiko ~ # emerge -s juicypixels
Searching...    
[ Results for search key : juicypixels ]
[ Applications found : 1 ]

*  dev-haskell/juicypixels [ Masked ]
      Latest version available: 3.0
      Latest version installed: [ Not Installed ]
      Size of files: 58 kB
      Homepage:      https://github.com/Twinside/Juicy.Pixels
      Description:   This library can load and store images in PNG,Bitmap, Jpeg, Radiance and read Gif images.
      License:       BSD3
...
iichiko ~ # emerge -pv juicypixels
 * Last emerge --sync was 33d 4h 29m 37s ago.

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     U ~] dev-haskell/primitive-0.5.0.1:0/0.5.0.1::gentoo-haskell [0.4.1:0/0::gentoo-haskell] USE="doc hoogle -hscolour -profile" 11 kB
[ebuild     U ~] dev-haskell/vector-0.10.0.1:0/0.10.0.1::gentoo-haskell [0.9.1:0/0::gentoo-haskell] USE="doc hoogle -hscolour -profile" 101 kB
[ebuild  N    ~] dev-haskell/juicypixels-3.0:0/3.0::karky7  USE="doc -hscolour -profile" 59 kB

Total: 3 packages (2 upgrades, 1 new), Size of downloads: 170 kB

 * IMPORTANT: 10 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

iichiko ~ # emerge dev-haskell/juicypixels
binaryパッケージが最新過ぎるとバージョンの依存関係でエラーになるので、その時はbinary-0.6.*あたりをインストールしてみて下さい。

AKIRAの金田をpngからjpgにしてみる


png画像をjpg画像へそのまま変換してファイルに保存するサンプルコード、初めに適当なpngファイルを用意して下さい。

「大覚 アキラ様」の金田.pngをjpgに変換する



import Codec.Picture

img :: IO (Either String DynamicImage)
img = readImage "akira.png"

main :: IO()
main = do
  img >>= (\(Right dynamicImage) -> return dynamicImage) >>=
    (\dynamicImage -> saveJpgImage 100 "akira.jpg" dynamicImage)

同一ディレクトリにjpgが保存される、まぁ同じ画像でおもろくないが...でもhaskellたのしい、では

2013年3月18日月曜日

gentooでudevのUpdateにはご注意下さい...

最近のアップデートでudevが上がったらしく、ちょっとbootできなくなったのでその辺の修理方法をちょっと載せておきます。

ちなみにudevのバージョンはsys-fs/udev-197-r8です

udevとは?


udevとはいろいろなデバイスを接続したタイミングで、自動で使えるようにしてくれる便利な機能。 これが無いといちいちmkmodとかデバイスのメジャー番号とか指定してやらなくてはならないしとにかく面倒、で、これを酔うてるうちにUpdateしてしまい、窮地に追い込まれた始末。

まずい状態のx220


こんな感じでbootができない



修理方法


カーネルの設定が合わないらしく、udevの機能を利用してカーネルがデバイスをマウントできないらしいので再設定しなおす。 ここでOSを起動する環境が無い方は、Gentooのbootディスクを使ったり、KNOPPIXでbootしたりすればOK、自分はGentooのbootディスクでCDからbootしました
bootしましたら、HDDの環境へchrootします、実際のデバイスは自分の環境ですので読み替えてお願いします
karky7 ~ # mount /dev/sda5 /mnt/gentoo
karky7 ~ # mount -t proc none /mnt/gentoo/proc
karky7 ~ # mount -o bind /dev /mnt/gentoo/dev
karky7 ~ # chroot /mnt/gentoo /bin/bash

以下、chroot環境です
 ~ # env-update
 ~ # source /etc/profile

カーネルの再設定


今までの設定が不完全だったらしく、udevまわりの設定を再度見直し、以下のカーネル設定を修正
General setup  --->
  [ ] Enable deprecated sysfs features to support old userspace tools
  [*] Enable signalfd() system call
-*- Networking support  ---> 
  Networking options  --->
    <*> Unix domain sockets

Device Drivers  --->
  Generic Driver Options  --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs
  < > ATA/ATAPI/MFM/RLL support (DEPRECATED)  --->

File systems  --->
  [*] Inotify support for userspace
  [*] /proc file system support 
  -*- sysfs file system support
設定が完了したらカーネルを再ビルドしてください
# make && make modules && make modules_install && make install
# reboot
これで起動することができました、皆さんシステムをupdateするときは、飲酒は止めましょう...笑

2013年2月25日月曜日

gentooで emacs + cscope を使ってタグジャンプでコードを飛びまくる

やっぱりエディタで気になるのがタグジャンプですよね、これが無いとちょっとソースコードがディレクトリまみれになった途端、どうにも立ち回りができなくなって不自由を強いられます。 で、gentooもEclipseとかGUIなエディタもあるのですが、やっぱりemacsが好きということで...それでやってみる まず、cscopeをいれる、USEフラグを設定してemacsのxcscope.elも一緒に入るようにする

USEフラグを設定

karky7 ~ # flaggie dev-util/cscope +emacs

cscopeをemergeする

karky7 ~ # emerge -pv dev-util/cscope
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] dev-util/cscope-15.8a  USE="emacs" 588 kB

karky7 ~ # emerge dev-util/cscope

cscopeコマンドでタグを作成する


例えばZendFrameworkのソースコードを閲覧するためにcscopeタグを作成する、面倒くさいのでインストール済みのコードを拝借しちゃう
cuomo@karky7 ~ $ cd workspace/
cuomo@karky7 ~/workspace $ cp -rf /usr/share/php/Zend ~/workspace/Zend
この辺は、適当にもってきて配置してください

タグファイルを配置するディレクトリを作成


cscopeが吐くタグを保存するディレクトリを作成しそこへ、タグファイルを作成する。 タグを作成する、スクリプトは適当に作成してそれを実行する
cuomo@karky7 ~/workspace $ mkdir -p ~/workspace/db/Zend

スクリプトの実行


簡単なシェルスクリプトのなので、適当に作成してchmod 0755 辺りに設定してください
cuomo@karky7 ~/workspace $ mkdir -p ~/workspace/db/Zend
cuomo@karky7 ~/workspace $ ./zend_cscope_tag_create.sh
Find ...
Change dir ... [ /home/cuomo/workspace/db/Zend ]
Create cscope index ... run [ /usr/bin/cscope -bqk ]
cuomo@karky7 ~/workspace $
これで、~/workspace/db/Zend/に4つのファイルができているはず
実行スクリプトはこちら、とりあえずphpとphtmlに絞ってある
ZEND_SRC_PATH=~/workspace/Zend
CSCOPE_DB=~/workspace/db/Zend

find -L ${ZEND_SRC_PATH} -name "*.php" -print > ${CSCOPE_DB}/cscope.files
find -L ${ZEND_SRC_PATH} -name "*.phtml" -print >> ${CSCOPE_DB}/cscope.files
echo "Find ..."
echo "Change dir ... [ ${CSCOPE_DB} ]"
cd  ${CSCOPE_DB}
echo "Create cscope index ... run [ /usr/bin/cscope -bqk ]"
/usr/bin/cscope -bqk

.emacsに追加する


init.elでも.emacsでもいいので、タグのファイルを読み込むように設定しておく(自分はload-fileで読み込ませていますが)
(require 'xcscope)
(setq cscope-do-not-update-database t)
(setq cscope-database-regexps
   '(
      ("^/home/cuomo/workspace/"
      ("/home/cuomo/workspace/db/Zend" ("-q"))
    )
))
(set-face-foreground 'cscope-file-face "MediumSeaGreen")
(set-face-foreground 'cscope-function-face "yellow")
(set-face-foreground 'cscope-line-number-face "red")
(set-face-foreground 'cscope-line-face "yellow")
(set-face-foreground 'cscope-mouse-face "blue")
これで、設定は完了、emacsを起動して.emacsを読み込ませる(M-x load-file)



例えば「Zend_Config_Ini」を探してみる、Zend_Config_iniへカーソルをのせ、emacsで以下のコマンド 「C-c s d」とやると...


検索結果が右のペインへ表示される


そして検索結果に、カーソルを合わせて「スペース」キーを押すとそのファイルに飛んでいける、複数ある場合もそれだけでいける、これだけでも結構使える

 他には、「C-c s c」で、カーソルに合わせた関数をコールしている箇所を全部拾ってくる、もちろん「スペースキー」で飛んでいける






これは便利でしょう、もう止められません。

cscopeその他のコマンド


まだたくさんのキーバインドがあるのですがこれだけとりあえず覚えてしまえば結構っていうかほぼ問題ない
  • C-c s s ・・・ (カーソルが置かれた)シンボルを検索
  • C-c s d ・・・ (カーソルが置かれた)シンボルの定義を検索
  • C-c s c ・・・  (カーソルが置かれた)関数を呼んでいる関数群を検索
  • C-c s C ・・・ (カーソルが置かれた)関数から呼び出している関数群を検索
  • C-c s t ・・・ テキスト文字列を検索
  • C-c s e ・・・ egrepパターンで検索
  • C-c s f ・・・ ファイル検索
  • C-c s i ・・・ #include してるファイルを検索
  • C-c s u ・・・ マークをポップ(スペースキーを押した履歴を遡って戻ってくれる)
と言うわけで、これで、Eclipseいらずですね、笑...まして、会社の開発用のPCは...この辺で止めておきましょう

2013年2月24日日曜日

2日酔いからPersistentでキーを使って直接データを引く

Persistentでキーを使って直接データを引く


三島Haskell無名関数の会の第2回


三島Haskell無名関数の会の第2回めとのことで酒のみ仲間とお勉強をしてきました。
今回は、Haskellの

  • Persistを使ったデータベースへのアクセス方法
  • virthualenvを快適に使うためのvirthualenvwrapperの話
  • Hakyllを使ったWebサイトの構築

ほぼ、@kzfmさんが資料を用意していただき、自分が気になっているところをピンポイントでやっていただきました、ありがとうございました。 そこで、復習ということで、ちょっと以前からうまくできなかった主キーを利用したデータへのアクセスを再度やってみました。

サンプルコード

{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings, GADTs, FlexibleContexts #-}
import Database.Persist
import Database.Persist.MySQL
import Database.Persist.TH
import Database.Persist.Store
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Resource (runResourceT, ResourceT)

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase|
Person
    name String
    age Int Maybe
    deriving (Show)
BlogPost
    title String
    authorId PersonId
    deriving (Show)
|]

main :: IO ()
main = do
  selectUserData
  putStrLn "OK fetching data"

selectUserData :: IO ()
selectUserData = runResourceT $ getConn $ runSqlConn $ do
  runMigration migrateAll
  --person <- selectList [PersonName ==. "Take Ishii"] []                                                                                                                                  
  person <- getJust (Key (PersistInt64 1))
  liftIO $ putStrLn $ personName person
  blog <- getJust (Key (PersistInt64 2))
  liftIO $ putStrLn $ blogPostTitle blog

getConn :: (Connection -> ResourceT IO a) -> ResourceT IO a
getConn = withMySQLConn getConnection

getConnection :: ConnectInfo
getConnection = ConnectInfo {
    connectHost = "localhost",
    connectPort = 3306,
    connectUser = "root",
    connectPassword = "",
    connectDatabase = "SAMPLEDB",
    connectOptions = [],
    connectPath = "",
    connectSSL = Nothing
}

ちょっと気になる場所


ここでちょっと気になる箇所が以下のコード、getJustしているKeyがどのテーブルなのかこの行の後ろを確認しないと一見分からないところ... この辺は、do記法てきなプリプロセスされたコードを見ないと分からないような、あの「文脈」とかいうものなのでしょうか?
blog <- getJust (Key (PersistInt64 2))
liftIO $ putStrLn $ blogPostTitle blog
とりあえず、できたということで納得です、三島Haskell無名関数の皆さんありがとうございました、virthualenvとHakllyは近いうちにまとめたいと思います...

もうちょい書かないとダメですねぇ...Orz

2013年2月7日木曜日

WebデザイナーこそGentooを使うべき4つの理由

なぜGentooなのか!?


最近、弊社のデザイン部隊がCSS NiteというWeb系のデザイン関連の勉強会に行ったらしく、スタイルシートが題材の土産話に、こんなことを言っていた。

「これからのWebデザインは、Macで行うのが主流になるんじゃないのぉー、ターミナルとかでコマンドうってさ、コンパイルしちゃったりやったりするんだよぉー」

何て話を、そのチームのリーダーが豪語していました、でもちょっと待って、ターミナルなんてGentooにはディフォルトで備わっているし、コマンドなんていくらでも、どうにでもなるし、そこで一言、私はあえて、その上司に苦言を申し出た

「いや、誤解ですよ××リーダー、Webデザイン、スタイルシート系編集はGentooでやるんです」

スタイルシートコンパイラを導入する

CSSコンパイラがGentooでどこまでイケてるのか知ってもらうためにやってみる

1. LESSのインストール


LESSとは変数、ミックスイン、演算、関数のような動的な処理をCSSに追加拡張できる便利なもの、インストール方法はまずnodejsのマスクを外して、インストールする

karky7 ~ # cat /etc/portage/package.keywords | grep nodejs
net-libs/nodejs ~amd64
karky7 ~ # emerge net-libs/nodejs
karky7 ~ # npm install -g less
npm http GET https://registry.npmjs.org/less
npm http 200 https://registry.npmjs.org/less
npm http GET https://registry.npmjs.org/less/-/less-1.3.3.tgz
npm http 200 https://registry.npmjs.org/less/-/less-1.3.3.tgz
npm http GET https://registry.npmjs.org/ycssmin
npm http 200 https://registry.npmjs.org/ycssmin
npm http GET https://registry.npmjs.org/ycssmin/-/ycssmin-1.0.1.tgz
npm http 200 https://registry.npmjs.org/ycssmin/-/ycssmin-1.0.1.tgz
/usr/bin/lessc -> /usr/lib/node_modules/less/bin/lessc
less@1.3.3 /usr/lib/node_modules/less
└── ycssmin@1.0.1
karky7 ~ # which lessc
/usr/bin/lessc

利用方法


Mixinsなどはこの様にできる、まずlessファイルを作成する
cuomo@karky7 ~ $ cat sample.less 
.rounded-corners (@radius: 5px) {
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
  -ms-border-radius: @radius;
  -o-border-radius: @radius;
  border-radius: @radius;
}

#header {
  .rounded-corners;
}
#footer {
  .rounded-corners(10px);
}
保存した後に、lesscコマンドでコンパイルすると、CSSが吐き出される
cuomo@karky7 ~ $ lessc sample.less 
#header {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
}
#footer {
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  -ms-border-radius: 10px;
  -o-border-radius: 10px;
  border-radius: 10px;
}
cuomo@karky7 ~ $

LESSの詳しい使い方はこちらで

2. sass、scss


CSSを拡張したメタ言語sassとその別文法なscssっていうのがあってこれもCSSを作成する言語らしい

sass、scssが出来ること
  • 変数
  • セレクタのネスト
  • ミックスイン
  • セレクタの継承
とかが出来るらしい、まだ突っ込んで使ったことがないので詳細はそれ系の方の優れた資料にお願いするとしして、とりあえずインストールしてみる。

rubyが必要なのと必要なマスクを外す
karky7 ~ # cat /etc/portage/package.keywords 
dev-ruby/sass ~amd64
virtual/ruby-ffi ~amd64
dev-ruby/listen ~amd64
dev-ruby/rb-inotify ~amd64
rubyのUSEフラグにthreadsを加える
karky7 ~ # cat /etc/portage/package.use
dev-lang/ruby:1.8 threads

karky7 ~ # emerge -pv sass

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] virtual/ruby-threads-1:ruby19  RUBY_TARGETS="(ruby19)" 0 kB
[ebuild  N     ] virtual/ruby-threads-0:ruby18  RUBY_TARGETS="(ruby18)" 0 kB
[ebuild  N     ] dev-ruby/syntax-1.0.0-r3  USE="{-test}" RUBY_TARGETS="ruby18 ruby19 -jruby (-ree18)" 15 kB
[ebuild  N     ] dev-ruby/rake-compiler-0.8.1  USE="{-test}" RUBY_TARGETS="ruby18 ruby19 -jruby (-ree18)" 28 kB
[ebuild  N     ] dev-ruby/maruku-0.6.0-r2  USE="doc {-test}" RUBY_TARGETS="ruby18 ruby19 -jruby (-ree18)" 148 kB
[ebuild  N     ] dev-ruby/ffi-1.1.5  USE="doc {-test}" RUBY_TARGETS="ruby18 ruby19 (-ree18)" 874 kB
[ebuild  N     ] dev-ruby/yard-0.8.3  USE="doc {-test}" RUBY_TARGETS="ruby18 ruby19 -jruby (-ree18)" 1,056 kB
[ebuild  N    ~] virtual/ruby-ffi-1  RUBY_TARGETS="ruby18 ruby19 -jruby (-ree18)" 0 kB
[ebuild  N    ~] dev-ruby/rb-inotify-0.9.0  USE="doc {-test}" RUBY_TARGETS="ruby18 ruby19 -jruby (-ree18)" 13 kB
[ebuild  N    ~] dev-ruby/listen-0.7.2-r1  USE="{-test}" RUBY_TARGETS="ruby18 ruby19 -jruby (-ree18)" 34 kB
[ebuild  N    ~] dev-ruby/sass-3.2.5  USE="doc {-test}" RUBY_TARGETS="ruby18 ruby19 -jruby (-ree18)" 247 kB
...

karky7 ~ # emerge dev-ruby/sass

これで、sass、scssコマンドが使えるようになる、使い方はこちらを参照してください

3. compass


これはCSSを書くためのフレームワークららしくgemでインストールする

karky7 ~ # emerge dev-ruby/rubygems

そしたら、こんな感じで

cuomo@karky7 ~ $ gem install compass
Fetching: chunky_png-1.2.7.gem (100%)
Fetching: fssm-0.2.10.gem (100%)
Fetching: compass-0.12.2.gem (100%)
Successfully installed chunky_png-1.2.7
Successfully installed fssm-0.2.10
Successfully installed compass-0.12.2
3 gems installed
Installing ri documentation for chunky_png-1.2.7...
Building YARD (yri) index for chunky_png-1.2.7...
Installing ri documentation for fssm-0.2.10...
Building YARD (yri) index for fssm-0.2.10...
Installing ri documentation for compass-0.12.2...
Building YARD (yri) index for compass-0.12.2...
Installing RDoc documentation for chunky_png-1.2.7...
Installing RDoc documentation for fssm-0.2.10...
Installing RDoc documentation for compass-0.12.2...
cuomo@karky7 ~ $ 

~/.gem/ruby/1.8/binにcompassコマンドが入るので適当にPATHを通してください。

それからプロジェクトらしき物を作ります

cuomo@karky7 ~ $ mkdir compass_scss
cuomo@karky7 ~ $ cd compass_scss/
cuomo@karky7 ~/compass_sample $ compass create
directory sass/ 
directory stylesheets/ 
   create config.rb 
   create sass/screen.scss 
   create sass/print.scss 
   create sass/ie.scss 
   create stylesheets/screen.css 
   create stylesheets/ie.css 
   create stylesheets/print.css
...
...
sassのシンタックスを使う場合は
cuomo@karky7 ~/compass_sass $ compass create --syntax sass
directory sass/ 
directory stylesheets/ 
   create config.rb 
   create sass/screen.sass 
   create sass/print.sass 
   create sass/ie.sass 
   create stylesheets/screen.css 
   create stylesheets/ie.css 
   create stylesheets/print.css 
...
...

compassのコマンド


compassはこんな感じで使うらしい
cuomo@karky7 ~/compass_scss $ compass compile sass/screen.scss 
   create stylesheets/screen.css 

ファイルを監視できて、保存した後に自動でcompileが実行される
cuomo@karky7 ~/compass_scss $ compass watch sass/screen.scss 
>>> Compass is watching for changes. Press Ctrl-C to Stop.
>>> Change detected at 23:52:09 to: screen.scss
overwrite stylesheets/screen.css

ディレクトリ下で、watchするとファイル全部を監視してくれる
cuomo@karky7 ~/compass_scss $ compass watch
>>> Compass is watching for changes. Press Ctrl-C to Stop.
>>> Change detected at 23:53:49 to: screen.scss
identical stylesheets/screen.css 
>>> Change detected at 23:53:58 to: print.scss
identical stylesheets/print.css

詳しくはこちらで確認してください、申し訳ない

4. 最後に、CodeKit


そして最後にCodeKit、これは、....すみません使ったことありませんしGentooにはインストールできないでしょう、こういう綺麗なエディタらしいです、色々出来そうですが、このあたりはMacの先生に聞いてください。


これは、やはりemacsで代用する、

karky7 ~ # emerge app-emacs/css-mode

これだけでイケる、問題ない、こんなに綺麗


やっぱGUIがいいって人には、geditとかbluefishなんかどうでしょう?
karky7 ~ # USE="cjk" emerge bluefish

いろいろなファイルを編集できたような気がします、こんな感じです

bluefish

 いろいろなファイルタイプを編集できます、左のペインにはファイラー的なものもあったりしていいんじゃどうでしょう? 詳しくはこちらで確認してください

 やはりWebデザインはGentooという結果が...


知ったかぶって色々書いてみましたが、CSSはよく分かってません、笑...
「インストールはいいから使い方を書けって!」って言われそうですが使い方は分かりません、笑...

確かに最近のMac人気は凄いなって感じます、三島あたりでは、PC開けてる人はほぼMacですからね、なのであえて断言しましょう、WebのデザインはGentooで.....キリッ

ちなみに、Gentooを使ってる人を三島近辺でで見たことありません......Orz....


2013年2月3日日曜日

2013年 プログラマーの皆さん河津桜の季節です

河津に2年ぶりに潜入してきました

ちょっと理由あって河津にいってきました、2月ということで河津の皆さんは河津桜の花見にくる皆さんのために支度をしていました。

2月5日からイベントは始まるとのことですが、2月中頃が一番見頃になるでしょうとの地元の方が言っておられました。


2月3日時点ではこんな感じです、まだほとんどがつぼみの状態でした。


1つだけ咲いている河津桜を発見


何気に1つだけ咲いている桜を発見、皆さん結構気づくらしく写真をとっていました。



河津川も綺麗です、ここにそって桜が満開に咲くことでしょう。



昼食はカツ丼、天丼です、「こまきや」さんで頂きました、美味しかったです。

場所はこちらです、河津に来たときはよってみて下さい。


大きな地図で見る 


プログラマーの皆さん、たまには息抜きに桜でもどうでしょう?
伊東に泊まって、ゆっくり 伊豆急線にのって太平洋を眺めつつ、酒でも呑みながら、河津桜なんか見に行ってみるのもいいかもしれません、俺も今年は桜を見にいってみるかな...では

2013年1月24日木曜日

Linuxでカーネルオプションを探す方法

そのカーネルオプションってどこ? 「そういえばと」思い立ったので、探し方をメモしておきます。 カーネルのオプションがどこで設定するか分からず、探しまくった経験がありますよね?ない?、で例えば「CONFIG_PROC_EVENTS」カーネルオプションがどこで設定できるか分からない時に簡単に探せる方法です。
まず、make menuconfigを実行します
karky7 ~ # cd /usr/src/linux
karky7 linux # make menuconfig
それから「/」キーを押すと検索入力画面になります、そこへ検索オプションを入力しエンターキーで探します。

するとこの様な画面でどこにカーネルオプションがあるか教えてくれます。


Symbol: PROC_EVENTS [=n]
Type  : boolean
Prompt: Report process events to userspace
  Defined at drivers/connector/Kconfig:14
  Depends on: CONNECTOR [=n]=y
    -> Device Drivers
      -> Connector - unified userspace <-> kernelspace linker (CONNECTOR [=n])

こんな感じで、「Device Drive」下の「Connector」だよって教えてくれます。
闇雲に探すのは止めましょう、迷子になるだけです

2013年1月20日日曜日

2013年 伊東オレンジビーチマラソン走りました

老体に鞭打ってマラソンです

今日は理由あって子供と一緒に伊東オレンジビーチマラソンに出場しました。


朝の伊東港です、凄く気持ちのいい朝でした。

自分は子供と同じ、5Kmにエントリし何とか完走することが出来ました。結構厳しかったです。


ビックリしましたが、画像中央にあの有名な赤い彗星の「シャー」がいるではないですか!、ちなみに、ばい菌マンのおじさんもいました。


とにかく疲れました。

走り終わった後の抽選会

伊東オレンジビーチマラソンは走るだけではありません!なんとマラソン終了後に景品の抽選会が行われます。これも案外楽しいです!



そして我が家のエース、もちろん私の息子ですが景品をゲットしました! なんと


ふじいちさんの干物です! 久しぶりに子供を褒めてやろうと思います、ちなみに自分は何もありません。

その他の賞品は、県外の方には「ペア宿泊券」、市内の方には、「お米券」など何気に目白押しです、ぜひみなさん来年は遊びがてらに走りに来てください。

もしやとんかつ「とん喜」あたりでヤッテルお父さんたちもいるとは思いますが、痛風、糖尿っけ、太りすぎなどの、元気なお父さん方、警備が終わって一杯もいいのですが、来年は一緒に走っておいしいお酒を呑みましょう!

では来年、また伊東オレンジビーチマラソンで会いましょう、皆さんお疲れさまでした。