サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
ajiyoshi.hatenadiary.org
Elixirというプログラミング言語に、パイプラインマクロ演算子というのがあり、面白いなーと思っていた。お前らElixirとか知らないだろうから、これがどんなものか後で書くとして、Haskellの勉強をしていたら同等のものを実装している記事をみつけ、どうもこれはF#由来であることを知った。 さて、くだらない例だけど、数のリストに何か(map)して条件を満たすものを抜き出して(filter)、最後に足す(fold)みたいなことって、Haskellでは普通たとえば次のように書く(と思う) Prelude> sum . filter even . map (+1) $ [1..10] 30 Haskellなんて知らない人もいると思うので、ほぼ同等のコードをPerlで書くとこうなる use strict; use warnings; use List::Util qw/sum/; my $ans
この記事はVOYAGE GROUP Advent Calendar の12/24分です なんか推敲が間に合わず、12/24に間に合いませんでしたが、今更だします。ごめんなさい。 SICP(計算機プログラムの構造と解釈)と言う本をご存知ですか?私はこのSICPという本が大好きで、社内でも何度も読書会を催しています。なぜ読書会をするかというと、一人で読みきるのは辛い(人もいる)ためです。 この記事では何がそんなに良いのかという説明をします。 そもそもこの本は、MITの6.001という計算機科学講義の教科書としてデザインされ、実際に使われていたものだそうです(今は別な本が採用されている)。 同様の初歩的な計算機科学の教科書の中でこの本が特異だと私が感じるのは、おまじないやお約束を可能な限り廃して、ごく少数の根本的な動作原理のみを仮定して、変数とは何か、関数とは何か、プログラミングするという行為は
<?php $json = array( 'dict' => (object)array(), 'list' => array(), ); //{"dict":{},"list":[]} echo json_encode($json); ぐぐっても見つからなかったが monmonさんの解法を id:tomi-ru さんが改善した。
繰り返しになりますが、妥当性検証は仕様の問題であってセキュリティ対策ではありません。 バリデーションは仕様の問題であってセキュリティ対策ではないとはどういうことか説明します。SQLインジェクションの対策は、1. SQLを文字列結合で作らない 2. プレースホルダを使う です。バリデーションは関係ありません。 簡単な例 Webアプリケーションで郵便番号を指定するフォームを考えましょう。 日本の郵便番号を指定するフォームの設計でよく見るものは大きく分けて2通りあり、上3桁と下4桁を別々に入力させるものと、1つのフォームにまとめて入力させるものです。住所から補完させる設計もありえますがここではおいておきます。 <input type="text" name="postal_code_1"> - <input type="text" name="postal_code_2"> <input typ
東急Ruby会議(#tqrk03)に遊びに行ったら、@tadasyの罠にハメられて無意味に3分LTすることになった。 なんの準備もしてなかったので、空気を読まずに前の記事に書いたHaskellがすげえっていう話をすることにした。 だってRubyわかんねーんだもん。 んで、みんな酒が入った勢いで笑ってたが何一つ意味分からなかったと思われるので、無限ストリームのやつをRubyに移植した。私はRubyまったくわからないので、なんかおかしな書き方だったら教えてほしい。 プログラムだけ書いて力尽きたので、解説が必要な人はSICPを読んでほしい。 class Stream def initialize(car, &cdr) @car = car @cdr = cdr end def car @car end def cdr @cdr.call end def take(n) (n == 0) ? []
言語仕様を見て、これならSICP3章だろうと思ってやってみたら、ほとんどが2行(うち型宣言が1行)で書けてわろた。あとで解説とか書くかもしれないし書かないかもしれない。 module Main where addStream :: Num a => [a] -> [a] -> [a] addStream = zipWith (+) scaleStream :: Num a => a -> [a] -> [a] scaleStream factor = map (*factor) mulStream :: Num a => [a] -> [a] -> [a] mulStream = zipWith (*) integersStartingFrom :: Num a => a -> [a] integersStartingFrom n = n : integersStartingFrom (n
名刺交換とかうざい。 私は営業職とかじゃないからだろうが、 もらっても99.9%電話もメールもしない。 だからここ数年名刺は持ち歩かないことにして、「すいません切らしてまして」ということにしている。 実際に連絡を取る人にとっても、無駄の多い馬鹿げたプロトコルだ。(私はそんなことしないで捨てるが)いちいち名刺を見て氏名と電話番号、メアドを連絡先アプリに手で打ち込むとかやってられないし、OCRかけるとかバカげている。はなから電子データで交換すればいいのだ。 そもそも連絡先交換ならTwitterだのFacebookだののIDでも教えてくれれば十分なのだ。むしろこちらのほうがつぶやきから人となりが分かったりアバターなんかで視覚的な識別が可能なぶん情報量が多い。 というわけで世の中から名刺を撲滅するためのサービスを妄想してみた 機能仕様: スマフォアプリとして実装する Bumpのようなやり方で事前に
@ockeghem「ケン・トンプソンとデニス・リッチーを知らない…」をトリガーとして、ソフトウェアエンジニアが知っておくべき偉大な30人とか誰か書かないかな。もうある? http://twitter.com/ockeghem/status/51110649429889024 適当に挙げてみた。ケン・トンプソンやK&R辺りからの連想なので粒度がまちまち。こういうラインアップだと、チューリングとかシャノンとかノイマンとかはなんか違う感じ。 名前 特に有名なand/or影響が大きい実績 ケン・トンプソン C, Unix デニス・リッチー C, K&R, Unix ブライアン・カーニハン C, K&R アラン・ケイ オブジェクト指向, Smalltalk ダイクストラ 構造化プログラミング ジョン・マッカーシー Lisp (関数型言語) ドナルド・クヌース TeX, the art of comp
SQLインジェクションについて書くときに以下のメッセージを必ず含めて欲しいです。 単にプリペアドステートメントを使え 絶対に文字列結合でSQLを構築しようとしてはいけない IPAの「安全なSQLの呼び出し方」を読むこと なんでこんなことを書くかというと、同僚が献本されてた「プロになるためのWeb技術入門」なる本のSQLインジェクションの項で、SQLインジェクションの対策として以下のように書いてあったからです*1。 a) 値をバリデーションする b) プリペアドステートメントを使う ダメです。間違っています。単に間違っているだけでなく救いがたく間違っています。正しいSQLインジェクション対策はこう書くべきです。 単にプリペアドステートメントを使え 文字列結合でSQLを構築するな イケてない本を書く人はなんで値のバリデーションをプリペアドステートメントよりも先に書くんですか?値のバリデーション
ミクロ経済学的な分析で、「何が起きるのか」を予想するのはそれほど難しくはない。難しいのは「それはいつ起きるのか?」だ。 勝ち負けは存在するけどデバイスとしての良し悪しとかそういうレベルじゃない。 Amazonはコンテンツが売れりゃあいいんだから、本当は端末はなんでもいいし、Kindleなんか無料で配りたいんだよ。 Appleはデバイスが売れりゃあいいんだから、本当はコンテンツはなんでもいいし、音楽やアプリや本なんて無料で配りたいんだよ。 いずれAmazonはKindleを無料で配るだろうと予想していたが、これほど早いとは思わなかった。Amazon.comのプライム会員向けにKindleを無料で提供することにしたらしい。 こうなるのだと予想することは難しくはない。電子書籍リーダーと電子書籍コンテンツはお互いに非常にわかりやすい補完財だからだ。補完財について知りたい人はジョエルスポルスキーから
昨日の記事でKindleの容量制限について触れた。うめ先生に、作品のSSや動作画像をブログに載せてよいかTwitterで聞いていたのだが、以下の通り快諾いただいたので、比較画像を載せてみる。 @ume_nanminchamp うめ先生、Kindle DXで漫画を表示するとどうなるか?的なブログ記事を書こうと思っています。青空ファインダーロックのKindleストア版と高解像度な画像版のSSおよび動作しているKindleを撮影した画像を私のブログにのせていいでしょうか? @ajiyoshi 基本OKです。似るなり焼くなり。ただウチのデータはグレースケールなので、手持ちの単行本をscansnapする場合は、元データがモノクロ網点化されてるのでやや印象が違うかも。 元データは、Kindleストアで売っているもののスクリーンショットと、うめ先生がkindle・iPad比較で掲載されていた画像ファイル
雑感などを書いてみる。 個人的な用途 僕としての使い方は、 SnapScanで自炊スキャンした漫画用のビューア 未翻訳、糞翻訳な技術本を原著で読む 技術本が今すぐほしい時にとりあえず買う まだしばらく、Kindleストアは日本向けにサービスを開始しないと思われる。僕は英語の小説を読む趣味はない(そもそも日本語でも小説は読まない)ので、主にKindleで読むのは技術系の本と新聞、それに自炊物の漫画である。 ハードウェアについて 薄い 片手で持つと意外と重い(525g) 反応速度は予想通りややもっさり でも一度表示されてしまえば綺麗で読みやすい まわりの人に自慢して回った数名の反応を見ると、かなりの割合が画面にタッチしようとした。そういうアフォーダンスがあるのかもしれない。でも僕は本を読むだけの目的であれば、タッチパネルである必要はないように思う。BB2Cという、iPhone向けの2chブラウ
SICPの2章に図形言語というセクションがあって、環境を用意するのが面倒なのでスルーしていた(通常coLinux+gaucheとかDrSchemeとかでやってるのだけど、描画のためにLinux側にgauche+GL、Windows側にXサーバを入れて窓をXで飛ばすとか面倒だし、これ以外の目的に使いそうにない)。 しかし、canvasを使って本文中のSchemeプログラムをJavaScriptで記述してやればできるんじゃないか?と思ってやってみた。 なお土日は本当は月曜SICPのためにambインタプリタを書かなければいけなかったのだが、図形言語にかまけていて予習をやってない。でも単に遊んでいたわけではないんだよというアリバイ工作のためにこのような記事を書いてみる。 SICPではSchemeを使うとはいっても、マクロとかは取り扱っていない。SICPの範囲内で使われるScheme処理系の機能で、
AJITOで酒を飲みながらid:nTeTsと昨日書いた記事についてしゃべっていて、id:nTeTsがこの問題をPerl文字列の内部表現やUTF8フラグに関わる問題と認識している節があった。それは単に間違っていて、この問題はPerl固有ではないしPerl文字列の内部表現などは一切関係ないのだが、まあ混乱しても無理はないとも思うのでその辺について補足してみたい。なお僕はPerl5.8からPerlを使い始めたので、本当の歴史的な経緯などは知らない。現状の仕様からリバースエンジニアリングして歴史的経緯を推測したにすぎないので、誤りが含まれる可能性は指摘しておく。 Encode::encodeとEncode::decodeのシグネチャを仮想的に型付きで表現するとしたら、理想的には次のようになっているべきである。 //decodeはバイナリ(:byte[])から内部表現(:String)への写像 St
ちょっと最近Buzzurlに自作スクリプトか何かで、大量の二重エンコード文字列を含むブックマークが投稿されたので対策のために調べてみたことのまとめ。<追記>id:miyagawaさんのブクマで Encode::DoubleEncodedUTF8 というモジュールを教えてもらいました。調べたら作者もid:miyagawaさん。二重エンコード是正にはこちらを使うようにしましょう。 でもこれ"二重エンコード perl utf8"とかでぐぐったけど見つからなかった…。id:miyagawaさんのブログとかもっと検索に引っかかるべきだと思うのだが。 PerlでUTF8文字列を使うときの原則 PerlでUTF8文字列を扱うならば、Encodeの神であるところのid:dankogaiが何度も何度も口をすっぱくして言っている次の原則に従わなければならない。そうしないとすごく不愉快な目にあう。 入り口で d
ブラウザって重いなーと常々思っていて、重い理由の一つがウィルススキャンのような気がしていたので、ためしにfirefoxのディスクキャッシュを最大0MBにしてみたら多少軽くなったような気がする。 大抵の場合ブラウザは起動直後は比較的軽いが、長時間起動しっぱなしにするとだんだん重くなってくる。 おそらくウィルススキャンソフトはウィルスの挙動を検出するためにファイルシステムへのアクセスをフックしており、長時間起動して大量のディスクキャッシュを抱えたブラウザプロセスが、溜め込んだディスクキャッシュをスキャンして新たにアクセスするかキャッシュを利用するかの判断をしようとして、そのIOがフックされて性能が劣化していくと仮説すれば、一応実際の挙動と整合する。 ディスクキャッシュをオフにしてもオンメモリでのキャッシュは行われているように見える(単にリロードするだけならばキャッシュされた画像を使っているよう
はてブ2の新機能で面白そうなのがあったら、正式リリースまでにパクってBuzzurlに実装して、Buzzurlのようなマイナーソーシャルブックマークもがんがっているんだぜ!とかアピールしようかと思ったけどパクりたくなるような目新しい機能がなくて残念だった。 全文検索機能 数ヶ月前にBuzzurlでもやった。これは必要だと思う。Buzzurlでも好評だった。 ベイジアンフィルタでカテゴリ分け 覚えてないけどBuzzurlでは2年半くらい前にやった。Buzzurlではイマイチな機能だった。はてブでの見せ方(共通ぽいヘッダでタブ表示)はいいと思う。 お気に入り関連の整理 Buzzurlではユーザページがデフォルトで自分とお気に入りユーザの全ブクマがタイムライン表示されるようになってる。Twitterみたいな感じ。これはひそかな自慢なんだけど、Twitter以前にBuzzurlはこういう仕様だった。
例のヨドバシの騒ぎの件。あまり興味なかったのでわざわざ見に行って傷口に塩を塗りこむようなことはしてなかったんだけど、ネットワーク側から見たヨドバシカメラ問題というのを見ると、どうやらDBやらの過負荷じゃなくて、静的HTMLを出してるところの問題ぽいという切り分けをみて、そんなことあるんかいなとおもってヨドバシのサイトを見てみた。以下HTTPヘッダ http://www.yodobashi.com/ GET / HTTP/1.1 Host: www.yodobashi.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 Accept: text/html,application/xhtml+xml,application/xml;q=0.
まったくちがう。節約の問題ではない。 テンプレートメタプログラムの視点からはvtblは『邪魔』なことがある。 実行時のスピードのパフォーマンスの話ではなくて、存在そのものが邪魔になる。 vtblがない方がいいのではなくて『存在してはならない』パターンもある。 Java的考えでは実行時のポリモーフィズムで解決するもののうちのある種のものを C++ではコンパイル時にテンプレートで解決させる(という考え方がある)。 この辺は(あえて悪い言葉を使うと)Java脳のひとには理解できない。 なるほど。テンプレートメタプログラミングですか。 テンプレートメタプログラミング的な所は全然たしなんでいなくて、アッカーマン関数をテンプレートメタプログラミング的に計算させてしてコンパイル終わらないね、みたいなのを試したくらいです。実際のところ仮想関数による実行時の多態とテンプレートメタプログラミングは相容れないで
(追記あり/再追記あり) ブクマ経由で、C++で演算子オーバーロードしたときの演算子決定基準について調べたというのを見たのだけど、書いてあるサンプルコードが演算子オーバーロード以前にちょっとダメだった。 昔書いたテストコードと書いてあるので、今は分かってるのかもしれないけど、ある程度経験を積んだC++プログラマは絶対に(というのは言いすぎでした)virtualデストラクタのないクラスを継承しない(追記やTBやブコメの議論を参照のこと)ので、このサンプルコードを載せて違和感を感じない時点で、演算子オーバーロードをいじるよりもまずはEffective C++を読んだ方がよい。 何がダメか。以下のように、virtualデストラクタがないクラスを継承している。これはダメだ。例え基底クラスのデストラクタですべきことがないのだとしても、継承するつもりのあるクラスにはvirtualデストラクタを作らない
さて、僕は最近ECナビの検索エンジンのリニューアル版を開発しているのだが、これにひとつ付け加えたい機能があった。 それは検索結果に対してさらに価格で絞り込むテキストリンクを表示するというもので、例えばこういったものだ。 価格 すべての価格 JPY 0 - 1000 (717) JPY 1000 - 1500 (464) JPY 1500 - 2000 (531) JPY 2000 - 3000 (526) JPY 3000 - 4000 (309) JPY 4000 - 5000 (175) JPY 5000 - 8000 (250) JPY 8000 - 10000 (70) JPY 10000 - 15000 (90) JPY 15000 - 20000 (57) JPY 20000 - 30000 (43) JPY 30000 - 50000 (40) 何度かAmazonで検索してみ
僕は18才のころから一人暮らししてるので、かれこれ12年も一人暮らししてることになります。 12年というと、今小学6年生の人がせーしだったころから一人暮らししてるわけですが、そんな風に馬齢を重ねた僕が一つ言いたいことがあり、それは「家電の中でもっとも金をかける価値があるのは洗濯機だ」(とりわけ独身一人暮らしでは)という命題です。 人によってはオーディオとかカメラとかPCとかに金をかけてたりします。僕もプログラマなのでPC周りには結構金を使っていますが、それは趣味の領域だし各個人の特殊事情によるわけです。そういうのを除いて一般的に考えるならば、やはり洗濯機が一押しです。 テレビ?DVDレコーダー?ぶっちゃけ必要なくないですか?僕はテレビを見なさすぎて日テレが何チャンネルか忘れました。 冷蔵庫/電子レンジ/食器洗浄機?確かにそれらは便利ですが、独身一人暮らしを長くしているうちに多く作りすぎて腐
ということについて語ってるのをあまり見たことがない気がするので、試しに説明してみます。 ただ、僕は理学部数学科卒とはいえ、大学院に進むでもなく卒業後そのまま就職してしまったドロップアウト組なので、数学を正しく理解しているかというとそうでもなく、むしろ「大学のとき一番がんばったのは何ですか?」と言われたらアルバイトだったりする間抜け学生だったので、存分にまゆにつばをつけて読んでください。あと、有識者の突っ込みは歓迎します。 概ねどんなことをするのか 高校までに習うような数学の対象(:xy平面上や複素平面での四則演算や初等関数や微積分とかベクトルとか行列とか)はすごく機能豊富なものだったことを学び、それらが持っている機能のうち一そろいの一部分だけでも色々な面白い性質を持つことを学んでいきます。 どういう風に学ぶの 常に、定義->命題->証明のサイクルで学びます。定義命題証明定義命題証明定義命題
高校3年生までの範囲でいいから数学がきちんと分かってると、SICPの1〜3章をすごく楽しく読めますよ。いやほんとに。このためだけに12年間算数〜数学を勉強したのだとしても、プログラマにとっては惜しくないと思います。 このご利益は範囲は限定的だけどものすごく現実的で分かりやすいと思うけどどうだろうか、とか思います。 いや、実際数学がどんな風に役に立つのか、なかなか説明が難しいんですよね*1。正直学校で習う5教科のなかで一番役に立ってると個人的には思うんですけどね。 とか↓の記事を読んで思いました。 でも、今の職場*2に行って本当に実感したことですが、「数学は役に立たない」なんて嘘っぱちなんですよね。 けれども、それが嘘っぱちであることが、よりによって当の数学者たち(特に学部生や大学院生)になかなか伝わらない。 *1:それはきっと数学って、あとプログラムも、分かっちゃった人には自明に思えるけど
多分これはあらゆるソーシャルアプリケーションに関して正しい。そういう一極があるソーシャルアプリケーションは単純に言ってスケールしない。その一極はキャズムを超えたニーズを収容できない。 僕がはてブの設計で一番脆弱だと思うのはこの点だ。 Buzzurlはこの点はクリアしていて、集中する一極はなく、自分好みのマイページを作り上げていく(ゆえにユーザがユーザ自身の行動によってクラスタ化されていく)アプリケーションなのだけど、使い込まないとその方向に向かうことができないところが脆弱だ。
C言語はソース貼っても試すのめんどいよなあとか思ったんだけど、よく考えるとCodePad に貼れば記事を見た人がすぐ実行できるとか思ったので早速やってみた。 http://codepad.org/Bybm7P8I 以下思ったこと。 ハッシュテーブルに入れるvalueをどういう型にするか迷う これはCを使うときにはいつも迷う。 最初はvoid*にして、確保と開放はユーザの責任ということにした。でも単純にポインタ型にすると、文字列をvalueに入れたりするのは簡単になるけど、ハッシュテーブルを使ってワードカウンティングをするとか、そういうのがすごく面倒になる。 逆にintしか入らないハッシュテーブルとか寒い。 templateが欲しくなるけど、C++使うならそもそもハッシュテーブルなぞ作る必要はない。 結局、valueは型タグとintやらvoid*やらが入る共用体をくっつけた構造体として、適切
vimのコマンドに :grep というのがあってですね、grepしたヒット結果のファイルを開いてくれた上にマッチした行にタグジャンプしてくれてすごく便利なんです。 例えばPlaggerのソースで use Plagger::Feed してるところはどこだろな、とか思ったら :grep -r 'use Plagger::Feed' . とかできるわけです。 でも一つ問題があって、subversionでリビジョン管理してるソースに対して↑みたいな :grep すると .svn 以下も検索しちゃってウザイ訳です。 今までは :grep 'use Plagger::Feed' `find . -name "*.pm"` とかして逃げてたわけですが(:!find . -name "*.pm" | xargs grep 'use Plagger::Feed' だとタグジャンプしてくれないので。)、ヘルプ
最近Hadoopを使うために5〜6年ぶりにJavaをいじっています。 そんで、ちょっとばかり耐えがたいわけです。 例えばありがちな例題を挙げると、 ["google", "検索","開発"] のようなタグ(文字列)のリスト(でも配列でもなんでもいい)を受け取って [ {tag=>"google", enc=>'google'}, {tag=>"検索", enc=>'%E6%A4%9C%E7%B4%A2'}, {tag=>"開発", enc=>'%E9%96%8B%E7%99%BA'} ] のようなハッシュテーブルのリストに変換しなさい。 ただしパーセントエンコーディングを行う関数(でもメソッドでもなんでもいい) uri_encodingは与えられているものとする。 こんなこと、Webアプリケーションではよくやるじゃないですか。 んで、実際Perlなんかでは結構簡単に書けて #my @tag
Twitterを使い始めて、Twitterブログパーツを張りたくなった。 はてなダイアリーは設計上未来永劫javascriptやフラッシュを設置できないと思うので、引越しを検討することにした。 そもそもBuzzurlのブログパーツやブクマボタンとかも張りたいし、ちょっとしたjavascriptとかをブログにそのまま書きたい。 従ってRFPは以下 テンプレートが任意にいじれること(ブクマボタンを設置できること) javascriptを書ける/置けること なるべくなら無料で独自ドメインを使えること なるべくならMT形式の過去ログをインポートできること なるべくならMT形式で過去ログをエクスポートできること アメブロは僕のスペックを一つも満たさないのでそもそも対象外。 ライブドアブログは3つ目がダメだった。 seesaaは惜しかったけど、ここの過去ログをインポートしたら日付がおかしくなった。 と
次のページ
このページを最初にブックマークしてみませんか?
『*「ふっかつのじゅもんがちがいます。」withぬこ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く