サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
studio-m.hatenadiary.org
元々は「鶏の頭(小国の王)になっても、牛の尻(大国の家臣)にはなるな」という教えですが、ことITエンジニアという職に関しては「牛後となるとも、鶏口となるなかれ」であると思います。 頭になっても鶏は鶏 鶏と牛では必要とされる技術のレベルが違います。鶏の世界では「とりあえず動けばいいよ。後は安くしてくれ」みたいな話が多く、そういう仕事を数こなすことが求められるのでいつも同じようなことをしています。新しいことを身に付けても、より深い知識を身に付けても実践する機会がないので経験が積めません。鶏口では所詮、鶏レベルのことしかできないのです。 受託案件で細々食ってる鶏の場合、クライアントの要求レベルやそもそもクライアントのITリテラシが低いので、それほど難しいことは求められません。それよりも、社長のPCの面倒を見たり、社長宅のプリンタの配線をするスキルの方が求められることさえあります。他には「パソコン
TLで「フリーランスの仕事とは」みたいな話題が目に付いたので。 答えのないものだし、それぞれの人が自分なりのやり方を見つけていくしかないのだけど、サンプルはあればあっただけ有効だろうということで、自分のことも少し書いてみようと思います。 ■これまでの歩み Web関係のお仕事で気がつけば12年ほどやってきてます。そんなに長いつもりはなかったけど、改めて数えてみたらびびった。 社員としてフルタイム勤務した期間と、フリーランスとして動いていた期間はだいたい半々ぐらい、といったところでしょうか。今は会社と雇用契約を結んで、フルタイムで勤務しています。 転職などはわりと回数を重ねていますが、自分ではあまり「転々としている」感はありません。会社や契約形態が変わったり一時的に離れたりはしても、結果的には同じところの仕事をしていることが多かったからかも知れません。長いお客さんとは途中離れる時期がありつつも
2年ぐらい前のネタだが今でも解決してないので、時期を外しても何ともないぜ。 RealTekのRTL8111bという2年程前(LGA775世代)から広く使われているNICがあります。こいつのドライバはr8168が正しいのですが、CentOS5系で自動認識させるとr8169がロードされてしまうという問題があります。 r8169でも動いたりするのですが、ifconfigなどで見るとdroppedが増えていたりして危険なことがあります。一時的には動いても、ある日突然転送エラーを吐き始めて、ついには疎通しなくなったりすることも経験しています。数ヶ月の安定運用の後いきなり止まったりすることもあるので、油断出来ません。 この問題の詳細については、CentOS Wikiから参照出来ます。CentOS5.2から発生した問題のようですが、CentOS5.5でも相変わらずなのが困りもの。 AdditionalR
$ php -r '$data = array(); echo $data["key"];' PHP Notice: Undefined index: key in Command line code on line 1当然ですね。 $ php -r '$data = null; echo $data["key"];'今更ながらに知ったのだけど、NOTICEも何も出ないのね。 決まったフォーマットの連想配列が返ってくることを期待したコードがnullを受け取ると、予期せぬハマりポイントになりかねない。 ちゃんとissetとかで確認するなりしてればいいのだけど あまりよくなかったので追記(後述)、 <?php $result = hogehoge(); if ($result['errCode']) { 〜 } みたいなゆるふわコードが紛れていると、問題箇所が特定しづらかったりしますね。 (2
OSXだとmd5コマンドになって出力の形式が違うので、バッチでmd5を拾う時なんかに少し面倒。 #!/usr/bin/perl use strict; use warnings; my $filename = shift @ARGV; my $md5 = `md5 $filename`; die 'could not get md5 hash' unless $md5 =~ /^MD5 \([^\)]+\) = (\w+)$/; print "$1 $filename\n"; とか書いてやっつけたけど、もうちょっと筋のいい方法はないものか。きっとあると思うんだけど、やっつけてしまった。 そして、 sudo port install md5sha1sum であっさり解決することが判明。これでmd5sumコマンドが入る。 (追記) kazuhoさんから「openssl md5使えばプラットホー
「CakePHPでラジオボタンを出そうと思ったら、PCREとかPHPのビルドを考え直すハメになった」の続報です。CentOS5.5環境でPCREのUnicode文字プロパティを正常動作させる方法について改めてまとめます。 動作確認には、Inflector::slugに含まれる問題のパターンでpreg_replaceを実行しました。 <?php php -r "echo preg_replace('/[^\s\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu', '', 'Hoge').PHP_EOL;" これを実行して「Hoge」が返ってくればOK、「o」になったらダメと判断します。 ■yumで最新版のPCREを落としてくる 昨日のエントリに追記したように、pcreパッケージのChangelogから--enable-unicode-propertiesオプショ
(2011/05/18追記)末尾にCentOSの標準RPMの更新について書きました (2011/05/19追記)続編書きました CentOS5.5でCakePHP1.3系のInflector::slugを正常動作させる方法 CakePHPのFormHelperでラジオボタンを出してみたところ、label要素がうまく動かない症状に遭遇しました。で、調べていくと斜め上な展開を見せたのでブログにまとめてみる。 検証環境はCentOS5.5 x86_64、PHPは5.2.12(自前RPM)です。CakePHPは2011/05/18現在のgithubのmasterで確認。 ■ラジオボタンがうまく選択できない CakePHPのFormHeplerでラジオボタンを出そうとして、http://book.cakephp.org/view/1429/radioのサンプルを動かしてみたところ、label要素が思
(追記)本記事の内容はCakePHP1.3.6ならびに2011/04/28時点でのgituhbの1.2, 1.3ブランチで検証しました。 (2011/05/05追記)コメントで現時点のCake2.0では再帰的な探索を行わないとのご指摘を頂きました。ちゃんと追えてないけど、import周りの処理は大幅に変更されるようです。 「CakePHPではControllerは1つのディレクトリに全部入れるのがふつう」という話を聞いて、さすがにそれはないだろうと思って調べたらapp/config/bootstrap.phpに$controllerPathsを書けば探索パスを追加できるという情報を得た。 CakePHPでコントローラーを複数のディレクトリに整理する方法 - yandodの日記 コントローラの中身をフォルダ分けする|ASTRODEO のだけど、どうにもうまく動かなくてあちこちいじくり回してた
PDOでPostgreSQLを叩くとき、lastInsertIdを取得するにはシーケンスオブジェクト名を投げる必要があるそうな。 CREATE TABLE test ( id SERIAL PRIMARY KEY, name VARCHAR(255) );てな感じでテーブル定義して、ここにINSERTした後でlastInsertIdを取得するには、 $lastId = $this->dbh->lastInsertId('test_id_seq');とかやって、シーケンス名を引数として与えないと取れません。MySQLの場合は引数なしで取れるので、処理を振り分ける必要があります。プログラム自体はMySQLと互換性を持たせて…とか思うとちょっと厄介ですね。プライマリキーをidに固定して、INSERT時にテーブル名を覚えておく、とかそんな方法で回避するのが手っ取り早いかな? あと、 $this->
結構前のエントリになりますが、cles::blogさんで紹介されている「プログラミングは設計か製造か?」に感銘を受けました。はてブを見ていると、最近になってwebarchiveから発掘されたようです。 ソフトウェア設計とは何か? 原文はこちらで公開されている模様。 What Is Software Design? by Jack W. Reeves - developer.*, Developer Dot Star 全編にわたって非常に示唆に富んだ内容となっています。印象深かったトピックは以下。 ソースコードは設計であり、ドキュメントである ソフトウェア開発における「製造」とはビルドである 製造はコンパイラとリンカの仕事であり、コストは非常に小さい テストやデバッグは設計の検証と洗練のプロセスである 他の工学分野のそれと等価で手を抜くべきでない 「コーディング」「テスト・デバッグ」「(俗に
メモの類はMacVimのタブを開いて保存もせずにパパッと書き留めるのですが、そのままスリープさせて就寝、朝起きると電源が切れている。なんてことばかりでげんなりです。evernoteにvimモードがあればいいのに。 もしかしてそういうものなのかとも思ったけど、やはりおかしいのでググってみた。 こういう時は、PRAMクリアとSMCリセットをしてみろということらしい。 PRAMクリア 電源off Command + Option + P + R を押しながら電源を入れる 再起動して2回目の「じゃーん」が聞こえたらキーを離す SMCリセット 電源off バッテリーを外す 電源ボタンを5秒間押し続ける 電源ボタンを放す バッテリーを付けて起動 MacBookAirの場合はバッテリーが取り外せないので、 電源off 電源アダプタを接続 Shift + Control + Option を押しながら電源
今更感がありすぎる古いネタでもブログに上げてしまおうキャンペーン実施中。今ならperlbrewを使うのが圧倒的にお勧めなのですが、system Perl(OSに標準で付いてくるPerl)の出番も完全に無くなるわけでもないかなーと。 例えば先日、CloudForecastをperlbrew環境で使おうと思ったらRRDtoolやらSNMPのPerlバインディングのインストールが面倒で、system Perl + local::libでセットアップしたりしました。むしろperlbrew環境でサクサク入れる方法が知りたい。 それはさておき、x86_64なCentOS5系(多分どれも変わらないんじゃないかな)でOSインストール直後の状態からlocal::libをセットアップ時に自分がやってる手順をご紹介。繰り返しますが、明確な理由が無い限りはperlbrewを使うのがお勧めです。 以下、ユーザ名はr
MySQLの稼働やレプリケーション監視は柔軟性が欲しくて自前のスクリプトでやっているのですが、それとは別にNagiosでの監視もそれはそれで欲しいよね、という話。 check_mysqlに直接パスワード渡すとかないわー、と思って.my.cnfを渡す方法を探してみた。 http://www.mail-archive.com/nagios-users@lists.sourceforge.net/msg17208.html $HOMEさえ設定してやれば、check_mysqlが.my.cnfを読み込んでくれるらしい。 で、こういう風に書くと実際のnagiosユーザのホームディレクトリ(/etc/passwdの設定)は関係ないので、好きなところに.my.cnfを配置出来ると。 define command{ command_name check_mysql command_line HOME=/h
ググればサンプルはたくさん出てくるのだけど、.git/hooks/post-receiveに #!/bin/sh TITLE=`git show '--pretty=format:[リポジトリ名] "%s" by %cn #%h'|head -1` git show | mail -s "$TITLE" メールアドレス とか書いておく程度でいいかなと思った。ブランチまで含めた運用はもう少し考えたい。 Gitのフックはreceiveとupdateの違いがよく分からなかったんだけど、man githooksするよりも以下が分かりやすかった。 Pro Git - Pro Git 7.3 Git のカスタマイズ Git Hooks (以下、2010/11/25追記) その後、updateで以下のようなhookスクリプトを動かすように変更。 #!/bin/sh REPO="リポジトリ名" MAILT
仕事の都合でDreamweaver(以下DW)のテンプレートを用意することになりました。個人的には好きじゃないけど、その方が仕事がうまく回るなら使った方がいいに決まってる。 どうせならテンプレートの仕様を覚えて自分でちゃんと制御した方がいいよね、ということで少し調べてみました。手元にあるのがDreamweaver8と古いけど、基本的な仕様は多分ほとんど変わらないはず。 なお、エントリのパーマリンクからお越しの皆様へ。現在、はてダではスーパーPRE記法の中にHTMLコメントを入れると何故か表示されない不具合があるようです。日付のページからだとちゃんと表示されるので、ソース内のHTMLコメントが表示されない場合は2008/09/20のページへどうぞ。 ■テンプレートの構造 DWのテンプレート機能は、HTMLに埋め込まれたコメントをDWが独自に解釈することで成立している。 テンプレートファイルは
skip-name-resolve重要 - kotori::log を見て、実際のところどの程度性能に影響があるのか気になったのでベンチを取ってみた。 ベンチマークスクリプトはhttp://gist.github.com/594839で、connect -> disconnectを1000回繰り返すのにかかった時間を計測。 ■計測結果 環境の詳細は後述するとして、まずは結果から。手動で何回か実行して、結果のボリュームゾーンを感覚的に抽出。 環境 実行時間(秒) skip-name-resolve 1.73 〜 1.74 hosts 1.75 〜 1.76 DNS 2.26 〜 2.29 /etc/my.cnfでskip-name-resolveを有効にした場合、確かに速くて、DNSで名前解決するよりも0.5秒ぐらい速くなる。1回あたり0.5msecをどう見るかはケースバイケースだが、DB接
Path::AttrRouterを使うのに、 package MyController; use Any::Moose; extends 'Path::AttrRouter::Controller'; sub index :Path Args(0) { } 1; みたいに書くと「Error while loading app.psgi: Invalid CODE attributes:」とか怒られてどうすればいいんだろう。 と思って#perl-casualで聞いてみたら、JPAの牧さんがあっさり「それBEGIN {}でできるよ」と解決してくれました。 package MyController; use Any::Moose; BEGIN { extends 'Path::AttrRouter::Controller' } のように、extendsをBEGINでくくってやれば無問題。use
「馬鹿にできないアクセサのオーバーヘッド - Craftworks Tech Blog - Branch」にもあるように、Mooseのアクセサによるオーバーヘッドは無視するにはちょっと大きいという印象があります。 じゃあ、Mouseだったらどうなんだろうとか、自分が使うサーバのスペックも随分上がったしとか、そういう経緯で改めてベンチを取ってみました。コードは@Craftworksさんの物にMouseを足しただけ。以下に貼り付けておきます。 http://gist.github.com/435350 で、こいつをXeon X3330@2.66GHzで走らせた結果が以下(cmp_these部分のみ)。 Rate moose_ro moose_rw caf_rw mouse_ro mouse_rw mouse_direct moose_direct caf_direct moose_ro 297
NagiosでSNMPを利用した監視を行う場合、check_snmpコマンドであれこれ書いていくのも一つの方法ですが、MIBのオブジェクトIDとか覚えるのは不可能なので記述はコピペに頼ることになります。 CPU使用率だったら check_snmp!public!.1.3.6.1.4.1.2021.11.9.0,.1.3.6.1.4.1.2021.11.10.0,.1.3.6.1.4.1.2021.11.11.0!'CPU usage (user system idle)'!'%,%,%'とか。後から見て何やってるのか分かりづらい。それってあまり嬉しくないよなということで、用途別に書かれたプラグインを使ってます。 http://nagios.manubulon.com/ 何年か前から使ってるんだけど、ブクマとかほとんど付いてなくて知名度が低いのか需要が無いのか分からないからエントリで紹介して
CentOS5.0(x86_64)でAPI ToolsとAMI Toolsを動かすまでのメモ。まだインストールして、コマンドの起動とヘルプ確認した程度なので、以下の内容で完動しなかったらごめんなさい。 http://aws.amazon.com/のResources > Other Developer Tools > Amazon Elastic Compute Cloudから Amazon EC2 API Tools Amazon EC2 AMI Tools をそれぞれダウンロード。 API Tools API Toolsを利用するにはJDKが必要です。軽くググると「yumだとうまくいかなくて、Sunのサイトから落としてきた」なんてエントリも見ましたが、手元の環境では sudo yum install java-1.6.0-openjdk.x86_64するだけですんなり入りました。 あと
やたら重くてちっともfastestじゃない時は、 sudo rm /etc/yum/pluginconf.d/fastestmirror.conf するといいらしい(追記:キャッシュファイルを削除する方が適切)。該当ファイルはこんな感じになってた。 [main] enabled=1 verbose=0 socket_timeout=3 hostfilepath=/var/cache/yum/timedhosts.txt maxhostfileage=10 maxthreads=15 #exclude=.gov, facebook再度yum updateとかしてもファイルは復活しなかったけど、特に問題なく動いてるっぽい。 /var/cache/yum/timedhosts.txtに各ミラーの応答速度が保存されていて、何らかの原因で近いサーバなのに接続失敗したりすると、ここに「重いサーバ」とし
DROP TABLE IF EXISTS hogehoge; CREATE TABLE hogehoge ( 〜 );みたいなhoge.sqlがあるとします。このファイルを読み込んでPDOに投げる、コマンドラインで動くphpスクリプトがあります。夏頃にFedoraCore5 + php5.1.4 + MySQL5.0.22で動かした時にはちゃんと動いたんですが、FodoraCore5 + php5.1.6. + MySQL5.0.27だと、 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, y
私、普段はLinuxサーバにSambaで接続して、 net use x: \\localsever\myhomeてな感じにネットワークドライブとして利用するスタイルで開発してます。 そして、前々々時代的なファイラ「あふ」を使ってファイルを操作します。こいつがTortoiseSVNのアイコンオーバーレイに対応して、Subversionのリポジトリに対する状態(svn st)をアイコンに重ねて表示する素敵な環境になっています。 ただ、ネットワークドライブだとアイコンが表示されなくて寂しい思いをしていたんですね。で、作者のAKT氏にまでメールしたわけですが、実はそれはTortoiseSVNの側でネットワークドライブを有効にするオプションがあって、それをOFFにしていただけという超恥ずかしい話でございましたorz
DBIx::Skinnyと仲間たちView more presentations from Ryo Miyake. http://perl-casual.org/2009/10/1127casual-perl-talks1.html を見て10分のLTだと思って資料用意したら5分LTだったよ! 後から出たタイムテーブルには5分って書いてあるのに、古い案内見て勘違いしてた。タイムテーブルのエントリをブクマしたにも関わらずこのありさまだよ。 5分の発表で55ページだから間違いなく今回最多ページ数は俺の物だと思ったら、id:xaicronが120ページを用意するという暴挙に出たためすっかり霞んでしまった。つーか120ページでしかもデモまで予定してたとか、10分でも無茶だろJK… まぁ何とか5分で最後まで話したわけですが、あと30秒欲しかった。5分ちょうどで終わる計画を立ててもダメですね。4分30
x86_64環境でText::MeCabがビルド出来ない、ってネタはググるとわりと出てくるんだけど、そうでない状況に出くわしたので記録として。 MeCab本体は最新版の0.98、Text::MeCabはCPANにある0.20007でテスト。OSはCentOS5.4(x86_64)です。 まず、Makefile.PLは以下のように変更を加える。 #LIBS => [ split(/\s+/, $config->{libs}) ], LIBS => `mecab-config --libs`, LD => `mecab-config --cxx`, INC => `mecab-config --cflags`, これでmake && make testすると、 # Failed test 'MECAB_NOR_NODE ok' # at t/01-sanity.t line 11. # Fai
MySQL5.0で全文検索というと、Tritonn入れたりしてSennaを使うのが常套手段。そういうところはプラグインで解決するのが5.1のやり方らしい。 http://www.slideshare.net/hiroaki.kawai/mysqlftppc http://sourceforge.net/apps/mediawiki/mysqlftppc/index.php?title=Main_Page というわけで、MySQL5.1でfull-text indexを作成出来るようになる、mysqlftppcことMySQL full-text parser plugin collectionを入れてみました。環境はCentOS5.4(x86_64)。 MySQL本体は公式のRPMを使用。 http://dev.mysql.com/downloads/mysql/5.1.html#linux
まずは手始めにRightScaleが提供してるCentOSのAMIを使ってみたりしたんですが、やっぱり自分でイメージ作りたいよね、ということでチャレンジ。 Amazon EC2 用に自分で CentOS 5 のイメージを用意する が非常に参考になるので、これを全面的に参考にして作ってみました。vgktaro++。が、どうにもSSHでログイン出来ない。Key Pairの受け取りに失敗してるのかなとも思ったけど、何せ接続できないので確認する術がない。 そもそもイメージ作って、S3に転送するだけでも結構な時間を食うので試行錯誤するのがとても面倒。自宅の上り回線がショボくて、2GBのイメージをS3に転送するのに40分ぐらいかかったりして、それが動かないと心が折れそうになるわけですよ。 そこでふと「既存のAMIでInstanceを立ち上げて、その中で新しいAMI作ればいいんじゃね?」ということに気付
11/1付けでインスタンスの料金が値下げされたらしいので、具体的にどれぐらい下がったのかを時・日・月ごとにまとめてみました。1ヶ月は30日で計算しています。 Standard +-----------------------++-----------------+-----------------+-----------------+ | || hour | day | month | +-----------------------++-----------------+-----------------+-----------------+ | Small || $0.10 -> $0.085 | $ 2.4 -> $ 2.04 | $ 72 -> $ 61.2 | | Large || $0.40 -> $0.34 | $ 9.6 -> $ 8.16 | $ 288 -> $244.
RPMForgeにあるRPMは古いし、ドキュメントも入ってないので手動でビルドしてみることに。 http://git-scm.com/download に公式のRPMがあることを知ったけど、1.6系のような新しいバージョンはFedora用のRPMでライブラリの依存が面倒くさいことになってたので使わないことに。 で、ふつうにソースを拾ってきてビルドしてみたんだけど、これが思ったより大変だったのでメモ。 ■perl Makefile.PLのPREFIX指定がコケる ./configure --prefix=/opt/git && make したら /usr/bin/perl Makefile.PL PREFIX='/opt/git' Only one of PREFIX or INSTALL_BASE can be given. Not both.とエラー。prefixの指定を外してもperl
次のページ
このページを最初にブックマークしてみませんか?
『Lism.in * blog - nekoya (id:studio-m)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く