サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
shin.hateblo.jp
いわゆるCPAN Authorデビューしたのでその記録。 何作ったのか RNCryptorというAESのベストプラクティス的なファイルフォーマット及びiOSライブラリがあるのですが、 The primary target is Objective-C, but implementations are available in C++, C#, Java, PHP, Python, Javascript, and Ruby. RNCryptor/RNCryptor · GitHub Perl版が無い…ということでRNCryptorフォーマットを取り扱うためのPerlモジュールを作りました。その名もCrypt::RNCryptorです。 余談:暗号化の面倒くさいお話 何故にこんなものを作ったのかというと、最近、Perl・iOS・Androidで共通鍵暗号のAESを扱う機会があったのですが、AE
例のごとくAmon2の実装を眺めていた所、Amon2::Web::Dispatcher::RouterBoomの解読で手が止まりました。使い方さえ分かれば無理に読む必要は無いわけですが、どうにも気になってしょうがないので仕組みを調べることにしました。コードの雰囲気からしてメタプログラミングしているということは分かるので、その辺りから掘り下げて調べた結果を、この記事でまとめています。 パッケージのシンボルテーブル シンボルテーブル パッケージのシンボルテーブルは、パッケージ名に二つのコロンを付けた名前の ハッシュに蓄えられます。 つまり、main のシンボルテーブルは %main::、または短く %:: となります。 同様に、先に述べたネストしたパッケージは %OUTER::INNER:: となります。 perlmod - Perl のモジュール (パッケージとシンボルテーブル) - per
iOSでネットワーク通信をするのは初めてだったのでメモ。 iOS Developer Libraryに公式のチュートリアル(日本語版)があるので、まずはこれをこなすのが良いかと思います。 実験環境: MacBook Air 11-inch, Mid 2013 Xcode 5.1.1 iOS7 (Simulator) 基本 iOSもといCocoaではNSURLConnectionクラスを利用してHTTP通信を行うことが出来ます。このクラスですが、時代とともにメソッドが追加されており、今のところ以下の3通りの手段が実装されています。 initWithRequest:...とデリゲートを使う方法。昔からある方法。 sendSynchronousRequest:...で同期的に取得する方法。 sendAsynchronousRequest:...とブロックで非同期的に取得する方法。 NSReque
Linuxにはprocfsという"/proc"以下にシステム情報をファイルで配置してくれる仮想ファイルシステムがあり、CPUやメモリやプロセスその他もろもろの情報を調べるときに重宝します。 一方、Mac OSもといDarwinは、BSD系をベースにしており、またSUSによるUNIX認定を受けていますが、procfsは無いんですね。どうもprocfsはSUSの要件に入っていないようです。 もっとも、procfsが無くても、CPUのコア数とかメモリ容量とか調べるぐらいなら、アップルメニューから「このMacについて」を押せば概要が見れますし、もっと見たければ「詳しい情報...」を押せばその名の通り詳しい情報が出ますし、さらにもっと見たければ「システムレポート」を押せば「システム情報」というアプリが起動してハードウェアの詳細情報を全部見れます。システム情報アプリ(System Informatio
入門記事書けるようなレベルではありません*1ので、タイトルは釣りです。 諸事情により、Perlのモダンな機能の予備知識0の状態で、突如分けわからないOOPなPerlの開発をちょこっとしたので、その知見をまとめたものです。オブジェクト指向のベーシックな概念については省きます。「PerlでOOPってどうやってやるの?」という人の役に立ったら御の字です。 リファレンス まず、これを何となく理解していないと、どうしようもなさそうです。 導入 Perlのリファレンス(参照)というのは、他の言語と同様、ポインタ的なアレのことを意味してます。Perlは、よくよく考えてみると、 %a = (foo => 'bar'); %b = %a; $a{foo} = 'poo'; print $b{foo}; # 'bar' 普通にやると、実体が代入される(ディープコピー)のですね。でも実際問題、参照使わないと高度
調べても情報古かったり、よく分からなかったり、うーん。 Perlの対話モード、なんて洒落たものは標準では存在しない pythonとかirbとか涙ちょちょぎれるぐらい便利ですね。特にPythonの「デフォルトは対話なんだ」という姿勢には感服です。 ではPerlは?というお話ですが、ググると色々あるようではあります。 デバッガを使う perl -de 0 psh perlsh (Term::ReadLine::Gnuから抽出?) pirl (Shell::Perl) re.pl (Devel::REPL) などなど。ググるとperlshの情報が多いようですが、結論から言うと、re.plというのが一番イマドキのようです(?)。re.plはDevel::REPLで入るらしいのでCPANから入れればよいのですが… $ cpanm Devel::REPL ... $ re.pl Failed to l
Cocoaのマルチスレッド機構について解剖してみました。 実験環境 MacBook Pro Retina, 13-inch, Late 2013 OS X 10.9.2 (Mavericks) NSThread?時代はGCDでしょ! Cocoaには、GCD(Grand Central Dispatch)という新しい並列処理APIが入り、今はこちらを積極的に使うことが推奨されています。とはいえ、CocoaのベースとなっているのはCocoaスレッド(NSThread)なので、NSThreadとNSRunLoopに関する理解は、Cocoaのプログラミングをする上で必須だと思います。 ということで、この記事ではNSThreadを中心に掘り下げていきます。 NSThreadの基本 NSThreadの使い方を簡単に説明すると、適当なクラスに別スレッドで処理するメソッドを用意して、それを適切にinitW
Cocoaの並列処理(GCDとNSOperation/NSOperationQueue)に関するまとめです。この記事ではいわゆる「スレッド」については扱いません。スレッドについては、前に記事を書いたのでそちらを参照してください。 Cocoaのマルチスレッドシステム - $ cat /var/log/shin スレッドによる並列処理からの脱却 スレッドは、歴史のある並列処理のための概念ですが、OSのカーネルの方にも密接に関わりがあるなど、抽象度は低めと言えます。 そこで、Cocoaでは、並列処理のための抽象度の高いインターフェースが提供されるようになりました。それがGCDとNSOperation/NSOperationQueueです。これらを使えば、スレッドを何個作成してタスクをどのように実行するか等の細かいことは、ランタイム側が全て決定してくれるので、ユーザは、並列処理したいタスクを定義し
ここ数日、Amon2を解読していたのですが、結局PSGI/Plackをちゃんと理解してないと話にならないことが分かったので、PSGI/Plackを一から勉強してみました。ということでその記録です。 PSGI/Plackについて PythonにおけるWSGI、RubyにおけるRack、それに相当するのがPerlにおけるPSGIです。このあたりは、前にまとめましたし、他のところでも語り尽くされているネタですので、ここでは省略いたします。 PlackはPSGIなWebアプリケーションを開発するための汎用的なツールキットです。PSGIサーバーのリファレンス実装も含まれています。PSGIサーバー部分は、StarmanやStarletなど、多くのサードパーティ実装があります。Plack自体がよく出来たライブラリ群なので、Amon2やKossyなど、Plackが提供する機能をベースとして、薄く機能拡張を
今までコマンドライン引数を処理するのにoptparseを使ってきたのですが、optparseは2.7以降は非推奨というか上位互換のargparseを使いましょうねというお達し(PEP389)が出ています。そんなわけで今書いているプログラムに関して移行作業を行いました。 argparseですが、基本的な使い方は、サンプルコードも多い充実したドキュメントがあるので、そちらを参照しましょう。この記事ではハマったポイントを紹介したいと思います。 コマンド不正の時に終了ではなく例外を投げる argparseでは、指定されたコマンドが不正の場合、プログラムを終了してしまうArgumentParser.errorが呼ばれて、プログラムが落ちます。が、REPLで使い方を勉強するにも、ユニットテスト書くにも、exitされてしまうと困ります。正直これは設計ミスだと思います。 ということで対処法ですが、継承して
この投稿は QiitaのPython Advent Calendar 2013 の22日目の記事です。 はじめに 本記事は自分がPyPIに公開できるPythonモジュールを書くために行った調査結果をまとめたものです。が、私自身は未だかつて一度もPyPIにパッケージ*1を登録したことがないことを初めに断っておきます。 イマドキのツール群 配布 distutils setuptools (distribute) 環境構築 easy_install pip virtualenv pyenv, pythonz, pythonbrew テスト unittest2 pytest tox ドキュメント sphinx Read the Docs 以上、適当に列挙してみました。上から説明していきます。 配布 先に配布周りについて整理しておきます。環境構築はこの配布ツール周りの影響を強く受けているため、こちら
def hoge(&block) proc &block end のようにすると、タイトルのwarningが出ます。Rubyでは&の付く変数は def hoge(&block) proc(&block) end のように、ちゃんと括弧で囲むのが推奨されているようです。
この記事は QiitaのPython Advent Calendar 2013 の7日目です。 はじめに 簡単に自己紹介をすると、筆者はOSやHCIを研究しているふりをしている、しがない院生です。現在、修士論文に向けPython+OpenCVでARシステムを構築しています。 来年からWeb系エンジニアとして労働に勤しむことなりそうなので、そろそろAdvent Calendarなどに参加して、技術力を高めなければと思っていた矢先、QiitaのPython Advent Calendarのあまりの過疎っぷりに絶望したので*1、折角なので、ちょうどいじり始めたCherryPyとws4pyについて書いてみたいと思います。 CherryPyとws4pyについてそれぞれ簡単に説明した後、実際にWebSocket通信を行うプログラムを紹介する三部構成となっています。コード多めです。動作はPython2.
Webブラウザ向けの3DCGライブラリであるthree.jsで、3D描画に2D描画*1を織り交ぜる方法を紹介します。これにより、前景と背景に自由に2D画像を描画できるようになり、ゲームのHUD表示などが可能になります。 基本的な考え方 three.jsに限った話ではありませんが、3DCGで2D描画をしたい機会は多い割に、意外と簡単ではないことが多いです。 3DCGで2D描画を行う場合、大きく分けて2つの方法が考えられます。 1. 3D描画と全く別個に描画を行う。 2. 3D描画で適切にカメラやオブジェクトをセッティングする。 1はWebGLなど3DCG支援機能を一切使わない方法です。Webならcanvas要素の前後に適当にimg要素などを配置するだけで擬似的に実現できます。欠点としては、ちゃんと要素が重なるように位置を調整する必要がある点でしょうか。 2は3DCG支援機能を利用した上で上手
「RailsによるアジャイルWebアプリケーション開発 第4版のp.120、David曰く」で解説されてます。 *_urlは絶対パス*1で、redirect_toで用いる*2。 *_pathはルート相対パス*3で、redirect_to以外ではこれで問題ない。特にlink_toなんかでは、無駄な出力が省けるので推奨される。 ちなみに、これらの自動的に宣言される特殊なパスは$ rake routesで確認できます。一番左のカラムに、_url及び_pathを加えればOKです。また、この命名はconfig/routes.rbで決定されるようです*4。 *1:http://.../... *2:HTTPの302リダイレクトの仕様上、絶対パスを使うのが妥当 *3:/../.. *4:今ひとつわかってないから、今度config/routes.rbについてもまとめようかな
以前こんな記事を書きました。 Objective-Cのプロトコルとデリゲートのまとめ - $ cat /var/log/shin 現時点で、こんな場末のブログで唯一ブクマが多い記事なのですが、その文末で、 次は、カテゴリについて勉強したいと思います。 Objective-Cのプロトコルとデリゲートのまとめ - $ cat /var/log/shin なーんて書いてから、はや9ヶ月超。ようやくカテゴリについて調べる機会が来たので、まとめてみます。 座学編 クラスの基本 まず初めにクラスの基本を整理しておきます。 // ex1.h #import <Foundation/Foundation.h> @interface MyClass1 : NSObject - (void)publicMethod; @end // ex1.m #import "ex1.h" @implementation
何番煎じ変わりませんが、WSGI/Rack/PSGIに関して、何でこれらが必要とされるようになったのか、歴史的経緯を踏まえて色々調べたので、記録しておきます。ただし、特に歴史的な話に関しては、ネットで自分が納得できるまで探りはしましたが、正確性を欠くかもしれません*1。間違っていたらご指摘下さい。 実行環境の多様化とWAFの乱立 結論としては、この見出しがWSGI/Rack/PSGIが生まれることとなった動機といえます。 実行環境の多様化 私が小学生ぐらいの頃、20世紀終盤でしょうか、通信速度も今に比べ格段に遅く、多分スケーラビリティなんて考えも浸透していなかった頃、WebアプリといえばCGIでPerlな時代がありました*2。そんな頃の実行環境はレガシーなApacheとmod_cgiでした。 しかし、時代と共に、数多くのリクエストを捌くことが要求されるようになると、CGIでリクエスト時に毎
Jadeで取得したHTMLを、underscore#template()で扱おうとした時に、ハマったのでメモを残しておきます。 問題 例えば、 a(href="<%= url %>") <%= name %>というJadeスクリプトがあった時、出力は <a href="<%= url %gt;"><%= name %></a> となります。そのため、Jadeの属性値にunderscore#templateの評価式をいれこむと、上手くいきません。 解決 !=を使います。 a(href!="<%= url %>") <%= name %> 参考 https://github.com/visionmedia/jade/issues/198 全く同じ状況のissueが上がっており、visionmediaの中の人が解決してくれたようです。
Mac上にOpenCV 2.4の環境を整えたので、そのメモです。 導入時の環境 Mac OS X 10.8.4 (Moutain Lion) OpenCV 2.4.6.1 Homebrew 0.9.4 OpenCVの導入 Homebrewを使います。 $ brew tap homebrew/science $ brew install opencv ... ==> Installing opencv ==> Downloading http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.5 ######################################################################## 100.0% ==> Downloading patches #####
Pythonを使う上で、withステートメントは、やはり見逃せない機能の1つであると思います。 Python2.5〜3.xまで網羅しているようにしたつもりです。 基本 まず、一番身近なファイル操作の例を載せておきます。 with open("...") as f: print(f.read()) これは、以下と同等です。 f = open("...") print(f.read()) f.close() withステートメントを使うと、withを抜けた時に、自動的にf.closeされます。 asは必須ではありません。 f = open("...") with f: print(f.read()) これも先ほどのコードと同等です。 withに対応したクラスを作る 使うだけでは理解も深まらないので、作る方も見てみましょう。 withに渡すのは__enter__と__exit__の2つのメソッド
RailsでImageMagickを利用するためのgemにrmagick*1がありますが、インストールにかなり手間取ったのでメモを残しておきます。 Mac OS X Mountain Lion ImageMagick 6.8.0-10 (installed by homebrew) rmagick 2.13.2 1. 一般的な解決法 検索すると出てくる解決策は主に imagemagick - Error installing Rmagick on Mountain Lion - Stack Overflow にあるような、シンボリックリンクを作る方法です。 が、これで解決するかと思いきや全く変化なく、、、厄介なことにもう一つ問題があったので、そちらも紹介します。 2. PKG_CONFIG_PATHを指定する よくよくログをみてみると、 ... checking for sys/types
まえがき その昔、Makefileの書き方という非常にわかりやすいMakefileの入門ページがあったのですが、seiichirou氏の卒業(?)とともにページが消えてしまいました。 私も大変お世話になったページだった、というかこれからもお世話になりそうなので、そこでWebArchiveから引っ張りだしてきたものを、はてな記法で書き直したものがこの記事になります。 元々自分用に書き直したのですが、せっかくなので公開してみます。 なので、以下の著作はseiichirou氏に帰属します*1。 Makefileの書き方 はじめに ここでは、Makefileの中でもGNU makeにかぎって説明します。 makeって何? ソースファイルを分割して大規模なプログラムを作成していると、コマンドでコンパイルするのが面倒です。また、一部のソースファイルを書き換えただけなのに全部をコンパイルし直すのは時間の
立体音響(3D Audio)を試したかったので、OpenALをインストールすることにしました。 環境 Mac OS X Mountain Lion Homebrew 結論 OSXにはOpenALが標準装備されているようなので、OpenAL(OpenAL Soft)を別途入れる必要はありません。 OSX標準のOpenALを利用する時はgccのオプションに"-framework OpenAL"と指定します。 OpenALとは OpenGLのサウンド版です。思想も同じで、OpenAL自体は実装ではなくAPI(インターフェース)で、それに従っていればOpenAL互換のライブラリと名乗ることができる、というわけです。 OpenALの本家本元ですが、元々openal.orgというサイトがあったのですが、今はhttp://connect.creativelabs.com/openal/default.a
iPhoneアプリで一儲けしたくなっちゃったからObjective-C頑張っちゃうZO☆ とかいうドン引きな冗談はさておき、なんとなく勉強し始めたObjective-Cについての徒然なるまとめです、真面目です。C++がそれなりに出来るObjective-C初学者*1が対象です。体系的に学習してないですし、言語仕様もほとんど見てなく、何が言いたいかというと要ツッコミ。 書き溜め書き足ししていたら、全体的に大変なことになってしまいましたが、ゆるふわなのでご愛嬌。実は、一番ためになるのはリンク部分かもしれません、Let [us goTo:最後の方]。 Objective-Cとかいう言語 Objective-Cは、C言語にぐちゃぐちゃプリプロセッサ的なものを追加した珍妙なクソ言語(失礼*2)です。 トラップの宝庫C++とは全く別物だと捉えるのが正解ですが、実はC++も混ぜられる*3とのことで、中二
Objective-Cの@protocol、@required、@optional、そして所謂Protocol-Delegateパターンの基本のまとめです。Javaが普通程度に出来る人を対象としてます。(Objective-C歴1週間程度なので要ツッコミ) サンプルコード 百聞は一見にしかず、ということでサンプルコードです。 まずはヘッダex.h。本当はクラスごとに分けるべきですが、面倒なので一纏めにしています。 // ex.h #import <Foundation/Foundation.h> @protocol MyProtocol1 @required - (void)foo; @optional - (void)bar; @end @protocol MyProtocol2 - (void)hoge; @optional - (void)piyo; @end @interface
Railsでは、app/assets/以下に各種JavaScriptやCSSなどを配置しますが、巷のJavaScriptライブラリには、JavaScriptとCSSと画像がセットになっているケースがしばしばあります。 この時、特に厄介なのがCSSと画像です。CSS内で背景画像が相対URLで指定されていると相対位置を変えることができないので、位置関係に気を使わなければなりません(JavaScriptがimgを出力するような場合も同様*1)。 というわけで、どう配置するのが良いか考察してみました(Rails3.1以降対象*2)。 "/app/assets/"以下にバラバラに配置する まず考えられるのは、非常に愚直ですが、JavaScript・CSS・画像をそれぞれ、 /app/assets/javascripts/ /app/assets/stylesheets/ /app/assets/im
Androidでは、いくつかネットワーク通信する方法があるようですが、org.apache.http パッケージの DefaultHttpClient とかを利用する方法が比較的一般的なようです。 基本的に同期通信なので、データを取得の際にはスレッドを立てるのが良さそうです。 Androidではスレッドを立てる方法もいくつかあるようですが、通常のJavaと同様にRunnableインターフェースを実装して云々するのが簡単でしょう。 ただし、ダウンロード後にGUIを更新したい、というような場合、Activityと同じスレッドでないと例外が出るようになっているので、Handlerを利用する必要があります、、、といつかこれらについてもメモするかもしれません。 手抜きネットワーク通信メソッド ネットワーク通信は例外処理とかが意外と面倒なので、以下のような手抜きメソッドを作って使いまわしてます。 pr
題材として、以下のフィボナッチ数の計算関数を利用します。効率が悪いのはご愛嬌。 fib = (n) -> return 1 if n is 1 or n is 2 (fib n-1) + (fib n-2) alert fib 10 ここで「fib(10)の結果を取得したいが、これ以上fibを使わないため、出来ればfibを消すかローカル変数にしたい」と仮定します。 JavaScriptならarguments.calleeを用いれば alert((function(n) { if (n == 1 || n == 2) return 1; arguments.callee(n-1) + arguments.callee(n-2); })(10)); このようにarguments.calleeを用いてfibすら宣言せずに書けます。 ちなみにStrictモードではarguments.calleeが
_.bindAllは、第一引数に指定したオブジェクトAがあった時、Aがもつ関数プロパティのthisをAにしてしまう関数です。 hoge = { val: "hoge", print: function() { console.log(this.val); }, set: function(v) { this.val = v; }, get: function() { return this.val; } }; hoge.print(); // hoge print = hoge.print; set = hoge.set; get = hoge.get; print(); // undefined (thisがwindowなので) _.bindAll(hoge, "print", "set"); // 指定のメソッドについてbind print = hoge.print; set = ho
次のページ
このページを最初にブックマークしてみませんか?
『$ cat /var/log/shin』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く