2013年5月23日木曜日

githubクローン環境を試す

ちょっと開発体制を見直そうぜって事で流行りものを一通り試そうという事に。

まずはソース管理関連。githubみんな使ってるぜみたいな感じだけど何出来るのかサッパリわからんので触ってみたかったのですよ。

で本家は仕事に使うにはコストがかかるのと(実際は自前だと社員が動く分の管理コストかかるんだけどな)その他諸々の問題(単に組み込み関連の世界って古い考え方が残っているので人様のサーバに成果物を置くのはNG的な風潮がある。個人的にはクソクラエなんだけど世間体もあるので。)でクローンを試してみる事に。

どうでも良いけどgitにはcloneというコマンドがあるのでググると違う物いっぱい出てくるゼ。

ちょっと調べたら


まずこの辺りデスか。なんとなくその中のrhodecode、そしてその後にgitlabをまず試してみました。

結論からいくとどちらも何も入れていない素のサーバ(今回はdebian7を使用)に入れるという前提であれば何も考えずにインストールマニュアル通りにやったら動きました。

gitlabは最終段の機能チェックみたいなところで「sidekiq」とやらが動いていないとか起動スクリプトが古いとか怒られるんだけど確認するとどちらも問題無さそうなのでスルーでok。それ以外のハマりポイントは説明読みながらコピペ、もしくは適宜設定していれば問題無し。

パッと見の印象としてはgitlabの方がissue管理とかwikiとかコラボ用の機能があるので高機能っぽい。でもrhodecodeの方がインストール楽だしアカウント管理はLDAPとかに対応している分そういうので共通化したい場合は楽かも。という感じ。動作速度はあまり体感差は無いかな。

個人的にはrubyってパッケージを使っていたとしても依存関係の問題で環境構築でハマる事が経験上多くてアレルギーがあるので極力避けていたんですが、今回のgitlabはすんなり入ったものの(最近流行の仮想化環境での構築が功を奏してるんだと思います。まぁ、それでもruby自体はパッケージで入れるとおまけが多すぎるのでソースからビルドしたり色々周辺を整える必要があったので面倒なのには変わらないですが。あとこの仕組みが流行ってるのもみんな環境構築にハマってるからでしょうなぁ。)やっぱり手数が多くて構築、メンテナンスを考えるとpythonで動いているrhodecodeの方が分がある気がします。

ただ、もともとgithubとは何ぞや?何が便利?という疑問にはまだ回答を得られていません。少しさわってみただけでは正直現状はソースの中身や履歴がWebから簡単に見えるぜウヒョヒョーってな位の理解でしかないので何が便利なのか皆目見当もつかず。WindowsでGUIのクライアント使っているのと比べたアドバンテージって何?って感じです。

いや、多分git等分散型になった事によって履歴を追う事、マージをする事が複雑になったのでそれをアシストする為に中央にこういうサービスを置いて情報を集約していかないとやっていけないという話なんだろうなと思うんですけどね。でもなんかシックリ来ない。運用のイメージをもっと固める必要がありそうです。


というわけで、もうすこしいじってみる、本家やgitoriousみたいなサービス提供しているものをアカウント作ってさわってみるのも必要かなと思っているのでどれを使うか、どう使うかの結論はもう少し後回しデス。

またissue/bug trackingとかwiki/forumみたいなものと絡められるの?とかプロジェクトを回すための環境という意味ではそういう部分までセットで考えるべきかなと思っているのでそちらの方も見ていきたいトコロ。

そういえばログインを共通化するOpenIDとかって仕組みがあったと思うんだけど複数のサービスをシームレスにつなげられる仕組みって無いのかなぁ。LDAPとかでIDだけが共通になっていてもイチイチログインし直しとか、画面またぐの面倒とか色々想像出来てしまうんだけど・・・多くを望みすぎ?

2013年4月15日月曜日

IntelのNIC

ちょっとテスト用に簡単なサーバを構築という事で某ショップブランドの店でサーバー機ではなく普通のi7なデスクトップを一台購入。なんとなく2nd NICにIntelのPro/1000 GTを追加(つかオンボードが蟹だからメインになるんですが)

このGTが失敗でした・・・orz

今回の目的は「新しい技術を体感しよう」なので疑問ももたずにHyper-V Server 2012をインストール。最初の設定作業がホボCUIオンリーな世界に戸惑いつつ最初の仮想マシンとしてWindows Server 2012を入れました。

で、よく見たらIntelのNIC認識していないわけですよ。蟹は認識しているのに。

個人的な妄想では「Intelは最強。安定しているし、何も用意しなくても勝手に認識される。」と思っていましたが幻想だった様です。

何でかと言うと・・・

このボードWindows8対応してねぇぇぇぇ

Windows Server 2008 R2やWindows7までのドライバはあるんですよ・・・。でもWindows8はオフィシャルサイトにもダメと書いてありましたとさ。トホホ。PRO/1000系ってもう過去のモデルなんですねぇ。ネットで調べると大抵このボードが鉄板ってあるからそういうもんだと思っていました。(後に書く様に今回の環境じゃなければ問題無いんですけどね)

というわけでIntel Gigabit CT Desktop Adapterをとりあえず追加オーダーしましたよ・・・と。まぁ、実はショップブランドで構成決める時にこのボードあったんですが上の様な妄想があったので調べもせず、よくわからんけどCTよりGTの方が強そう(アホ)とかって適当に選んだのでした・・・反省orz

他にも重要なのは仮想マシン側のOSなんでベースをHyper-V Server 2008にするとか(ぶっちゃけショボイPCでは2012である必要性はほぼ無いので)、ベースをVMware ESXiにするとかってのも選択肢なんですがね。

まぁ・・・自腹じゃないし最新の環境を作るという事で・・・テヘッ

2013年3月11日月曜日

ターミナルのフォント

今までsshのターミナルにはTeraTermを使い続けてきましたが最近ふとしたところからputtyを使う様になりました。別にTTSSHに何か不満があったわけでもないんですけど、本当になんとなくです。(ふと昔一緒に仕事していた会社のIT管理をしていた人が熱狂的なputtyユーザーだったのを思い出しただけ)

っとこれは実は今回のエントリーの本題では無くて・・・本題はフォントの話デス。

そのputtyのフォント設定をなんとなくTerminalにしていたんですが、これが最近の安ノートPCの液晶(WXGA1366x768)であれば特に問題無かったのですが職場の24インチ1920x1200のモニタだと10ptでは小さすぎる、次のサイズの14ptではデカすぎるとイマイチ勝手が良くない。

というわけで代替えフォントを探す事にしました。少しググるとこんな記事が。

http://d.hatena.ne.jp/shibason/20100902/1283424768

ここに紹介されているInconsolataをためしに入れてみるとナカナカ良い感じに見える。ただし記事にも書かれている様に日本語のフォントは入っていないので日本語を含んだ表示をすると残念なことになります。(昔昔680x0系のMacにNetBSD + X-Windowを入れてなんとか日本語化したなんて時代を思い出す感じですな)



こんな感じ。かといってここに書かれているFontLinkを使用する方法はレジストリをいじるのでなんとなくやりたくない。(別に問題になる根拠はないんだけど)

じゃー、もともとソースが公開されているフォントだし自分でマージして1フォントとして用意されている方が楽だし後で別の環境で使う場合も気兼ねなく使えるじゃないという事でFontForge関連をパラパラ見ていたらやはり同じことを考えた人がいて作っている人がいました。

http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/rictydiminished.html

で、試しに入れてみたんですが



なんか同じデータのはずなのに素のInconsolataとは印象が違いますネ・・・。eとかの上部が欠けていたりしてなんとなく気持ち悪い。あと、なんとなく元の方が線が太かった気がするんですがboldを指定すると太すぎるしバランスが・・・。不思議なもんですな。

これだけではネタとしてアレなので無印Rictyさんを自前環境で作ってみる事にします。FontForgeのWindows版はなんか色々面倒臭そうな雰囲気だったので、丁度別用途の為に作ってあったUbuntu環境で生成してみます。基本ドキュメントに書いてある通りなのでここを見る必要はないハズです。

$ sudo aptitude install fontforge

でサクッとFontForgeをインストール。

お次はフォントデータ及び変換スクリプトを入手しましょう。

$ wget http://www.levien.com/type/myfonts/Inconsolata.otf
$ wget 'http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fmix-mplus-ipa%2F57240%2Fmigu-1m-20121030.zip'
$ wget https://github.com/yascentur/Ricty/archive/3.2.1.zip

リンクは今現在のリンクなんで変わってたら適当に読み替えてね。sourceforgeの方はURLを''でくくるのを忘れるとぷんぷんする事になりますよ。

圧縮されているものは展開してインストール。とりあえずUbuntuは全ユーザで使える様にフォントを入れるには/usr/local/share/fonts/にコピーすれば良いらしい。

$ mv redir.php\?m\=jaist\&f\=%2Fmix-mplus-ipa%2F57240%2Fmigu-1m-20121030.zip migu-1m-20121030.zip
$ unzip migu-1m-20121030.zip
$ sudo cp migu-1m-20121030/migu-1m*.ttf /usr/local/share/fonts/

$ sudo cp Inconsolata.otf /usr/local/share/fonts/

$ unzip 3.2.1.zip


そして変換開始。

$ cd Ricty-3.2.1/
$ sh ricty_generator.sh auto

しばしほっておくと「Ricty-Regular.ttf」と「Ricty-Bold.ttf 」等が出来上がっているのですがWindowsに入れてみると字間が凄い事になっています。 大分前に発覚している不具合らしいんですが未だに直ってないっぽいですね。というわけで

$wget https://raw.github.com/yascentur/Ricty/3.2.1/misc/os2version_reviser.sh

こちらのスクリプトを使用して変換してやりましょう。具体的にはOS/2バージョンとやらを4から1にするらしいのですが意味はサッパリわかりませんw FontForge上で手動でやってもOKの様です。

$ sh os2version_reviser.sh Ricty-*.ttf RictyDiscord-*.ttf


これで出来た物をWindows側にもってきたら終了です。

よくよく作者さんのページを読み直してみるとWindows環境では文字が小さい時に綺麗に表示されない(文字が欠ける)という事は書かれていましたね。というわけでついでにサイズを13pt(リストには13無いけど手入力で)にして色を上のサイトに書いてあるのを真似して調整してみました。



良い感じですな!しばらくはこれでいってみましょう。

しかしなんだ。もしかしてこれより小さい文字で使う場合はMigu 1Mを素のまま使った方が幸せだったりする!?ショボイ液晶のノートとかだとこのサイズデカすぎるしなぁ。




追伸

ついでと言ってはなんですがこのRictyのスクリプトを使用してTakaoゴシックとの混合版も作ってみました。

$ ./ricty_generator.sh -n takao ../Inconsolata.otf ../takao-fonts-ttf-003.02.01/TakaoGothic.ttf ../takao-fonts-ttf-003.02.01/TakaoGothicS.ttf
$ sh os2version_reviser.sh Rictytakao-*.ttf RictytakaoDiscord-*.ttf

前に書いたautoの時は勝手にインストール済みのフォントから拾ってきたみたいですが、こちらの書き方はソースになる実フォントファイルのパス指定になる様です。適当に読み替えて下さい。一番最後の指定ってbold用のフォント指定らしいのですが最終的にインストールしないので適当です。

2013年2月19日火曜日

高負荷状態のルータの内情 その1

普段あまり使う機会が無いといえば無いし、一般的な用途には下火な印象もあるBitTorrentみたいなP2Pだけど、ああいう物でネットワーク的に負荷?をかけるとルータのレスポンスが著しく落ちるのは何故なのか前から興味があった。

昔のルータは少し負荷をかけるとそのまま逝っちゃってリセットしないと復旧しなかったりしたけど最近のはFONみたいな安い奴でも落ちずに粘るし、そういう意味でもメカニズムに興味が。

丁度?FONルータのファームを書き換えられる環境が整ったので(基盤からシリアルの足生やしてUSBシリアル変換アダプタ買ってきて繋いだだけだけど)カスタムファームを入れてtelnetでつないで状況をウォッチしてみる事に。

結果としては・・・softirqが99%とかになっておりここが問題っぽい。そしてdnsmasqタスクが結構な高負荷になっている事象は観測出来た。ただしdnsmasqは常に高負荷なわけでは無さそう。ソフトウェア割り込みでフン詰まっているのは間違いないんだろけど割り込み要因が問題。

softirqに関してはカスタムファームのKernelであるLinuxの仕組みという事で良いと思うんだけど、実際キャパやその処理能力を超える割り込みが入った場合の挙動は勉強不足でよく分からない。何かツールとかでその瞬間に入っている割り込み種別とかプライオリティとか確認する方法あるのかな?Linuxでの開発ってした事無いのでこちらも勉強しないとね。

ルータのファームってLinuxとは限らないと思うけど他のOSでも同じ事が起きるのだろうか?基本的にP2Pって同時に張られるセッション数が凄い数になっているんじゃないかと仕様も調べずに勝手に想像しているけど、単にそれが原因なのか、それともデバイスドライバの実装上の問題なのかはまず確認が必要かも。

いずれにせよサーバに負荷が集中して~ってパターンと同様の事象が起きているという認識であっているのかなぁ。だとしたらこの辺を勉強しておく事は仕事にもつながりそうだしちょっと調べてみますか。デバッグ手法に関してはAndroidの下回りとか開発するときにも生かせそうだしね。(無理やり紐づけてみる)

というわけで、その2につづく(はず)

2013年1月24日木曜日

sqlite.netのBOOLEAN型

sqlite.netを使ってプログラムを書いていてハマったのでメモメモ。

まず、sqlite自身にあまり細かい型が無い事は知ってました。そしてsqlite自身、それからsqlite.net側の処理として型が拡張されておりBOOLが使えるとの事なので試しにBOOL型(BOOLEAN型でもいけた)のところにTRUEを入れるSQLを書いてみる・・・入りました。 まぁ、文字列として入っているから当然なんですけど。で、、、C#で読み出してみると「false」が返ってきます。ヤッター!

なんでだろーっとソースコードを見てみると・・・テキストとして

「yes」「y」「1」「on」

trueとして

「no」「n」「0」「off」

falseとして処理されております・・・。

あれ?trueとかfalseは!?普通の感覚だとBOOLEANとか言われたらtrue/falseとかじゃないの!?

まぁ、その文字の判定の前に渡されたオブジェクトがbool型(C#的な)だったらboolとして処理するみたいな形になっているのでそれで満足してそれ以外の型で処理する様になっている様なのですが・・・そもそもsqliteにはbool型無いし、C言語(sqliteはCで書かれている)的にもbool無いしこの処理って意味あるのか!?

その前の処理までは追っていないのでそこで何やらやっている可能性もあるけど・・・まぁちゃんと値返ってきてないし無いわな。

<閑話休題>

ちょっと調べてみるとBoolean型自体はSQL的にはSQL:1999で定義されていてtrue/falseで処理出来る様です。なのでSQL的には間違った物ではないのですがsqlite3のドキュメントを読むと・・・「SQL92に一応準拠」との事。

まー、じゃあしょうがないよな・・・?

しょうがないよな!?

いや、やっぱりyes/noとか処理してるんだしsqlite.netでtrue/falseの判定すべきだろう。

まぁ世間一般的にSQLの世界としては規格化されていてもブッチしている実装はいっぱいあるわけで、BOOLEANもあまりサポートされていない存在らしいので深く考えずに数値型に0/1入れて処理しておくのが幸せになれる方法なんでしょうけどね。

2012年11月1日木曜日

Pythonの開発の為にvirtualenvを入れてみる

pythonの開発環境として2.7と3.2を混在させたいのでvirtualenvを入れようと思ったけどロクに設定をしていない事に気づいた。やっぱりこういうのは色々面倒なのでメモを残しておくことにする。

とりあえず使用環境にはActivePythonではなくpython.orgから落としたWindows版の物をそれぞれ展開して配置しただけ。パスも通していないのでまだpythonは実行出来ません。

まずvirtualenvを入れるにはpipなるものがあると便利らしい。パッケージ管理のプログラムみたいね。で、pythonの設定も出来てないのにどうやってやるんだヨ!って話でまずはeasy_installなるものを入れる事にする。もう既によく分からなくなってきたゾ

 http://pypi.python.org/pypi/setuptools

ここから手持ちマシンは64bit環境(Windows8 Pro)なのでez_setup.pyを落としてきてpythonの実行ファイルと同じパスにコピーする。うちの場合は「C:\app\Python27」「C:\app\Python32」って感じに入れてあるので前者のパスにコピーですな。で下記のコマンドを実行。

PS C:\app\Python27>python ez_setup.py


これで勝手に「C:\app\Python27\Scripts」配下にeasy_installが入りましたぜ旦那。物を確認したらシステムの環境変数のpathに前者のパスを追加してPowerShellを開きなおす事でeasy_installが実行出来る状態に。

さぁ、次はpip入れちゃおうか。

PS C:\Users\Ore> easy_install pip

これだけ。とりあえずこれで前準備は完了ですな。次は本命のvirtualenvを入れてみましょう。

PS C:\Users\Suguru> pip install virtualenv

とりあえずこれでokみたいヨ!早速仮想環境を作ってプログラムを書くぜって事で作業フォルダに移動して

PS G:\develop\projects> virtualenv testapp

これで作業フォルダが完成。その中のScriptsフォルダに移動してactivateすれば仮想環境に!って事で

PS G:\develop\projects> cd testapp\Scripts
PS G:\develop\projects\testapp\Scripts> activate

・・・セキュリティの問題で実行出来ませんダトッ。PowerShell初心者なので初めて知った事実。(ちなみに普通のDOS窓ではこれでイケタ)

まぁ、折角だからPowerShellからもいけるようにトライしてみるゼィ。とりあえず現在の設定の確認。

PS G:\develop\projects\testapp\Scripts> Get-ExecutionPolicy
Restricted

これは全面禁止状態の模様。じゃー全部許可したれって事で

PS G:\develop\projects\testapp\Scripts> Set-ExecutionPolicy Unrestricted

とやったら 

Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' へのアクセスが拒否されました。

ギャース。ダメじゃん。こりゃ管理権限で実行しないとダメだね・・・。で結局管理権限でPowerShellを実行してみたらいけました。が・・・なんか釈然としない物を感じますな、この方法は。せめてsudoみたいな感じで一時的に管理者権限でスクリプト実行出来るとかの方がマトモなんじゃ・・・。

なにはともあれこれで実行出来ましたよっと。

PS G:\develop\projects\testapp\Scripts> activate
(testapp) PS G:\develop\projects\testapp\Scripts>


2012年9月24日月曜日

インポートしてみた

家庭内事業仕分けの一環で不要な出費を減らす方向で、無駄に金を払っていた、はてなダイアリーのデータを全部bloggerに移動して(全部っつっても大した量無いけど)有料オプションを解約する事に。

とりあえずデータはMovableType形式でエクスポートして、一応かつてのデファクトスタンダードなわけだしそのままbloggerにインポートできるのかと思ったら全然無理でしたorz

ググると変換サービスを作ってくれている人が!感謝感謝で使わせてもらいます。そしてわかりにくい階層を辿りインポートを行う。

行う・・・。

全部今日の記事になっちゃったよorz

んんー?とりあえず中身を見ると・・・ああ・・・日付の形式の問題ね・・・。この辺はやっぱり難しいねぇ。

結局ブログの言語を日本語から英語にしてインポートしたら正常に読み込まれましたよっと。これで心置きなくはてなを解約という事でプチっと止めを刺しました。

次は何を仕分けるかな~