サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPad Air
karasuyamatengu.hatenadiary.org
postgres 9.3にはjsonがネィティブにサポートされている。json内の値をアクセスしたりインデックスできる。 psql (9.3.0) Type "help" for help. # JSON型! yoyodb=> CREATE TABLE publishers(id INT, info JSON); CREATE TABLE # JSON型をインデックス!! yoyodb=> CREATE INDEX ON publishers( ( info->>'name' ) ) ; CREATE INDEX yoyodb=> insert into publishers (id,info) values (1, '{"name":"foo"}'); INSERT 0 1 yoyodb=> insert into publishers (id,info) values (2, '{"n
このURLを開いてソースを見てもらいたい: http://lcamtuf.coredump.cx/squirrel/ HTMLソースのコメントの中にJPEGデータが埋め込まれている。 そして、画像リンクは同じURL… ソースをよく見てみるとHTMLタグの前に短いバイナリシーケンスがある。多分JPEGのヘッダーのコメント開始までの部分だろう。だとすると、このHTML・JPEG兼用ファイルはJPEGのコメントのなかにHTMLが入っていて、そのコメントの中にJPEGのデータが入っている二つのフォーマットが混った入れ子型ファイルってことになる。可愛いハックだ。
paramikoというpythonのsshライブラリで遠隔マシンの操作が自動化できる。 hello paramiko import paramiko transport=paramiko.Transport( ( 'takao3' , 22 ) ) transport.connect(username='tengu', password='xxxx') c=transport.open_session() c.exec_command('ls hoge > /dev/null') if c.recv_exit_status()==0: print c.makefile('rb', -1).readlines() else: print c.makefile_stderr('rb', -1).readlines() 接続 transport=paramiko.Transport( ( 'ta
f-secureがFlameの凄さを指摘している: http://www.f-secure.com/weblog/archives/00002383.html ユーザ監視 keyloggerとscreengrabberをもつ 暗号化通信 SSH、SSL、LUAライブラリを装備 フルテキスト監視 オフィス、PDF、Autodeskファイルなどのドキュメントをディスク・ネットワーク上で発見、テキストを抽出しそれをsqliteデータベースに保存。 盗聴機能 マイクロフォンをオンにして会話をオーディオファイルとして保存。 地域情報 ディスク・ネットワーク上で画像ファイルを探しそこからGPS情報を抽出。 写真がとられた場所を保存。 電話も Bluetoothで接続されたスマホからアドレス帳を盗み出す 隔離されたマシンからも… このように集められた情報は暗号化されたSQLiteデータベースとしてUSB
Graphiteは「スケーラブルなエンタープライズ向けリアルタイム・グラフ・システム」だそうだ。これを使うと何がいいのかは別のポストでまとめるとして、インストールの手順をメモっておきたい。 これがサイト http://graphite.wikidot.com/ 構成 graphiteはdjangoアプリによるフロントエンドとcarbonというバッケンドから構成される。carbonは独自のプロトコル(何でhttp使わないのか、スケーラビリティーの為か)でグラフ表示するデータを受ける。ウェブアプリはcarbonが管理するデータをグラフとして綺麗に見せる。グラフエンジンはcairo。依存モジュールが多くインストールはちょっと面倒なので整理してみた。 graphite関係 https://launchpad.net/graphiteで入手 graphite-web: graphiteのフロントエン
このようなHTMLで広告を表示するとしよう: <div class="ad"><a href="..."><img src="..." /></a></div>この画像リンクの部分をページロードする度に次のHTML断片の一つに入れ替えたい。 <a href="/redirect?dest=FOO"><img src="/img/FOO.png"></a> <a href="/redirect?dest=BAR"><img src="/img/BAR.png"></a> <a href="/redirect?dest=BAZ"><img src="/img/BAZ.png"></a> 高速化のためにキャッシュしておいたHTMLを、一部を書き換えるために再び生成するのは効率が悪い。HTMLの一部を前もって用意された幾つかのHTML断片の一つにおきかえるという簡単な操作なので、スクリプト言語によ
# 関数定義の雛形。Trueのexpressionを後で置き換える。 # ここで、string代入してもいいが、ASTのノードを置き換えた方が安全そうな気がする。 >>> defun=""" def foo(num): return True """ ... ... ... >>> # ASTにパースする >>> x=ast.parse(defun, mode='single') >>> x <_ast.Interactive object at 0x7f963f9c1950> >>> expression='num==42' # ASTでTrueにあたるノードを上の式に置き換える。 # body,valueのコンビネーションは試行錯誤でみつける。 # ASTをダンプする機能があったら簡単に見付かるだろう。 >>> x.body[0].body[0].value=ast.parse(exp
多くのプログラミング言語が「このファイル」を変数__FILE__で教えてくれる。__FILE__を参照したコードを含むソースファイルのパスが返ってくる。この便利な機能はgnumakeにない。しかし、MAKEFILE_LISTという変数から現ファイルを推測できる。 config.mkに THIS_FILE=$(filter %config.mk,$(MAKEFILE_LIST)) とするとTHIS_FILEがconfig.mkのパスを値として持つことになる。ただし、「config.mk」が唯一この名をもつMakefileであることを前提とする。 このハックを発見していい気になっていたら、JGCがすでに丁寧に解説しているのを発見: http://blog.jgc.org/2007/01/what-makefile-am-i-in.html どうやらMAKEFILE_LISTの最後の値が現mak
hoge=foo print-vars: @$(foreach v,$(.VARIABLES),$(info $v=$($v))) foreachで.VARIABLESが持つ全ての変数名をinfoで出力する。$($v)は$vという名の変数の値の参照だな。これだと環境変数やdefault,automatic変数も出力してしまう。これらを排除して「普通の変数」をは下のリンクを参照。 出力 $ make print-vars | sort %D= # 訳のわからんものが色々ある… %F= *D= *F= +D= +F= .DEFAULT_GOAL=all # defaultターゲットをallじゃなくすこともできるようだ。 ... @F=print-vars # 現ターゲットか。 AR=ar ARFLAGS=rv AS=as CC=cc CHECKOUT,v=+co print-vars CO=c
まとめ: ロカールエコーや接続再開は快適 サーバのfirewallにUDPポートを開けなきゃいけないのが面倒 セキュリティには未知の不安が残る (下の@m_bird氏のコメント参照) MOSHを紹介したところ大反響だった。反応をまとめてみる。 快適 sshからmoshに変えるとレスポンス爆速になった。 @ichyo 入力でもたつかないの素晴らしい @ebith セキュリティー大丈夫? どうやって安全性を確保しているか見てからにしたいな @hmori udpでちょっぱや☆ ssh代替プロトコル!が話題になってるけど、セキュリティ的に大丈夫なのかな?という不安が。sshは、枯れててセキッキュア!だから皆使うんであって……。 @m_bird firewall開けなきゃいけないの? mosh気になるけどFW開けるのがちょっとだけ気が引ける。@fujya その他 かなり興味深いけど、肝心なiOS/A
Quine の圧縮ファイル版のつくりかたをCox氏が種明かしする。 http://research.swtch.com/zip なんと次のようなファイルを作ることが可能なのだ: $ gunzip < r.gz > r $ cmp r r.gz $ 内容 「turtles all the way down」の逸話 「the way down」テーマのユーモラスな画像 Quineの歴史とpython, scheme, go言語による実例 Lempel-Zivの仕組み zipフォーマットレベルでロジックを解説 自己複製するファイル実例: r.gz r.tar.gz r.zip これらを生成するgoプログラム こんな難問を娯楽とするぐらいでなければ偉大なハッカーにはなれないんだろうか… いつか理解したいポスト: http://research.swtch.com/zip
http://mosh.mit.edu/ ローミング可能 断続的な接続でも平気 ローカルエコーで快適なレスポンス などの機能をそなえたSSH代替ターミナルソフト。その名も「モッシュ」 iPhone/iPadでウロウロしながらサーバ作業をするのを想定しているようだ。ドキュメントやパッケージの充実度からしてもかなり高質のプロジェクト。こいつら本気でSSHを越えようとしている。 こんな能書き IPが変っても大丈夫 スリープ後もターミナルが生きている 遅いリンクでもローカルエコーにより快適 要は素早く打ち込んでいるときにスクリーンが止っちゃうことがない フルスクリーンモードでも有効 サーバ側と同期化されていない入力はアンダーラインで記される ルート権限がなくてもサーバのインストール可能 サーバは一般プログラムとしてインストールして、それをSSHで立ち上げる SSHをinetdとして使っている感じだ
foo=dict(bar=42)がある場合、いちいちfoo['bar']など書かず、JavaScriptのようにfoo.barと書きたい。 pythonはこういうことを簡単にさせてくれる: class dotdict(dict): __getattr__ = dict.__getitem_http://odiak.net/blog/post/1618 あるいは class Struct: def __init__(self, **entries): self.__dict__.update(entries)http://norvig.com/python-iaq.html でも上記のやりかただと、この機能は一つの辞書で終ってしまい、オブジェクトグラフをdot表記で辿ることはできない。 foo=dict(bar=dict(baz=42))とある場合、foo.bar.bazとアクセスするにはも
普段あまり意識しないしないlibcだが、カーネルの門番とも言える重要なコンポーネントだ。Linuxで標準のlibcはGNU libc、略してglibc。最近このglibcのsteering committeeが解散した。これをうけてlwn.netのJonathan Corbetがglibcの歴史をふりかえる。 http://lwn.net/SubscriberLink/488847/cb91a5cc3d179f3c/ とても良く書けている記事なので原文を読むことをすすめる。以下、面白いなと思ったところをいくつか紹介。 フォーク FSFのプロジェクト管理に嫌気がさしたLinux開発者が90年代前半にlibcをフォークしていたとは知らなかった。当時のディストロたちは「Linux libc」と呼ばれるバージョンを使っていたそうな。 90年代半ばからUlrich Drepperがこつこつ開発する。
嫌い好きの投票数の合計をユーザ数と見立てた人気度グラフ http://attractivechaos.github.com/HN-prog-lang-poll.png 上のグラフを見るとHNの読者層の使用言語として納得がいく。ノーマライズされた好き投票数を見るとハッカー向けの言語が上位をしめている。これも納得。下位を見ると時代遅れの言語のなかにJavaが…。 仕事の制約で否応なしに使わなければいけない言語が右半分によった感じだ。一方、個人プロジェクトやスタートアップで言語が選択できる状況で使用されているのが左に見られるものだろう。 このなかで唯一「普通の仕事」で使える(少なくとも米国では)Pythonが断トツトップだというのがこの結果で一番面白いところだ。実用できるハッカー言語。プログラムの組みやすさを目的としたVan Rossum氏のもくろみが当ったということだろう。 Clojureは難
「checked out branch」を「bare repo」に変換することによって「refusing to update checked out branch」などのエラーが出ないようにできる。 $ git push origin master ... error: refusing to update checked out branch: refs/heads/master error: By default, updating the current branch in a non-bare repository error: is denied, because it will make the index and work tree inconsistent error: with what you pushed, and will require 'git reset --
http://news.ycombinator.com/item?id=3748961 Actionscript Ada Assembly C C++ C# Clojure Cobol CoffeeScript ColdFusion D Delphi Erlang Forth Fortran Groovy Haskell Java JavaScript Lisp Lua Objective C OCaml Pascal Perl PHP Python Rexx Ruby Scala Scheme Shell Smalltalk SQL Tcl Visual Basic Other グラフ生成コマンド w3m -dump http://news.ycombinator.com/item?id=3748961 \ sed -n '/so we can do some correlation/,
「好きな言語は?」というアンケートのページ http://news.ycombinator.com/item?id=3746692 から。 Actionscript Ada Assembly C C++ C# Clojure Cobol CoffeeScript ColdFusion D Delphi Erlang Forth Fortran Haskell Java JavaScript Lisp Lua Objective C OCaml Pascal Perl PHP Python Rexx Ruby Scala Scheme Shell Smalltalk SQL Tcl Visual Basic Other Groovy グラフはこんなコマンドで生成 w3m -dump 'http://news.ycombinator.com/item?id=3746692' \ sed -n
このシグモイド曲線を見てほしい。 趣味で営んでいるサイトにグーグルから来るユーザ数(オーガニックトラフィック)の変遷だ。一年かけて5%から26%に上昇している。ユーザが増えているのはページランクが上昇しているからだ。 このサイトはこの期間全く放棄状態だった。更新もしていなければSEO活動もしていない。ただ、内容が有益なものらしくユーザの方々からリンクは頂いている。このような被リンクがページランクに大きく貢献するのだが、これらの殆どは一年以上前にはられたものが多い。 つまり、このサイトからのグーグルへのシグナルは一年以上凍っていることなる。グーグルは一年をかけシグナルを見ながら妥当なところまでページランクを上げ、今のところに落ち着いたという感じだ。 「これぐらいの批評のサイトなら月2万ぐらいのユーザを送ってもいいだろう」と判断する素材があってもグーグルはそれを実践するのに一年かけている。瞬時
http://ycombinator.com/rfs9.html RFS 9: ハリウッドを殺せ ハリウッドは全盛期を過ぎた。(カメラフィルムやタイプライターのような)普通の産業なら穏かに20年ほどかけて停滞していくだろう。しかし、これは普通の産業ではない。この産業を動かす連中はかなり意地悪で政治的コネクションも強いので、堕ちていく過程で市民の自由や世界経済にかなり打撃をあたえうる。だから、彼らの終焉を早めた方がいい。 映画やテレビと競争するスタートアップに融資したい理由の一つがそこにあるが、これが主な理由ではない。このようなスタートアップに融資する理由は世界をSOPAのような法律から守るためではなく、SOPAがハリウッドが死にかけているという事実を我々に気付かせたからだ。このような手段を使うということは死にそうだからに違いない。もし映画やテレビが伸びつつあるなら、彼らはその成長に意識を集
JavaScriptの作者ブレンダン・アイク氏が概念実証として作ったJavaScriptによるJavaScriptインタプリタが有志によって復活された。 https://github.com/mozilla/narcissus このNarcissusは「meta-circular evaluator」ってことになる。ホスト言語の機能を使うことによって安易(?)に実装された言語のことだ。SICPでschemeによりschemeやlogoを実装するあれだ。なんかかっこいい肩書だ。 JavaScriptの新機能をプロトタイプするのが目的だそうだ。pypyが最適化のためにPythonでPythonを実装したのと同じ位置付けになる。 SpiderMonkeyは(少くとも初期は)小さくて理解できる楽しい実装だった。そういえば、このブログの最初のポストもSpierMonkeyネタだったな。
グーグルはChromeブラウザをプロモートするために、サーチエンジン部門が駆逐しようとしているスポンサードポスト・キャンペーンを展開した。これはターゲットサイトにリンクを張るポストを支払いと引き換えにブロガーなどに書かせるというものだ。この記事によると、グーグル自身の有料リンクガイドラインに違反する行為になる。 http://searchengineland.com/googles-jaw-dropping-sponsored-post-campaign-for-chrome-106348 searchengineland.comのDanny Sullivan氏の分析によると、グーグルはChrome部門の広告活動をガイドライン違反とみなし、chromeサイトwww.google.com/chromeを格下げにした。 http://searchengineland.com/google-ch
gitリポジトリを自動同期しファイル共有やコラボレーションを可能にしようというツール: https://github.com/bazaarlabs/gitdocs ホスティングはgithubやBitBucketなどのサービスを使う。 gitを意識しなければいけないというところで、誰にでも透過的にクラウドストーレッジの使用を可能にしたDropboxとはちょっと対象ユーザ層が違うと思う。しかし、技術的ユーザにとってのDropbox代替ツールにはなりそうだ。 gitdocsはgitリポジトリを自動同期しそれにウェブインターフェースを加えただけの比較的に簡単なプロジェクトだ。しかし、そう言ったらgithubだって「gitのホスティングサービス」と簡単に片付いてしまう。 これもしかしたら案外大きくなるかもしれない。 githubやこのgitdocsのように想定外の使用方法が発見されるgitというツー
クリスマス前日にFreeBSDチームが警告を出した脆弱性の解説: http://thexploit.com/secdev/a-textbook-buffer-overflow-a-look-at-the-freebsd-telnetd-code/ 古典的なバッファオーバーフローだ。なんと20年前にインポートした4.4BSD-Alphaのコードベースからずっと居座っていた。OS Xも同じ問題をかかえているらしい。 元記事も言っていたが、このようなバグは静的コード解析ツールで簡単に発見できそうな気がする。 OpenBSDってこういう問題を発見するために全コードを監査するんでしょ? この問題、発見したのかな? それともtelnet自体を削除していても不思議ではない。 これによるとやはり削除されたようだ: http://archives.neohapsis.com/archives/openbsd
Drupal・DjangoからNode.jsに移ったが開発者がnpmモジュールの氾濫問題を指摘している: http://mikkel.hoegh.org/blog/2011/12/20/trouble-in-node-dot-js-paradise-the-mess-that-is-npm/ CSSやJavaScriptなどのアセットを圧縮してくれるモジュールが必要だったので調べてみたら、(推定)100を越える候補が出てきた。 管理されていないものを除外するなどの一次選択のふるいにかけても26の候補。(リストは元記事参照) Djangoなら明かな候補(asset-managers)があるのにNode.jsだと数十の候補を検証しなければいけない。このような時間をさくぐらいなら、自分で書いた方が速いと困惑している。 アセット管理だけでなく、routing、テンプレート、テストなど、Node.j
TortoiseCVSの作者がバージョン管理システムの歴史を各イノベーションがもたらした「驚き」を語りながらふりかえる: http://www.flourish.org/blog/?p=397 以下、自分の体験とごっちゃ混ぜにして要約する。原文を読むことを勧める。 ソースコードをテキストファイルとして保存する! (60年代) これすら常識でない時代があったこということがASCIIの歴史を読むとうかがえるらしい。 人力バージョン管理! (60年代) ソース管理部門にディスクを持っていくとそこのスタッフが顧客用の製品をビルドしてくれた… SCCS: 複数のバージョンを一つのファイルに保存! (70年代) McIlroy先生の“An Algorithm for Differential File Comparison”によって可能になったらしい。 http://en.wikipedia.org/
https://github.com/amoffat/Inspect-Shell 試しにdjangoの開発サーバにシェルを組み込んでみよう。 views.py # -*- coding: utf-8 -*- from django.http import HttpResponse, HttpResponseRedirect data=dict(msg='OH HAI', inspect_shell_imported=False) def inspect_shell(request): """ inspect_shellをテストするページハンドラ GETするとdata['msg']が出力される。 """ # モジュールレベルでインポートするとワーカープロセスじゃなくてその親で # inspect shellが走ってしまう。viewハンドラが呼ばれたときにインポートする # ことによってHTT
https://github.com/gruns/furl インストール $ git clone https://github.com/gruns/furl.git $ cd furl $ ls API.md furl.py furl.pyc LICENSE.md README.md tests/setup.pyなどはない。 python2.7以上 python2.6でも使えるようにしたフォーク:https://github.com/tengu/furl $ python Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from furl impor
このタイトル見ると抽象的でピンとこないがこれを見てほしい: これ見たときはビビった。全部的中。 これはたった30行のJavaScriptで実装されている。 http://oxplot.github.com/visipisi/visipisi.html このリンク先のページの下の「Do the magic」というボタンを押すと自分の履歴が見れる。 各サイトの画像がブラウザにキャッシュされているかどうかをロード所要時間から推測している。 :visitedセレクタによる訪問履歴漏れはブラウザベンダーが対応しているようだけど、画像のロードスピードはユーザの体感スピードを損わずに隠すことはできないような気がする。画面には素早く見せて、JavaScriptのAPIにはゆっくり見せるなんてことしたら、何が壊れるかわからないし。 もしかしてブラウザの訪問履歴漏れの阻止ってのは不可能なのかもしれない。
次のページ
このページを最初にブックマークしてみませんか?
『karasuyamatenguの日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く