ラベル 開発 の投稿を表示しています。 すべての投稿を表示
ラベル 開発 の投稿を表示しています。 すべての投稿を表示

2014/05/07

ファイルのキャッシュコントロールをクエリストリングでしてはいけない

サイトの高速化のためにExpiresやmax-ageヘッダを設定してファイルをキャッシュさせるのは良くあると思います。この場合困るのが、キャッシュ期間中にファイルの内容を変更した場合。キャッシュ対象がJavaScriptだとサイトに多大な影響を与えたりします。で、Webでよく見つかるバッドノウハウがhoge.js?20140507などのクエリストリングでファイルにバージョン番号を擬似的に持たせる方法です。これ良くないんですよね。
ハイパフォーマンスWebサイトの作者がブログに書いていますが、proxyやCDNで意図したようにキャッシュしてくれなかったりします。

ドヤ顔で書きましたが、RailsのAsset Pipelineの背景を読んでて今朝自分の勘違いを知ったのは内緒です。

2014/03/18

Rethinking Technical Debt

これを拝見するまで、ダメなコードって属人的なものという認識でした。ですが考えてみると、確かにそうじゃない部分が多々あるかも。また、技術的負債に関する意識共有って慎重に行うべきですね。(Strutsが負債になってしまった例)

2013/11/08

Amazon EC2は本当に安いのか?データ転送価格から見たレンタルサーバ

サーバを自社内に持つオンプレミスな時代は終わったと思うんですよね。機器の調達コストや専任の管理者を置くコストにおいて、クラウド業者に勝てっこないからです。今サーバーを置くなら、Amazon EC2一択.....ということはないと思うのです。

今回ウェブを巡回するクローラー + 自動再読み込み付きWebアプリの製作をする機会があったので、各種レンタルサーバの価格表とにらめっこしました。
主にハードウェアにおける価格性能比はこちらの方が書いてくれてます。これだけでもEC2の独走に疑問を覚えますが、これにのっかかってくるデータ転送費用の差も無視できません。例えばさくらインターネットさんのさくらのVPSは、最も安いプランで1サーバあたり共有セグメント 100Mbps 月間転送量 1.6TBまで制限かからず無料です。対して、同じものをEC2で構築すると$0.201 x 1600 = 321$かかります(サーバからインターネットへのデータアウト東京リージョンの場合)。弱小規模の月々千円から数万円でサーバを運用してるところだと、これは本当に痛いです。「HAHAHA。弱小が何を言っているんだ。うちみたいな大手なら数万円なんて気にならないぜ」という方も、サーバを訪問するユーザ一人あたりに対してどれだけのコストがかかっているか考えると、決してバカにできない数字になると思うんです。例えばYahooのトップページのようなページ(約0.5MB)を1日10ページ遷移するユーザーだと、月あたり一人につきデータ転送(アウト)だけで約113円かかります。

確かにEC2はAvailable Zoneを多数選べたり、業界を牽引する様々な機能を使えたりして非常に魅力的です。データ転送に関する料金も、増大すればそれに応じて安くしてくれるようです。ですが、日本の土管業者やレンタルサーバ業者も素晴らしいROIを叩き出すと思うのです。形態を考えずに猫も杓子もEC2一択...というのは疑問を覚えます。


※上記は参考です。実際の金額や仕様についてはご自身で確認してください。

2014/06/24追記: EC2の値段が変わったという話を少し前に耳にしました。ご自身で調べて下さい。

2014/06/24追記: 自社サーバールームを選んだpixivの例。将来は正解かどうかはわかりませんが、納得がいきます。

2013/04/07

IEテスト環境

Microsoftってサービス満点なこと結構してくれますよね。IE検証用にライセンスを別途用意しなくてすむのは嬉しいなぁ。

New on modern.IE: Free VM Downloads, Windows 8 QuickStart Kits, Enhanced Code-Scanning Tools, and More

www.modern.ie

2013/03/10

スケーリングMongoDB


NoSQL DBのMongoDBについて書いた本。
次の質問に答えられないで、MongoDBを使ったシステムに関わろうという人は読む価値がある。
・MongoDBは何故データの分割やバランシングを自動にしているのか。そして自動にしない機能が何故あるのか。
・濃度の低いシャードキーを選んではいけない理由は何か
・シャードを追加するときに気をつけることは何か
まだ調べ始めて間もないんですが、これを読んだ感想は「スキーマレスな分散DBって本当に意図した通りに動かせれるの?w」
結局書き込み可能な本当のビッグデータを柔軟に動かすためには、他に方法ないんでしょうけどね。

2013/03/13 追記:
・柔軟って書き方よくないですね。CAP定理の分類をメモ。この分類自体はしっくりいかないけど....
MongoDBを実運用している例。障害事例を載せてくれている神資料。
パフォーマンス比較

2013/04/02 追記:
何故MongoDBを選ぶかをまとめてくれている。

書評:「7つのデータベース 7つの世界」@漢のコンピュータ道
書いてあることには完全に同意。NoSQLがRDBを完全にリプレースしないことにも同意だし、リレーショナルモデルが永久性のある数学の世界でNoSQLが違うというのも同意。ただ、(執筆者自身リレーショナルモデルとRDBMSをかき分けてますが)多くのRDBMSは工学的なものであって数学モデルとは乖離があるし、SSDの普及に匹敵するぐらいの技術革新がまたない限りNoSQLの躍進は止まらないと思う。理由は凄くヒューリスティックな物で、データとユーザの欲求の爆発がRDBMSがサポートできる範囲を越えてると思うから。まぁ、どこから不意打ち的に技術革新が来るかわからんから未来はわからないですけどね。
捕捉:ハードディスクの進化が他のデバイスについていっていない話

2013/06/07 追記:


C10K環境下でのMongoDBの設定の仕方を書いてくれてる。

2013/10/05 追記:
あかん。メモリで全部できるならスキーマレスDBいらねーw

2013/03/25 追記:

ムック「データベース徹底攻略」 - MySQL/Redis/MongoDB/Redshift

すげーMongoDBを叩いていますw将来的な書き込み速度確保の選択肢の一つとして、かつ、RDBとは違うモデルの保存の仕方(簡単という意味ではない)としてMongoDB面白いなぁと思っていたのですが、そもそもスケールしないのかぁ。うーん。勧める派と反対派の意見がこれほど真逆なアプリも珍しいw

2014/05/26 追記:
全文検索システムのSolrを使ったシステムを構築した感想。RDBで全文検索しようと思ったら、データの一貫性保障できないんじゃね?

2016/02/09 追記:
いろいろなセミナーに参加してみたけど、MongoDBの評判悪いなぁw私自身も結局導入してない。

2013/03/08

プログラマーのメモ保存環境 再考

ドキュメントを保存する形式を長年悩んでたんですが、最近落ち着きました。

流れとしてはこんな感じ。

1 TeX
学生時代使っていたことにより引き続き利用。今考えると長い時間をかけて愛用者がいるだけあって、数式も図も美しくかける素晴らしいフォーマット。ただ、「環境構築並びに閲覧の面倒くささ」と「メモを書くことに時間をかけすぎではないか」という不安感が消えずに止めてしまった。環境構築自体の容易さは進歩したようなので、止めたのは早計だったのかもしれない。

2 アウトラインプロセッサ
考えに簡単なツリー構造を持たせて即座保存できる。
メモを簡単にすることができて本当に便利だった。だが、「多くのアウトラインプロセッサが画像をメモすることができない」、「結局ソフトウェア固有のフォーマットになってしまい将来に渡っての運用に不安」という欠点により止めてしまった。

3 紙copi
同僚が使っているのを見て買った。Webを切り取ってhtmlで保存できるというコンセプト自体は今でも活きる神アイデア。ただ、「Webのレイアウトによっては保存したものの見た目が崩れる」「ゼロからメモするという手法には向いていない」「将来に渡って動くか不安」という微妙な欠点によって止めてしまった。神ツールであるという考えにかわりはないので、微妙というのをつけて置きたい。

4 Word/Visio
社会人になってある程度小金ができると、Microsoft製品の素晴らしさをプライベートで使いたくなった。後、仕事で必要すぎなのでもっと使いこなせるようになりたいってのもあった。たが、「Visioクソたけーよ」「環境毎にライセンス用意なんかしたくねーよ」「OSデフォルトで見ることができねーよ」「安易な検索機能では検索できねーよ」という欠点により止めてしまった。

5 OpenOffice
自治体でも採用が始まり、とある仕事でプロジェクトメンバーが開発していたので使い始めた。だが、「細かいところでMicrosoft Officeより使いにくい。というより慣れてなくて勉強コストが高い」「OSデフォルトで見ることができねーよ」という欠点により止めてしまった。

6 Googleドキュメント
何もインストールしなくても閲覧編集できるクラウドの時代到来。ここまで来てスマートフォンで気軽に見られるようになった。だが「Googleはあっさりサービスを捨てちゃう」という判断により中止。

7 git + HTML5 + ドロップボックス
これが今のメモ保存形式。個人的にgitサーバーを持っているので、そこにhtml5で書いたメモを保存してます。html5にしたのは、規格が長い未来残るであろうこと、簡単に閲覧できること、ソフトに縛られないこと、画像を保存できて見た目もデコレーションできること、後単に勉強したかったからw
で、ポイントはドロップボックスをCDNとして使ってCSSファイルの配信を行う。そうするとレイアウトをいろんな環境で共通化できてすげー便利です。

こうしてあらためて振り返るとフラフラしてんなーと思うw

2013/01/04

REGEXPER

REGEXPER
JavaScriptの正規表現の見える化。
これいいな!
chromeに搭載して欲しい。


概念を直感的にわかるのは上の奴がいいが実践的なのはこっちだな:regex101

2012/12/31

gitignore総まとめ

.gitignore @ Github
新しい統合開発環境で開発を始まるときって、どのファイルをバージョン管理したらいいか悩みます。その問題を解決してくれる。感謝感謝。

2012/12/28

Node.jsはC10K問題を解決する銀の弾丸か

C10K問題とNode.jsについて調べる機会があったので、忘れないうちにメモ。


Life is beautifulより
ここで再度認識して欲しいのは、node.js の素晴らしさは「クライアント側で皆が使っているJavaScriptでプログラムが書ける」という部分などにあるのではない、という点だ。node.js がこれほど多くの支持者を得ているのは「本来記述が煩雑になりやすい非同期処理をJavaScriptの無名関数を利用して書きやすく・読みやすくすることにより、イベント駆動型のプログラミングを多くのプログラマーにとって手の届くものにした」点にあるのだ。
node.js と thread hog の話
まずNode.jsに興味が沸いたのが、このブログを読んだから。「Node.jsってJavaScriptしか書けない人がサーバー開発に着手するときに利用するもの」程度に考えていたので(ぉぃ)、反動で興味が出た。コンテキストスイッチを減らすことができ、キャッシュヒットを高めるものらしい。

で、いろいろネットをうろうろした感じとして抱いた印象は以下のもの。
  • ノンブロッキングってNode.jsが作った手法じゃないはずなのに、賛成派はノンブロッキングならNode.jsという論調で、なんか違和感あるなぁ。
  • 反対派はJavaScriptの見通しの悪さ、Node.jsでの開発に関する未成熟さをつっこんでるけど、じゃー代替手段は何なの?
そうこう調べているうちに、この問題の奥深さを再認識させられた:サーバーマシン1台で同時接続者数1万名を実現するにはどうすればいいのかというノウハウと考え方

このへんまで調べて抱いた印象は次のもの。「一口にC10K問題と言っても、皆解決すべき要件は結構違うんじゃないだろか」->「違うものを解決する銀の弾丸はない。よってNode.jsは銀の弾丸ではない。」->「しかし、アホほど能力とノウハウを要求する課題の敷居を下げてくれるのならば、Node.jsにはやっぱり価値があるんじゃないか。ただ、1台構成だったり、ノンブロッキングである必要はないよね。他言語にも代替手段あるし(Rubyのcelluloidとか)」というもの。

私の中で結論はまだ出ていない...。経験不足。当たり前だけど、まずはやってみるしかないよね。

2014/09/24 追記:
ここ綺麗にまとめてくれてる。

2014/11/20 追記:
勉強がてらアプリを一つ作り始めました。で、思ったんですが、JavaScriptでトランザクションとかロジックを書くのは結構つらい...。慣れたらそうでもなくなるんかな。

2019/07/19 追記:
イベントはスレッドに比べて何故ダメなのか (Why Events Are A Bad Idea)

2020/10/08 追記:
いろいろ試した結果、Goで行くことにしました。すげーよ、Go。

2012/11/29

Google Chrome Developer Tools入門

Google Chrome Developer Tools入門
chromeまじ便利すぎ。

2013/06/07 追記:


綺麗にまとめてくれています。Web開発を始めた頃って、このへんのデバッグに関するノウハウを見つけられなくて苦労しました。こういうのが社内で伝わる環境って羨ましい。

2012/03/25

エディタの文字の色

emacsなどの各種エディタで使う文字の色って長年試行錯誤してたんですよね。センスないからorz。ここBrowse By File Typeが確認しやすくていいです!


2013/02/16 追記:
ここで色の組み合わせ確認がブラウザを使ってできます。でも複数色の組み合わせをテストしたいんですよねぇ。最近ls -Gのデフォルトが青文字と白文字ってあかん気がしてしょうがない。背景色何にすればいいんだよ...

2013/02/16 追記:
文字色変えました。デフォルト設定あまりいじりたくなかったんだけどなぁ...。

2010/12/29

ライセンス和訳

ライブラリを探すときはライセンスがいっつも面倒です。
参考になる和訳識別子をメモ。

2010/07/02

Macのアプリケーションバンドル時のカレントディレクトリをどうするか

仕事でQtを使ってマルチプラットフォームの環境で動くアプリケーションを作っているんですが、個人的に結構泣かされてるのがMacのbundleの仕組みです。
bundleの仕組みを簡単に説明すると、Macではアプリケーション配布時、フォルダの下に実行ファイル用のフォルダやリソース用のフォルダが作られ、その中にファイルが設置されます。
それだけ聞くと「Windowsと同じでは?」と思いますが、Finder(Windowsで言うexplorer)からアプリケーションを開くときはファイルが保存された親フォルダをダブルクリックして起動します。つまり、Finderからはフォルダが単体のアプリケーションに見えるわけです。
Macだけを対象としたアプリケーション開発をするなら、インストールもアンインストールも楽で、開発者にとってはブラボーは仕組みなんですが、マルチプラットフォームを対象としたアプリケーションを作っている場合は、カレントディレクトリ差異に煩わしさがありました。
これは「きっとMacやQtを使いこなしてないしょぼい開発をしているから発生する問題に違いない」と思っていましたが、ネットで解決方法を見つけてびっくりです
QDir dir(QCoreApplication::applicationDirPath());
#if defined(Q_OS_WIN)
if (dir.dirName().toLower() == "debug" || 
    dir.dirName().toLower() == "release")
{
 dir.cdUp();
}
#elif defined(Q_OS_MAC)
if (dir.dirName() == "MacOS")
{
 dir.cdUp();
 dir.cdUp();
 dir.cdUp();
}
#endif
QDir::setCurrent(dir.absolutePath());
cdで移動してるだけやんけ!
でも、よく考えたら下手に自動で何かされるよりいいのか。

2010/04/23

XML応用技術の仕様一覧

XML応用技術の仕様一覧

業界・用途別のXMLで定義された仕様をリストアップしてくれている。
リファレンス用にメモ。オイラ程度が考えようとする仕様なんて既にあるのが常です。車輪の再発明はできるだけ防ぎたい。

2009/09/10

Visual Studioのマクロ操作

cppファイルを開いているときに、対応しているhファイルをマクロで開けるようにする方法

私はワイド画面でウィンドウを縦に区切って、左にヘッダファイル。右にcppファイルを開いている。なのでこういうマクロは便利。

2010/01/17 修正
Microsoft Visual Studio .NET2003用マクロ詰め合わせ
最近はcppとhファイルの切り替えに、VC++2005でこちらのマクロを使っています。

VC++ 2005でコンパイルしたexeが配布できなくなった

ある日突然起きた出来事。
VC++2005でコンパイルしたプログラムが、開発環境以外で動かなくなってしまった。つまり、配布できなくなってしまった。エラーメッセージも

このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。

という、とってもわかりやすいものだった。配布テストを長い間していなかったため、ソース変更が影響しているのかと必死こいてチェックしなおしたが、どうやらWindows Update(KB971090のVisual Studio SP1アップデート)が原因みたい。

で、肝心の解決方法だが、
配布先で解決してもらう方法は、最新のRedistributable Packageをインストールしてもらう(googleで検索すると現時点では古いRedistributable Packageがひっかかりやすいので注意)。
開発者側で対応するには、これ(こっちの方法は確認してません)。

2009/09/01

UMLに比べてのBPMNのメリットは?

システム屋さんの仕事をしていると、業務フローやシステムフローの見える化をどうするかはいつも悩まされる。
どうもBPMN(Business Process Modeling Notation)というのが、最近UMLのアクティビティ図に代わって評価されてきているらしい。
UMLに比べての利点としては

  1. UMLが下流工程を意識して設計されているのに対して、上流工程向きに作られている

  2. シーケンス図のような「メッセージによるアクティビティの駆動」を記述できるので、各プロセスを独立して記述しやすい


という点を感じた。
下流より上流向きの資料を充実させる必要があるときに導入してみるかな。



2009/08/30

Turbo Explorer is finished

http://www.forest.impress.co.jp/docs/news/20090826_310816.html

> また26日、無償で利用できる開発環境「Turbo Explorer」の公開が終了され、すでに同社のWebサイトではダウンロードできなくなっている。


うわーん,BCB6のプログラム Turbo Explorerでコンパイルできるようにしてたのにー!