サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
円安とは
paulownia.hatenablog.com
例のleftpad, GCを虐めるためとかコンパイラの最適化を確認するために用意する、「無駄に一時オブジェクト量産するクソコードの典型例」みたいな実装なので、こんな小さい関数のために、信頼できない人のコードを、実装を見るでも無く、依存性追加してたってことで、— INADA Naoki (@methane) March 24, 2016 ここから始まる一連の、モジュールの依存性に関する議論はなかなか興味深いが、自分的に気になったのは以下の一節 GCを虐めるためとかコンパイラの最適化を確認するために用意する、「無駄に一時オブジェクト量産するクソコードの典型例」みたいな実装 ソースを見てみようか。 left-pad/index.js at 0e04eb4da3a99003c01392a55fa2fdb99db17641 · azer/left-pad · GitHub なるほど一見するとクソコー
でも多分そんな指摘はとっくにされてるんだろうから、それでもこうなんだから、どうなの?どうしようもないの?アレって。 ……こういう考えを広めようとする人は消えてほしいなー。個人でやるぶんにはいいけどさー。 早出しても給料でないんだから。会社が始業時間を遅くするか、鉄道会社が混雑を解決すべきなんだから。 「現状解決しない問題なんだから、自分でどうにかするしかないでしょ。いいアイデアじゃん。君も実践しなよ」とか言うドヤ顔オヤジは勘弁だわー。 これ見て「システムの不備を個人の努力でなんとかするのが日本で、それは日本人チームプレイが極めて下手糞だから」のような話を読んでえらく納得したことを思い出したが、どこのブログだったかな。 あ、これこれ。 おれは思うのだが、日本人というのは、ステレオタイプな日本人像とはまったく異なり、組織やシステムの不備や怠慢を、個人個人の優れた能力と自己犠牲で切りまわしてきた
ガラケーからiPhone4に乗り換えました。おサイフケータイ等のガラパゴス機能は使っていなかったのでiPhoneになって不便を感じることもなく、iPhoneの便利さだけを享受しています。東京にいる限りはソフトバンクの電波で困ることもないですしね。 ところでiPhone4のSafariはHTML5で追加されたinputの新しいtype属性値に対応しています。キーボードのレイアウトが属性にあった形に変更され、入力しやすくなります。また属性に合わない値の入力が制限されます。 https://nullpon.moe/dev/sample/form.html type="email"では @ と . のキーが追加されます。 type="url"では . と / と .com が追加されます。 type="number"では数字キーボードになります。ただし数字以外も入力可能でした。 type="tel
ジュンク堂とか、三省堂書店とか、紀伊国屋書店とか文教堂とか有隣堂とか 店内(あるいは他の支店もふくめ)にある書籍の情報が検索できる端末を置いている 大型書店が結構増えてきたように思います。便利は便利なのですが、 使うたびにストレスやフラストレーションがたまる設計のシステムを使っているところがあります。 というかどこもそれなりに不満点があります。 特に XXX と YYY はシステムを設計した担当者を体育館裏に呼びつけて(以下略) ... システム作ったやつ、いっぺん自分で使ってみろよ。ほんとに。 いや、100人分くらいの検索を代理で入力させて、 それでもそのシステムのできが誇るに足るものか訊いてやりたいw 書店の検索システムって使いにくいですねえー。コンピュータのインターフェース部分だけでなく、売り場との連携もよくない。例えば新宿の紀伊国屋、検索結果で2FのC8の棚にあります、と場所を教え
若年労働者の育成にあたっては、「一皮むける」ことが重要であるとされています。 ストレス耐性を真につけるためには、「甘やかす」のではなく、「仕事をさせる」ことも方法の1つでしょう。 またお得意の「ストレス耐性」が出てきました。これはJob is shitのヒトが切り捨てている日本人のクソ労働メンタリティそのものですね。 法律を遵守(じゅんしゅ)するという視点からは、36協定の枠内で時間外労働の延長を行い、休日労働を行わせることが、実労働時間に関する使用者の義務となります。これを超える労働は違法とされ、禁止されるべきであるとされます。 これを「甘え」と認識しているのです。休日労働しないとか、過剰な労働から解放されて人間らしい生活を望む事を甘えと言う。狂ってます。 常に仕事優先、給料は我慢料、ストレス耐性wが必須条件、根性と忍耐で心身壊れる限界まで追い込まれて働くような奴隷労働システム、他の国じ
早速Golangで頭を抱えている Goには「このインターフェースを実装するぞ!」という明示的な宣言がない。errorインターフェースがいい例だが、Error() stringというシグニチャのメソッドがある構造体は何でもerrorとして扱うことできるようになる。ダックタイピングのような挙動を示す そんなインターフェースの型によって分岐する単純なコードを考える type Animal interface { Bark() string } // animalを実装したCat type Cat struct {} func (cat *Cat) Bark() string { return "Nyan" } // animalを実装してないApple type Apple struct{} func whatIs(x any) { switch x.(type) { case Animal:
JavaのWebアプリでユーザ認証を行う場合、サーブレット仕様で決められた認証機能を使うか、独自の認証機構を実装するか、いずれかであると思う。 サーブレットの認証機能を使うとHttpServletRequestのisUserInRoleやgetRemoteUserが有効になるのが地味に嬉しい。Strutsフレームワークのロールによるアクセス制御も有効になるのでサーブレットの認証機能は結構使える。一方、独自の認証機構を使うと自由にログイン処理を記述できる代わりにHttpServletRequestのgetRemoteUserやisUserInRoleは使えない。 しかし独自の認証でもHttpServletRequestWrapperとFilterを組み合わせれば、getRemoteUserやisUserInRoleを有効にできる。 まず、認証時にユーザ名とロールを適当な名前でセッションに格納
HTML5のDrag and Drop APIとFile APIを試してみました。 Drag And Drop APIは HTML上の要素のドラッグアンドドロップをサポート File APIとの連携でデスクトップからのドラッグアンドドロップをサポート 1番はHTML5でなくてもjQuery等を用いれば実現可能ですので、File APIとの連携を試します。 File APIのサンプル jQueryでFile APIを使うために以下のおまじないを実行します。 jQuery.event.props.push('dataTransfer'); DropイベントとFile APIとの連携にはevent.dataTransferプロパティを使いますが、jQueryのイベントオブジェクトにはdataTransferが存在しません。このおまじないで、jQueryのeventオブジェクトにブラウザネイティブ
好きなジョブズの名言を一つ挙げろと言われたら、私は「その醜悪な犬の糞をどけろ!」を選びます。 NeXTのマシンを日本で発表するとき、代理店のキヤノン販売が生け花の大家の先生を呼び、発表ステージに生け花を添えてもらいました。その生け花を見てジョブズが吐き捨てた言葉だそうです。気に入らない奴を見れば即座に「おまえはクビだ」と叫ぶ唯我独尊自己中心ファッキンクソ野郎のイメージ通りのエピソードですね。 しかし、ジョブズのクソですからタダのクソなわけありません。これは余計なもの、要らないものには全てノーというジョブズの流儀なんですよ。不要なものならば、権威だろうが伝統だろうがお構いなしにバッサリ切り捨てるジョブズの美学なのです。 だいたい日本の製品発表会は無駄な飾りがおおいんですよ。あのアンドロイドスマートフォンの醜い新製品発表は何ですか? スマホ持ったコンパニオン侍らせて真ん中にお偉いさんが立ってい
gfx.hatenablog.com 配列の空要素の問題ですね。容量は確保されてるが値が(undefinedさえも)入っていない状態。 $ node -p -e "new Array(3)" [ <3 empty items> ] この配列のlengthは3になるのだが、forEachなどのイテレーション関数では空要素は列挙されない。 $ node -p -e "new Array(3).length" 3 $ node -e "new Array(3).forEach(i => console.log(i))" # 何も出力されない リンク先ではArray.fromやスプレッド演算子を使って、undefinedをセットするコードが紹介されているが、自分はこういうときはfillを使っている。 $ node -p -e "new Array(2).fill()" [ undefined, u
あと4つは募集中です 他の言語というかJavaしか知らなかった昔の自分がつまづいたような気がする点を4つ メソッド名がJavaと違いすぎる 慣れるしかない… Java "hoge ".trim(); Ruby "hoge ".strip ダメなうらわざ、やったら負け class String alias :trim :strip end " hoge ".trim null/nilに対するメソッド呼び出し JavaならNullPointerExceptionとなりますが、RubyではNoMethodError。Rubyはnilもオブジェクトなのでヌルポは無いのです。 エラーメッセージにfor nil:NilClassとあれば、メソッド未定義ではなく、変数の未初期化かもしれないのでそっちも調べよう。 NoMethodError: undefined method `hoge' for nil
追記:今はこちらのライブラリがおすすめ www.npmjs.com node.jsにはテキストを読み込んで行毎に処理できるライブラリがないので、自前で行処理を行う必要がある。 何も考えてないバージョン 何も考えなければ、難しくない。 var fs = require('fs'); var rs = fs.createReadStream("a_big_text_file.txt"); var data = ""; rs.on("data", function(chunk) { data += chunk; }); rs.on("end", function() { var lines = data.split('\n'); lines.forEach(function(line) { console.log(line); }) }); しかし、これはイケてない実装。使い捨てスクリプトで使う
日本のパッケージベンダーが駄目な理由 技術者としては、オープンソースライブラリの方がはるかに使いやすいのに、低レベルなSIerのフレームワークのAPIを覚えるのが苦痛だ。 オープンソースのライブラリならば、どこに行っても通用するのに。 経験上SIerの俺様フレームワークほど最悪なものはない。必ず痛い目に合っている。 フレームワーク自体のレベルが低い、他で通用しないというのはもちろん、特定SIerの俺様フレームワークなど知っている人はまず居ないので学習コストが高く、プロジェクト途中で助っ人を呼んでもフレームワークの勉強から始めなければならず効率が悪い。オープンソースフレームワークならば、助っ人がそのフレームワークを知ってる可能性も期待でき、すぐに、容易にコードを追うことができる。 フレームワークのもう一つの役割は、フレームワークの流儀に沿うことでルールを共有し、コミュニケーションコストを減ら
世の中は、科学で全てが証明出来る程、簡単には出来ていないと思うのですけれど、どうなのでしょう。疑似科学的なものを信じる信じないも個人の自由じゃないんですかね。それじゃ駄目なんですかね。 http://d.hatena.ne.jp/ululun/20070112/1168588977 よく見かける意見だが、こういう意見を口にする彼らは科学が不完全だから疑似科学を信じているのだろうか? 「科学で解明できないことがある。科学で全てが証明出来るというわけではない」ならば「疑似科学を信じても良い」のだろうか。逆に「疑似科学がうさんくさい」ならば「科学が完全である」といえるだろうか。 そんなバカな話はない。なぜなら、両者はまったく関係ない事象だからだ。疑似科学は科学に偽装し、科学の権威を利用して証明できないことを真実のように言いふらし利益を誘導しているだけである。 科学が完全だろうが不完全だろうが、そ
createObjectURL、省メモリだとかaudioの再生がスムーズだとか言われてるけど、これが何物なのか日本語の詳しい説明が見当たらないので、自分の理解を書いておく。File APIの仕様書を軽く流し読みして得た理解なので正確さは保証しない。ま、大筋は間違っちゃないと思う。 createObjectURLはFileオブジェクトのURL(Blob URL)を作成するもの。httpスキームのURLがサーバ上のリソースを指しているように、Blob URLは自分のPCのメモリ上にあるリソースを指し示す。 FileReaderのreadAsDataURLメソッドを使うとfileオブジェクトを元にURLを作成できるが、これはData URLで、URLエンコードされたファイルの中身そのもの。よって、ファイルを読み込んでData URLを作成すると、JavaScriptエンジンはファイルサイズに比例
この記事の内容は不正確なので、別の記事をご覧ください リクエストURIが複数のlocation設定にマッチしても適用されるものは1つだけです。適用の優先順位は 完全一致(=) 前方一致(^~あり、複数マッチした時は一番パスが長いもの) 正規表現(~または*~ 複数マッチする場合は一番上のもの) 前方一致(^~なし、複数マッチした時は一番パスが長いもの) =や^~でマッチした場合はその時点でマッチング処理を終了するそうです。 わずかでも軽くしたいなら正規表現を避けるといいのかもしれません。たとえば画像ファイルを全て /img 以下に設置しているのであれば location ~* .(gif|jpg|png)$ { access_log off; }よりも前方一致マッチングを使って location ^~ /img/ { access_log off; }とした方が、わずかながら速くなるかもし
HTML5のServer-Sent Eventsの仕様は、HTTP通信を使ってサーバサイドからのデータプッシュを行うCometを、JavaScriptのAPIを定義するなどして使いやすくまとめたものらしい。クライアント側のAPIはSafari5やChrome8では既に実装されているそうなので試してみた。 サーバ側は最近流行のnode.jsで実装してみた。Server-Sent Eventsのサーバ側はCGIやPHPでも実装可能だが、Apacheのようなマルチスレッドでリクエストを処理するタイプのサーバでは、ロングポーリングで停止しているだけの、ほとんど仕事しないスレッドが沢山作られてリソースが無駄になり非効率的だ。ノンブロッキングIOでシングルスレッドでイベント駆動型のnode.jsならば効率的なはず。 サンプル。gitでソースを落として node server.js して http://
Apache+mod_rails環境で、公開時は認証不要の画面だが、テスト中なのでアクセス制限のためにbasic/digest認証を使用したい。 httpd.confのDirectoryディレクティブにRailsのpublicディレクトリを指定してBasic認証を設定すると、Railsのpublicディレクトリに置いた静的なhtmlだけが認証の対象になり、アプリ全体が認証の対象になりませんでした。 Locationディレクティブならばアプリ全体の認証に対して認証が有効になるようです。 <VirtualHost *> ServerName example.com DocumentRoot /var/www/example.com/railsroot/public <Location /> AuthType Digest AuthName "On Testing" AuthDigestProv
以前、Javaではダブルチェックイディオムを使ってはいけないと言われていた。Effective Java第1版にもダメと書かれていたのだが、Effective Java 読書会 12 日目 「スレッド・セーフってなによ!!」 - IT戦記によると、第2版では遅延初期化の方法として掲載されているらしい。 ちょっと調べてみた。 JDK5 and later extends the semantics for volatile so that the system will not allow a write of a volatile to be reordered with respect to any previous read or write, and a read of a volatile cannot be reordered with respect to any follow
プライバシーの問題が懸念されているけど、それ以前にパケットを盗聴して広告業者に販売するって盗品の販売じゃないのか? asahi.com(朝日新聞社):「ネット全履歴もとに広告」総務省容認 課題は流出対策 - ビジネス・経済 (1/2ページ) 例えばGoogleの検索クエリは、Googleがサービス提供の対価として得た顧客情報で、当然その情報の所有権はGoogleにある。DPIで得たデータを広告業者に売る事は、Googleの所有物を盗んで売っているという事ではないのか。Amazonや楽天のパケットを解析することは、Amazonや楽天が持っている顧客データの窃盗にならないのか。 よくわからんです。 DPIが合法となった場合、AmazonやGoogleは情報を守るためサイト全体をSSL化する可能性もあるのではないかな…
mongoDBのコレクションにはnatural orderという概念があります。sortせずにfindするとインサートされた時間が古いものから順番に取得されますが、この並び順がnatural order。 新しい順にドキュメントを取得したい場合は sort に { $natural: -1 } と指定すればおけー db.Hoge.find().sort({ $natural: -1 }); 連番フィールドや時刻フィールドを用意してsortするよりもかなり速いです。 ただし、natural orderはディスク上の物理的な順番なので、分散環境でチャンク移動が発生した場合や、updateでドキュメントが大きく変更された場合などに変わってしまいます。だいたい新しい順でいいやー、というようなゆるい状況でなければ使えません。 ※ capped collectionはインサート順とnatural or
知らんかった… Dockerでローカル環境を構築していた時にブラウザはport 6000にアクセスできないことを知った。例えばdockerで以下のようにnginxを起動。 docker run -p 6000:80 -v $(pwd)/htdocs:/usr/share/nginx/html --name web nginx:latest chromeで http://localhost:6000/ にアクセスすると などというメッセージが表示される。dockerネットワークの設定が何か間違ってる?nginxのdocument rootの場所が間違ってる?などと思ったが特に問題はなく困惑していたところ、何気なくcurlでアクセスすると普通にhtmlが帰ってくるではないか。もしかしてブラウザ側?となった。 どうやら ERR_UNSAFE_PORTというのがミソのようで、実はブラウザは6000
コードの解説。 jQueryのイベントオブジェクトからファイルデータにアクセスするためのおまじない。 jQuery.event.props.push('dataTransfer'); PCからファイルがドロップされたときの処理 $("#file").bind("drop", function(event){ // ドロップされたファイルは、eventのdataTransferプロパティの // fileプロパティに配列(例によってArrayではない)に格納されている viewFileContent(event.dataTransfer.file[0]); } ファイルの中身を読み取る処理 function viewFileContent(file) { // ファイル読み込みオブジェクトが実装されているかどうか? if (!window.FileReader) { console.log(
一言でまとめると、時代はクラウド。JJUGは「じぇいじゃぐ」と発音すると今日知った。 scala scalaは面白い言語だと思った。俺はGroovyより好きだぞ。RubyとJavaを知っていればたぶんすぐに使いこなせるようになる。 記述がキモイと言われているらしいが、確かにキモイ。 for (i <- 1 to 5 ) { println(i) }i <- という記述はそこで思考の流れが逆転してしまうので読みやすさを考えると微妙。 (1 to 5) foreach {e => println(e)}クロージャの書き方にしても => の意味が直感的に分かりにくい。慣れてしまえばどおって事ないのかなあ。 sunの中の人 例の件はノーコメント。Sunの社員さんにも寝耳に水で分からないようだ。お疲れさまです。 Sun(Oracle?)のクラウド戦略の話。Hadoopの話とかしていたが、Sunの狙い
なんとも迷惑極まりないデータベースがあったもんだ。 http://en.yummy.stripper.jp/?eid=719489 http://md5.rednoize.com/ これは厳密には復号とは言わないと思うけど、任意のMD5ハッシュ値を発生させる元データが取得できるので十分脅威的ですね。弱衝突耐性が突破されるってことか。 パスワードのハッシュ値でパスワード検証している場合は、ハッシュ値の流出が事実上パスワードの流出になってしまうわけで。つまりデータベースにハッシュを保存するならば、パスワードに秘密の文字列を結合するとか、パスワードをビット反転するとか、パスワードに何らかのスクランブルをかけてからハッシュ化しないとダメっぽい。 ま、セキュリティにうっさい案件では普通にやってると思うけど。 追記: 有識者によると、もはやMD5は時代遅れなのでSHA512などのハッシュ関数を使った方
Function.prototype.curry = function(t) { var self = this; return function() { return self.apply(this, [t].concat(arguments)); } } のような関数をカリー化引数を部分適用させるメソッドを作ってみたが上手く動作しない。arguments は Array オブジェクトではないので、[t].concat(arguments)はフラットな配列として展開されないのだった。 function hoge() { window.alert(arguments); // object Arguments window.alert(arguments instanceof Array); // false } hoge(); JavaScript には、arguments 以外にも、D
君は産休を有給か何かだとでも思っているのかね 産休は有給ではない。遊んでるわけじゃないのだ。 働けるけど働かないっていうのとは違う。 まあ、論旨自体にどうこう言う気はないけど、ベースとなる考え方には違和感を感じる。有休も産休も等しい労働者の権利であって産休と有休を比較して「産休>>>>有休」とする発想はおかしい。どちらも同じように尊重されるべき権利である。 産休は仕方ないけど有休は遊びだからダメという発想は、多かれ少なかれ男女関わらずあるものだ。いや、むしろ女性より男性の方が多いかもしれない。「有休は遊びだから」という発想は、遊びなんだから権利の行使そのものを遠慮しろという発想に結びつく危険な発想だ。 等しい権利とはいえ、産休はずらせないが、有休は融通を利かせられるので運用上有休を取る側が配慮するのは当然だろう。しかし、遊びだから遠慮しろという考え方は間違っている。有休も産休も等しい労働者
恐ろしい。なぜ日本人は自ら人生をハードモードに設定してもがき苦しむのか。アメリカではレンチンは重労働というのが常識であり、冷凍餃子をフライパンで焼くなどしようものなら君はとても料理が得意なんだね!と褒められるであろう togetter.com そもそも、自分にとって自炊という言葉は「貧乏学生や限界独身中高年による外食以外の栄養摂取行為」と定義されるものである。よって自炊とは以下のような食事を指す ご飯と納豆と味噌汁のみの食事 具なし袋ラーメンを鍋のまま食べる 冷凍チャーハンをレンチン 卵かけご飯 パンにマーガリンを塗ってハムを乗せて焼く コーンフレークに牛乳をかける これらは全て自炊である。フライパンと油が必要な冷凍餃子など手間暇かかったエクストリームでハイエンドな自炊なのである 逆に手作り餃子のような高尚な行為を自炊とは呼ばない。また自分以外のニンゲンにも食べさせるために作るのも自炊では
jQueryの $(function(){ ... }) は、ページの load イベントではなく、DOMContentLoaded というイベントをトリガにして実行されます(Firefoxの場合)。このイベントはHTMLファイルがロードされDOMツリー構築が終了したときに実行されます。画像などの重いコンテンツのロードが始まる前に実行されるため体感速度が向上します。 しかし、以下のようにDOMContentLoadedをトリガにしてページ内の画像をcanvasで処理しようとすると、まだ画像が読み込まれていないためエラーになることがあります*1。 $(function(){ $("img").each(function(){ var canvas = document.createElement('canvas'); var c = canvas.getContext('2d'); c.dr
次のページ
このページを最初にブックマークしてみませんか?
『NullPointer's』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く