サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
kenkiti.hatenadiary.jp
プログラミング作法というカーニハンの名著があります↓コレ*1 プログラミング作法 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博出版社/メーカー: アスキー発売日: 2000/11メディア: 単行本購入: 58人 クリック: 1,152回この商品を含むブログ (203件) を見る エンジニアな人たちにとって、原因不明なバグや想定外の障害に頭を悩ませることは日常茶飯事のことと思います。そのような状況に陥った時、この本が教えてくれるのは、まずテディベアに相談しなさいということでした。以下引用 自分のコードを誰かほかの人に説明して聞かせるのも効果的なテクニックだ。こうすると自分自身インバグが見えてくることが多い。場合によっては説明し始めた途端に気がついて「あ、もういいや、変なところがわかったよ。ごめん、ごめん」などと言って照れくさい思いをする
久しぶりにちょこっと Web アプリでも書いてみよっかな、と調べていたら浦島太郎状態だったのでメモ。環境は、MacOSX 10.7.5 + XCode 4.6.1 です。 環境の構築 Homebrew + Command Line Tools for Xcode パッケージマネージャーです。結構面倒ですが入ってなかったら入れときましょう。 rbenv rvm と似たようなもんだけど、bundler を使う場合に便利そうなので rvm から乗り換えることにしました。 $ rvm seppuku として、rvm アンインストール後、~/.zshrc に書いていた rvm 関連のスクリプトを削除します。 続いて rbenv その他もろもろをインストールします*1。 $ brew install rbenv ruby-build readline openssl $ echo 'eval "$(r
Dropbox もどきの ownCloud を試したので備忘録代わりに日記にまとめておきます。 準備 Ubuntu Server 12.04 LTS (http://www.ubuntu.com/download/server) ownCloud 4.0.4 (http://owncloud.org/support/install/) apt-get で一発インストールしたかったのだけど、apt にあるバージョンは古いので最新のものを自分で入れました。Ubuntu インストール時「LAMPサーバーを追加」しておくと時間節約になると思います。 インストール apt-get install apache2 php5 php5-json php-xml php-mbstring php5-zip php5-gd apt-get install php5-sqlite curl libcurl3
快適な ScanSnap 生活をおくっている昨今ですが、ScanSnap に付属している ScanSnap Organizer という PDF 編集ソフトがかなり便利で使いまくっています。しかし困るのが、ScanSnap 以外でスキャンした PDF は強制的に読み取り専用で開いちゃって、編集できないのであった。 そんなわけでグーグル先生に尋ねたところ PDF のメタデータの「製作者」を「PFU ScanSnap Manager hogehoge」に書き換えれば良いらしい。PDF のメタデータ編集用ツールもあるようだけど、複数の PDF を一括で変換するのが面倒そうだし ruby でスクリプト書いたほうが早い、ということで書きました。 使用方法 下記サイトから、自分の環境にあう ExifTool をインストールします。 http://www.sno.phy.queensu.ca/~phil/
hatena-mode をいれて日記書きやすくなったので、さっそく日記を更新してみる。俗に言う「ハンマーを持つ人には、すべてが釘に見える (If all you have is a hammer, everything looks like a nail.) 」って奴ですね。いまの自分には Emacs のバッファが、全てハテナ日記にみえてます(うそです) 今まで備忘録は、Emacs Muse (←Emacs 上で動く Wiki)でやってたんですが、公開を前提としてないと殴り書きメモになってしまい、自分でもわかりづらい状況だったので、この際、はてな日記を清書用にしようかと。てわけで日記タイトルも変更しました。たまーに ruby をいじるとすっかり忘れてて、思い出すのに3日とかかかっちゃって、ときどき使いたくなるけどあんまり使わない技術ネタを個人的な備忘録としてまとめていきます。 さて今回は、
Titanium を弄っていると、コード修正するたびに Titanium Developer の GUIに切り替えて Launch ボタン(buildする)押さなきゃならず、面倒くさいんですが、GUI なしで build できるようにする ruby スクリプトを書かれてる方がいらっしゃいました。 Titaniumのプロジェクトフォルダにbuild.rbを置いて、ターミナルから ruby build.rb サーバーが立ち上がるので、http://127.0.0.1:9090/run を叩けば、buildが始まります。 ターミナル上でログを見ることができます。 TitaniumのコードをGUIなしでエディタからすばやくbuildする on Ruby こちらを利用して、emacs でファイル保存時に build できるようにしてみました。これ↓ (defun ti-send-run () (se
昨年末に遅ればせながら iPod touch(4G) を買いました。たまに夜眠れない時、布団にもぐりながらポチリポチリと使っていたんですが、最近 Titanium Mobile なる開発ツールの存在を知りました。 Titanium Mobile って何?という方に軽く説明すると、通常、iPhone や Android 向けのアプリケーション開発には Objective-C や Java といった開発言語を使う必要があるんですが、Titanium Mobile を使うと、JavaScript を利用してモバイル用ネイティブアプリケーションを作成できるというもので、たいへん素晴らしいソフトウェアです。 iPod touch 買ったもののいまいち使い道がないんで、早速何か作ってみようと思って試してみたものの、環境構築やら手間取ったので、そのメモを備忘録がてらに書いておきます。ちなみに環境は、Ma
そろそろ新型iPadの発表がありそうな雰囲気です。以前友人が 「iPad はベッドに横になりながらネットできるのがいいんだよね〜」と言ってました。その話を聞いて iPad に全く興味がなかった自分は「そんなんノートパソコンだって出来るじゃん」と強く思ったものです。そこで、寝ながらパソコン段位4段のわたくしが、iPad に対抗するべく寝ながらパソコンのスタイルについてまとめてみます。 寝ながらパソコンのスタイル うつ伏せ、横向き、仰向けパターンがあります。それぞれのスタイルについて検証していきます。 うつぶせ・横向きスタイル うつぶせ・横向きを図にするとこんな感じ↓です。(上からの図) これらのスタイルは、何の道具も使わなくてお手軽です。しかし、うつぶせだと姿勢に若干の無理がありますし、また、横向きの場合はパソコンにかかる負担への注意が必要です。私の使用しているノートPC には 図↑の赤丸の
前回の続き。さくっといきます mkdir tmp views publicして、config.ru ↓作成 require 'application.rb' disable :run set :root, Pathname(__FILE__).dirname run Sinatra::Application application.rbの中身はこんなん↓(マイ雛形) # -*- coding: utf-8 -*- require 'rubygems' require 'sinatra' require 'haml' configure do set :views, "#{File.dirname(__FILE__)}/views" end error do e = request.env['sinatra.error'] Kernel.puts e.backtrace.join("\n")
準備 make するのに必要なものを入れとく sudo apt-get install build-essential zlib1g-dev libcurl4-openssl-dev インストール sudo gem install passenger sudo env PATH=$PATH passenger-install-nginx-module ちなみにデフォルトのインストール先は、/opt/nginx になってたけど、気分悪いから /usr/local/nginx にしておいた。 で、ここにある起動スクリプトをダウンロードして /etc/init.d に保存 設定 nginx へのパス :/usr/local/nginx/sbin/nginx pid file :/var/run/nginx.pid config file: /usr/local/nginx/conf/nginx.
id:dharry:20091207 を見て知ったんですが、VBS の Array って push や pop すら無いのね、、、で、最近、ScriptControl を使って JScript 経由で VBS から JSON をパースする方法を知って「コレ使えば何でもできるんじゃないか?」と思ったので、VBS から JScript の Array を使うサンプルコードを書いてみました。 Set sc = CreateObject("ScriptControl") sc.Language = "JScript" Set xs = sc.eval("new Array()") xs.push("a") xs.push("b") WScript.Echo xs.length '=> 2 For Each x In xs WScript.Echo x Next '=> a '=> b xs.rev
最近、急に自分の周辺で非技術者の人から twitter の話題を聞くことが多くなりました。うーんツイッター流行ってきてるんだなー、じゃなんかネタスクリプトでも書いてみよっかな、、、と30秒ほど考えて「リアルにつぶやいた内容を音声認識してツイッターにポストするか」と思いつきました。 が、しかし、誰でも思いつくことは同じで、あちこちで似たような事をしている人がいたので、やっぱやめるかと思ったものの、クリスマスで暇だし、Mac OSX上でやってる人は見つけられないしで、勢いで音声入力システムの Julius を利用したツイッター投稿スクリプト書いてみました。ちなみに環境は、Mac OSX 10.5.8 + ruby 1.8.7 です。 音声認識システム Julius のインストール まず Julius の cvs から最新のソースをダウンロードしてコンパイル&インストールします。インストール先は
先日作ったサンシャイン牧場用アプリを早速カテゴリ申請してみたんですが、あっさり却下されてしまいました。返事来るの早かったなぁ、さすがミクシィ。ベ○ターとは大違い。あ、正確には却下じゃないんですけど、「カテゴリ申請には、権利者様の許諾が必要」と言われてしまったのでムリポですね。 で改めて自分のアプリを見直して、ホームやプロフィールビューでの動作がない、マイミクとの繋がり機能がない、などなど、単純に完成度が低いのでまぁいっかと思ったわけです。べ、べつにカテゴリ登録して欲しかったわけじゃないんだからね(←ツンデレ) というかそもそも、カテゴリ申請した一番の理由は、開発中になっているとアプリの利用承認を手作業でやらないといけないってことです。これってめっちゃたいへんで、申請して待っている人がいるかと思うと、気になって気になって夜も眠れません。 てわけで強引にミクシィアプリ自動承認スクリプトを ru
最近サンシャイン牧場というゲームにはまっているわけですけど、そのチートツールでサン牧無双ってのがあります。詳しい説明はさけますが、よくできたツールなんですよコレ。あ、念のためいっときますが、どんなツールか試してるだけで実際には使ってないですよ。で、このツール、以前はセッションIDを手動で取得する必要があったけど、現在のバージョンはブラウザからセッションIDを自動で取得できるようになってます。 ここまでよく出来てるんだから、なんとか完全自動化できないものかなぁ、と思って ruby でスクリプト書いてみました。 # -*- coding: utf-8 -*- require 'dl/win32' require 'win32ole' require 'kconv' class SunbokuGuiTest BM_CLICK = 0x00F5 def initialize appname = '
最近、ミクシーのサンシャイン牧場ってゲームにハマっているんですが、その補助ツールを作りたくなり、ミクシーアプリの作り方を勉強してみたので、その記録をメモ。あれこれ検索したところ、以下の手順で作れました。 3ステップで出来るミクシーアプリ 1.ここでデベロッパー登録する。 2.レンタルサーバーに以下のようなファイルを test.xml などにしてアップロードする。 <?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="任意のタイトル"> <Require feature="opensocial-0.8" /> </ModulePrefs> <Content type="html"> <![CDATA[ hello world!!!(←ココの部分が表示されます) ]]> </Content> </Module>
なんとなく暇だったので、ruby でレーベンシュタイン距離(編集距離)を求めるコードを書いてみた。編集距離とは、文字列間の類似度を求める方法のことらしいです。詳しくは、wikipedia:レーベンシュタイン距離を見てください。コードはこんな感じ↓。 # doctest: abc and abc # >> levenshtein_distance("abc", "abc") # => 0 # doctest: kitten and sitting # >> levenshtein_distance("kitten", "sitting") # => 3 # doctest: aaaaa and bbbbb # >> levenshtein_distance("aaaaa", "bbbbb") # => 5 def levenshtein_distance(str1, str2) col, r
ruby の inject って慣れないと少し理解しづらいよなーと思ったので、極力わかりやすい説明をしてみるテスト。 わかりやすいかもしれない説明 さて、1 から 10 までの合計を求めるこんな↓コードがあった場合 sum = 0 (1..10).each {|i| sum = sum + i } p sum # => 55 inject を使ってこのよう↓に書けます。 p (1..10).inject(0) {|sum, i| sum + i } each と inject でどのように書き変わってるかを図で示すとこんな↓感じ。 injectの引数 0 は、ブロックローカルな sum 変数の初期値になってます。で、ブロックの実行結果の値が sum に代入されて、2回目以降のループを実行します。ループしている間の、各変数とブロックの中身はこんな↓感じ。 sum i ブロックの中身(sum
去年もMacBookのHDD交換したし、SSDとはいえHDD交換なんて、朝飯前に赤子の手をひねるようなもんだろ、、、とか思ってたら思わずハマったので、ここで愚痴ってみる。 作業してるところ とりあえず、現在のHDD外してと、、、↓外したところ んで、マウンターにSSDつけて押し込みました。なんかちょっときついな?ちょっと大きいのかな?とか思ったけど無視していれる(コレが悲劇のもと)。で、電源入れたら認識せず、、、 おかしいな?うーん、元のHDDに戻してみよう、、、↓戻したところ あれ?認識しない、、、(30分悩む) さて、賢明な皆さんは既にお気づきだと思いますけど、HDDの上と下を間違えたんですね。気がつかずに無駄に時間を喰いました。しかし話はこれからです。正しい方向にHDDを入れてもやっぱり認識しない。 うーん、、、なんで? よくよくMacBookのHDD挿入口をのぞいてみたところ、奥の
アメーバブログをみてて、画像だけいっぺんに見たいなーと思い、ついカッとなってスクリプトを書いてしまった。別に後悔してないので公開してみる。 インストール rubyという言語で書かれたスクリプトなので、まず(面倒なので以下略)で、スクリプト本体は↓ここに置いてあります。 http://code.google.com/p/kenkiti/source/browse/trunk/ruby/ameblo_downloader.rb mechanize を使ってるので、sudo gem install mechanize してください。ちなみに、mechanize のバージョンが0.8.5 以上じゃないと動きません。HTMLパーサーに Nokogiri 使ってるんで、、、。 使い方 /Users/kenkiti% ruby ameblo_downloader.rb --help Usage: ame
ruby から graphviz をいじれると聞いたので色々と遊んでみました。 インストール sudo port install graphviz sudo gem install ruby-graphviz 日本語の問題 graphviz で日本語を使うには、OSX の場合 fontname に osaka と指定しないとダメっぽい。最初わからずにはまりました。そんなこんなで無事に日本語も出せたので、試しにバーチャファイター5Rの人物相関図を書いてみた。 # -*- coding: utf-8 -*- require 'rubygems' require 'graphviz' GraphViz::new("G", { :type => "digraph", :use => "dot", :output => "png", :charset=>"utf8", :file => "vf.pn
PythonにもBase64モジュールあるよ。こんな感じ。 >>> import base64 >>> base64.b64encode('rocky') 'cm9ja3k=' >>> base64.b64decode('cm9ja3k=') 'rocky' >>> お手軽だなあ、、、
昨日の続きです。Graphviz で何か面白い事を出来ないかなあ、と考えて、ミクシーのマイミクリスト相関図とか、エログサイトのサイト間リンクを可視化とか色々考えて作ってみたりしたものの、どれもありふれてるネタのような気がして今イチな感じ。 で、、、今日ふと旧友に会ったら、最近 Perfume を聞いてる、という話を聞きました。そこで、おーそうだ歌詞を可視化(ダジャレ)してみたら面白いんじゃないか(←ダジャレが)と思いついたので、早速作ってみた。 コードはこんな感じ。 # -*- coding: utf-8 -*- require 'MeCab' require 'kconv' require 'rubygems' require "graphviz" c = MeCab::Tagger.new("-O wakati") lyrics = open(ARGV[0]).read.toutf8
元々は、ruby on rails を覚えようと思ってたんですよね。しかし rails の勉強は見事に挫折しました。個人的に、どうもフレームワークの使い方の勉強ってのが楽しくなくて。や、仕事でならどんなフレームワークでもちゃんと覚えますけど、趣味プログラミングだとあまりやる気が起きず。。。 で、既存のフレームワーク使うのが嫌なら自分で作っちゃえ、とばかりに、今年の2月くらいから、rack を使って簡易 web フレームワークをぼつぼつ調べながら作ってたんですが、いまいちな出来&飽きたのもあって中途半端なところでほっぽって置いてました。 しかし、ここのところ色々と話題になってる、えがちゃんって人を見て、(出来はともかく)やっぱとにかく手を動かすべきだよなあ、と思い考えを改め重い腰をあげて作る&公開してみます。 ちなみに自分は、python 製の web.py っていう web フレームワーク
昨日の続きです。 # -*- coding: utf-8 -*- #! /usr/bin/env ruby require 'rubygems' require 'detector' require 'RMagick' file = ARGV.shift model = '/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml' raise "Arguments error" unless file raise "File not found: #{file}" unless File.exists?(file) raise "File not found: #{model}" unless File.exists?(model) d = Magick::Draw.new.stroke('tomato').
OpenCV を Macbook に入れた作業備忘録です。 OpenCV とはなんぞや?という方は、wikipedia: OpenCV を見てください。去年あたり、ギークな方達の間でパターン認識による顔検出が流行ってたアレです。今更ですが、自分もこれで遊んでみようと思ったわけです。 まず、OpenCV を入れます。 $ sudo port install jpeg $ sudo port install libpng $ sudo port install tiff $ wget http://downloads.sourceforge.net/opencvlibrary/opencv-1.0.0.tar.gz $ tar zxvf opencv-1.0.0.tar.gz $ cd opencv-1.0.0 $ ./configure LDFLAGS=-L/opt/local/lib CP
あ、タイトルに釣られてココ来ちゃった人すいません、たいした事書いてないです。このエントリーは、突発的に perl をやりたくなり、Macbook で CPAN を便利に使えるようにした、単なる作業備忘録です。ホッテントリメーカーを使ってみたかっただけなんです。 以下、個人的な備忘録。 まず、port を使って必要そうなものを入れておく Users/kenkitii% sudo port install gnupg ncftp wget libxml libxml2 CPAN で 履歴や補完が出来るようにする cpan> install Bundle::CPAN cpan> reload CPAN cpan> o conf (ここでTABを押す) applypatch commandnumber_in_prompt gzip make_arg patch tar_verbosity auto
形態素解析で何かおもしろいネタはないかと探していたところ、以下のページを見つけました。 TF-IDFと検索APIでキーワード抽出 http://nais.to/~yto/clog/2005-10-12-1.html キーワード抽出アルゴリズムのTF-IDFは、コーパスという辞書ファイルが必要で試してみたいけど面倒だなあ。。。と思っていたわけですが、検索エンジンに頼れば辞書の必要なし!!なるへそ賢い! で、Pythonで書いてみた。ソースはこれ。 自分のPCには青空文庫とかのテキスト形式の小説がたくさん保存してあるので、このスクリプトを使ってこれらの小説のキーワードを抽出してみることにします。 あ、でも、勝手に小説解析とかしちゃっうと著作権とかやばかったりするかもしれないので、小説のタイトル等は伏せさせて頂きます。ご了承ください。 以下は、解析した結果です。 単語 TF-IDF 露出 174
id:riocampos2さんの日記から、トラックバックをいただいたので見に行ってみたところ、pythonを使って気象庁から降水量や気温を取得して、はてなグラフに自動でポストしたいそうな。 ちょっと考えてみたところ、rubyで書いた方が楽そうだったので、rubyで書いてみた。 #!/usr/bin/env ruby # -*- coding: utf-8 -*- $KCODE='u' require 'kconv' require 'ostruct' require 'date' require 'rubygems' require 'mechanize' require 'hpricot' require 'hatena/api/graph' HATENA_ID = '****' HATENA_PASSWORD = '****' def get_yesterday_spots_data
ネタがないので昔書いたスクリプトを貼ってみます。 mixiの更新情報をRSSで取得したいなーと思って、mixipressを使ってみたところ動かなかったので、mixi station用APIを使って簡単に書きました。認証にはcookieを使ってます。 #!/usr/bin/env python # -*- coding: euc-jp -*- import urllib, urllib2, cookielib username = 'mixiのメールアドレス' password = 'mixiのパスワード' mixiid = 'mixiのid(プロフィール欄にある475205みたいな数字)' cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addh
次のページ
このページを最初にブックマークしてみませんか?
『Programming Must Go On』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く