サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
hideden.hatenablog.com
ISUCONに行ってきました。社内での事前βテストに参加して問題を知っていたので出場はせず。社内β参加を持ちかけられたときは、正直「めんどくせーなw」が素直な感想だったんですが、実際にやってみるとスコアがリアルタイムにわかる&ちょっとずつ自分のスコアが上がっていくってのは楽しくて、わりと本気でチューニングしてしまいました。 さて、本戦でも14時頃からお遊び用としてサーバー一式が解放されたので、大人げも無くそこで112500req/minをたたき出して参加者のやる気を削いだ(・・と懇親会で言われました。色々すいません!)構成について。 reverse proxy nginx(1.0.5) ngx_http_memcached + ngx_http_ssi_filter + ngx_http_scgi + ngx_http_upstream_keepalive(3rd party plugin
Limechatのサーバー設定をいじってる時に、ふとSSL Optionが気になった。tiarra+stoneでやってみるかーと思ってyum search stoneしたところ、見つからない。ソースから入れるかなと思い、openssl-develを入れようとyum search sslしたところ、最下行に znc.x86_64 : Advanced IRC bouncerとかいうのを発見。これらしい。 SSL Support Encryption for both the listen port and connecting to IRC servers. If your system has OpenSSL, ZNC automatically supports SSL connections.公式に、↑と書いてあった。せっかくなのでこっちを入れてみることにする。 Installはyum
cmdをAltにするpatchはいくつかあるんだけど*1 *2、自分の好みに合ったのがなかったので書いた。今日の時点での最新版のiTerm2 rev.491で確認。 https://gist.github.com/781481 cmd+ space(入力切替), enter(全画面表示), t(新規タブ), n(新規window), c(copy), v(paste), <-(前のtab), ->(次のtab) 以外の組み合わせの場合だけ左Optを押したことにする。iTerm2の設定で みたいに左Optを+ESCにしとくといい感じ。左Optとcmdを入れ替えたりという気の利いた事はしてないので、左Optとcmdのどっちを押しても設定どおり+ESCになる。これでcmd+wや左opt+wを押した時にタブ閉じて涙目・・・とかにならなくて済む。 space, enter, t, n, c, v,
sakuraのVPS980がとっても快適ですばらしい。調子に乗って自宅サーバーを廃止しNASに置き換え、DNS/mailなんかはすべてVPSにした。部屋も静かで涼しくなって、しかもasahi-netの固定IPもろもろを解約したので月コストもだいぶ下がりいい事だらけ。 ただ、標準で入ってるCentOSが会社と同じでなんとなくつまらない。幸いなことにOS変えてる人がちらほら居る&勝手に変えても(多分)怒られないようなので、もう1インスタンス借りて実験的にGentooにしてみた。 調べてみたらgrub2経由でSystemRescueCdを起動してごにょごにょも出来るらしい。ただ、Web上のシリアルコンソール経由でやるのはちょっとしんどいのでSysRescCd経由はあきらめ、CentOSの中身をごそっと全部入れ替えてGentooにする方法を採用してみた。こういう行為をあまり悩まずに気軽に出来るよう
認証が不要で、結果をJSONPで返してくれるAPI。大体は高速化の為にmemcachedを使用し、cacheが存在すればcacheから、存在しなければDB等から引いてcacheに入れ、その後結果を返す設計になってるはず。 URL: http://api.example.com/count?user_id=12345&entry_id=12345&callback=hoge response: hoge({"status":"success", "count":1000});みたいなの。ほとんどの場合cacheにHitするので一瞬でresponseが返るけど、あまりに簡単なお仕事過ぎてそれの為にmod_perlのプロセスを使うのがもったいない。特に1日数千万回アクセスされるようなAPIだと積もり積もってすごい負荷に。 responseに使うJSONをそのままcacheに入れて、Tokyo T
仕事で画像キャッシュサーバーを構築した時のメモ。大規模事例の設定例が検索してもあまり見つからなかったので同じような境遇の誰かの参考になれば。 ピーク時のトラフィックは数Gbps 画像総容量は数十TB バックエンドのstorageが複数種類 規模とアクセス量とアクセスされる画像の種類が多いので、squidでdisk cacheを使用するとCOSS等を使用してもdiskIOで詰まる為、全てon memory cache。cache容量を確保する為に必然的にcacheサーバーの台数も数十台。 1. squidをsibling構成で並列に並べる cache_peer 10.0.1.1 sibling 80 3130 no-query no-digest proxy-only cache_peer 10.0.1.2 sibling 80 3130 no-query no-digest proxy-o
あいうえおー ISUCONに行ってきました。社内での事前βテストに参加して問題を知っていたので出場はせず。社内β参加を持ちかけられたときは、正直「めんどくせーなw」が素直な感想だったんですが、実際にやってみるとスコアがリアルタイムにわかる&ちょっとずつ自分のスコアが上がっていくってのは楽しくて、わりと本気でチューニングしてしまいました。 さて、本戦でも14時頃からお遊び用としてサーバー一式が解放されたので、大人げも無くそこで112500req/minをたたき出して参加者のやる気を削いだ(・・と懇親会で言われました。色々すいません!)構成について。 reverse proxy nginx(1.0.5) ngx_http_memcached + ngx_http_ssi_filter + ngx_http_scgi + ngx_http_upstream_keepalive(3rd party
[squid]---[apache:1]---[apache:2] という構成の[apache:2]で特定のHTTP methodの場合だけかけてあるBASIC認証がsquidを経由すると全然通れなくなって、[apache:1]でmod_rewriteの[P]使ってるからダメなのかと疑ってみたり、tcpdumpで調べて「なんでsquidの後ろでAuthorizationヘッダが消えるんだよ!!」とムカついてたりしたんだが、単純にsquidの設定が足りなかった。 cache_peer 10.0.0.x parent 8080 0 no-query login=PASS originserver "login=PASS" が必要らしい。普通にドキュメントに書いてあった。ドキュメントは隅々までちゃんと読むべき。 header_accessやrequest_header_accessはこの場合は全
2009-08-02 15:10:00 iPhone使わない方法を追記 iPhoneを色々いじってる過程でやってみたら出来たのでメモ。さほど悪い事は出来ないと思うけど、色々自己責任で。 iPhoneとSBMガラケーでは全く別のネットワークを使用しているため、通常iPhoneからは公式サイトやIPでアクセス制限をかけてる勝手サイトは見る事が出来ない。特に見る必要も無いのだが、実験としてやってみた。 iPhoneは通常 "smile.world" というAPNに接続している。一方、ガラケーはググって見たところ "mailwebservice.softbank.ne.jp" というAPNに接続しているらしい。っと言うことは、iPhoneの接続先をこれに変えてしまえばiPhoneもSBMガラケー側のネットワークに入れる・・・はず。 用意するモノ 香港版 or SIMUnlock済みの iPhone
なんか3GCのSH系が絵文字をSJIS外字領域で送ってくる。どこにそんな定義が?って思って調べたらPDF資料のHTML編のAppendixにあった。(p211〜) コピペできない資料で抽出が面倒だったので、抽出したものを以下に。PDFって嫌いだ。 http://hideden.net/pub/sbm_emoji_table.txt 数値文字参照(Dec) | 数値文字参照(Hex) | UTF8(Hex) | SJIS(Hex) | ウェブコード(0x1B xx 0x0F) の順。
会社のサービスはローカルに開発環境を構築するにはでかすぎてだるいので開発サーバー上で開発してるのだが、この開発サーバーが非力すぎて誰かがsvn操作とかでdisk IO使い出すとemacsまで巻き込んで固まる。。。 で、周りの人に聞いてみたらemacs+trampでやってる人が居た。昔チラッと使った時はFUSEのsshfsでマウントした方が何かと便利じゃね?っと思ってすぐ使うのを辞めた気がするので忘れてた。せっかく教えてもらったので真似してみる。 ローカルの環境はOSX Leopardで、ターミナル上のemacs使用。trampはMacPortsとかに無いっぽいので自前で入れる事にした。 trampの現在の最新版は2.1.14。ここから落とした。 wget http://ftp.gnu.org/gnu/tramp/tramp-2.1.14.tar.gz tar zxf tramp-2.1.1
jQuery+jTemplatesでごにょごにょやってて、ちょっと悩んだのでメモ。 データ var data = { status: 'success', base_url: 'http://localhost/entry/edit/', entries: [ { id: "1", title: "title1" }, { id: "2", title: "title2" } ] }; テンプレート {#if status == 'success'} <ul> {#foreach $T.entries as entry} <li><a href="{$T.base_url}{$T.entry.entry_id}">{$T.entry.title}</a></li> {#else} <li>no entries.</li> {#/foreach} </ul> {#else} failed t
iPhoneはデータ取得方法にプッシュを指定しておくと、wifiエリア内でwifi接続していても3G圏内であれば常時3G経由のglobalIPを保持している。この状態だと、画面ロック状態でも3G経由のglobalIPできちんとping等に応答する。*1 で、事実上プロバイダが1社で126.240.0.0/12が割り当てられる。このIPアドレス帯域のPort22が開いてるSSHサーバーは、ほぼ確実にJailBreakしたiPhoneであると推測でき、password変更してない場合は例のpasswordで入りたい放題という事になる。 しかもこれ、wifi経由と違って画面ロック状態(バックライト消灯・画面非表示)でも接続可能なのでうっかりSSHを立ち上げたまま放置すると・・・・・。*2 wifiエリア内でしかSSHなんて使わないからpassword変更しなくても大丈夫とか思ってると痛い目にあう
ある程度でかいサービスでDailyCount的な事をやらなきゃいけなくなって、DBに突っ込むとログのお掃除や負荷が大変だからmemcachedでやりたいけど、落ちたらウザいしなー・・・って考えてたらrepcachedを思い出した。YAPC2008でもmixiのkazeburoさんが紹介してたみたい。まぁ寝坊して聞けなかったんだけど。。。 で、ちょっと色々やってみたメモ。まださほど検証してない。 Installとかはほとんど公式のとおりに。memcachedと共存させるためにバイナリ名かえてみた。 ./configure --enable-replication --program-transform-name=s/memcached/repcached/ make make installで、起動。console2つ開いて-vつけて情報表示させつつ。 repcached -v -m 64
大量にアクセスがあってMaxClientを大きく設定したい場合、Apacheの1プロセスあたりのメモリを少なくするのが重要。当然アプリ側で大きなライブラリを読み込まずに画像の変換はGearmandにタスクとして投げたりとかの工夫するのも有効だが、fork元になるApacheの親プロセスと子プロセス間でできる限りCopy on Writeな共有メモリを増やすのも有効。 その辺の詳しい仕組み等の話はnaoyaさんがd:id:naoya:20080212:1202830671でしてるのでそこを参考に。linuxカーネルまわりの仕組みって楽しいよね。会社の案件ではFreeBSDサーバーも結構あるんだけどFreeBSDではどうなるのかは知らない。 で、社内にXenなテストサーバーがあるのでまっさらな環境で色々実験してみた。・・・過程を全部書こうとしたら長くなったので省略。地味にpsしたり/proc/
メモっとく。 use strict; our $hoge = 'HOGE'; my $hoge = 'hoge'; print $hoge; # hoge print ${hoge}; # hoge print $::hoge; # HOGE print $main::hoge; # HOGE print $::main::hoge; # HOGE print ${*hoge{SCALAR}}; # HOGE 型グロブからスカラー変数のリファレンスもらってデリファレンス no strict 'refs'; my $name = 'hoge'; sub name { 'hoge' }; print ${"hoge"}; # HOGE print $$name; # HOGE print ${$name}; # HOGE print ${name()}; # HOGE シンボリックリファレンス
いまいち微妙だけどnyacusのpatch作った。 Win32プログラムと違ってサイズ変更時に WM_SIZING とか飛んできたりしないため、結局プロンプト表示する際にGetConsoleScreenBufferInfoでサイズを取得してリサイズする事にした。リサイズ後、一度何も入力せずにEnterでプロンプト再表示すれば現在の幅でwidthが設定されるはず。 コマンド入力途中に窓大きくしたい場合とかには無理だけど、、そういう場合は『 ^A -> ^K -> Enter -> ^Y 』とかやる感じで。 これでckwで最大化した場合とかに画面端までいっぱいにコマンドが入力できる。80文字の所で変に切れてるのにすごく違和感を感じてたから、とっても快適だ。nyacus最高。 nyacus222a_mod.zip パッチ同梱。オープンソースってこういう時直せるからいいね。
08.12.03追記 最近の性能のいいPCだとckwのConsoleを隠す処理が失敗してConsoleが出たままになったりするようです。 修正したバージョンを公開された方がいらっしゃるようなのでそちらもご参照ください。 d:id:s-yata:20080823:1219474577 http://blogs.wankuma.com/shuujin/archive/2008/10/15/158825.aspx 色々放置ですいません。。。。 /追記 http://nocd5.blog59.fc2.com/blog-entry-195.html で修正したほうがいいところを教えてもらったので、反映してコンパイル。ありがとうございました。 ckw-0.8.10-mod2-bin.zip ckw-0.8.10-mod2-src.zip nocd5さんのbbLean modを使わせてもらっているので、
08.12.03追記 最近の性能のいいPCだとckwのConsoleを隠す処理が失敗してConsoleが出たままになったりするようです。 修正したバージョンを公開された方がいらっしゃるようなのでそちらもご参照ください。 d:id:s-yata:20080823:1219474577 http://blogs.wankuma.com/shuujin/archive/2008/10/15/158825.aspx 色々放置ですいません。。。。 /追記 ※修正版をアップしました。 d:id:hideden:20071123:1195822428 6月の転職を機にメインの作業環境をGentooLinuxに変更して快適なLinuxライフを送っていたのだが、ちょっとわけあって一時的にXPに戻す事になった。今年の初めから5月末まではOSXだったから、久々のWin環境。 何でもかんでもConsole + z
コンパイル遅いからなんとか速くしたい。distccで分散コンパイルすれば速くなるはず。だけど、それだけの為にまわりのPCにLinuxを入れるのも・・・。ってことで、distccを入れたliveCDを作ってみた。 コンパイルだけしてくれればいいので、なるべくコンパクトなものをベースにしたい。Gentooのinstall-x86-minimal-2007.0-r1.isoが58MBとかなりコンパクトなのでこれをベースに使う。emergeが便利なので作業もGentooLinux上で。 $ cd /tmp // 適当なmirrorからISOを落とす $ wget ftp://ftp.ecc.u-tokyo.ac.jp/GENTOO/releases/x86/2007.0/installcd/install-x86-minimal-2007.0-r1.iso # mount -t iso9660 -
nowa画像とか張りづらいのでこっちにメモ。Rubyをメインで使い出してから放置してたけど、久々にログインしたら結構変わっててびっくり。 面倒なので数日前にnowaに書いたのをベースに。 Ubuntu FeistyをThinkPad X61に入れたらBerylでうにうに動かなくて(ホワイトアウトする)気合いでGentoo入れたメモ。 結果からするともしかしたら別にGentooじゃなくてもよかった。結果的にカーネルモジュール+Xorgドライバの再コンパイルで動作したのでUbuntuでコンパイルすりゃよかったかも。 Gentoo入れる まず、emergeで入るものは入れてしまう。とりあえずまだ新しいハードなので、クリティカルそうな 部分に関しては~x86キーワードで出来るだけ新しいのを取ってくる。 sys-kernel/gentoo-sources ~x86 x11-drivers/xf86-
昨日に引き続き、Win32系を。OLEオートメーションでは一部のソフトの操作しかできないため、いわゆるマウス・キー操作マクロのようなモノを実現してみる。使うモジュールはWin32::GuiTest。ActivePerlのppmだと古いバージョンしか登録されていないので、CPANから入れることにする。が、コンパイルが必要なモジュールな為、コンパイル環境作りから始めてみる。 ・・・っと思ったが、せっかくだからShibuya Perl Mongers テクニカルトーク #6で紹介があったPxPerlでやってみることにする。PxPerlのページによると、CPANモジュール用のコンパイラとしてMinGW、MS C++ Compiler、Interl C++ Compiler等が紹介されている。IntelのCompilerが速いって話は良く聞くので使ってみたいなぁっとも思いつつ、商用ダメだったり色々面
ぼーっとClass::DBIのソースを眺めてたら、 @data{@columns} = $self->get(@columns);なんてのがあった。CSVファイルなんかをハッシュの配列にする時とかに、 my @tmp = split /\t/, $_; push(@data, { id => $tmp[0], name => $tmp[1], age => $tmp[2], address => $tmp[3] });とかやってたんだけど、 my @keys = qw/id name age address/; my %tmp; @tmp{@keys} = split /\t/, $_; push(@data, \%tmp);って書けるのねー。毎回コレ書くのめんどくせぇなぁって思ってたんだけど、やっぱこういう書き方があったとは。ちゃんと勉強しなきゃなぁぁぁ。 my @l_time = lo
言語仕様を知っているとか、設計を出来ることももちろん大事だとは思うが、なによりも一番大事なのは『英語を不自由なく読み書きできる』スキルなんだと最近思う。 ある程度以上のレベルを目指す場合、英語が全くわからないがそこそこスキルのあるエンジニアと、技術に関してはまだ初心者レベルだが英語は何の不自由もなく読み書きできる人だと、おそらく後者の方が目標のレベルに達するのは早いかもしれない。 英語のドキュメントを読む場合、脳内で和訳ドキュメントを読む場合の5倍以上の処理コストがかかってる現状をもうちょっと何とかしないとやばいなって思う今日この頃。 ま、『なんで過去の自分はちゃんと英語の勉強をしとかなかったんだ!!』って怒りつつ、『英語なんて今やんなくても将来必要になったらその時やればいいでしょ。』って昔は思ってたんだよなーって事をふと思い出した。結局、現在の自分も過去の自分も面倒な事に対して、とにかく
Perlを使い出すと結構なんでもPerlでやりたくなる。ま、楽だし。でも結構、Windows上でスクリプトのテストや簡単な計算以外で使ってる人ってあんまり見ない気がする。って事で、何気に結構CPAN上にいっぱいあるWin32モジュール群の一部を紹介でもしてみようかなと。とりあえず、まずはOLE*1を使ってIEの自動操作でもやってみよう。 IE操作は、WSH*2などを利用しているのはたまに見かけるが、Perlに慣れたからにはPerlでやってみたい。使うモジュールはWin32::OLE。まぁ、Win32::IE::Mechanizeなんてのもあって、こっちを使う方が圧倒的に楽なんだけど、とりあえずは標準でActivePerlに入ってるWin32::OLEを使ってやってみることにする。 use Win32::OLE; my $ie = Win32::OLE->new('InternetExplo
文字コードの変換とかが面倒なのでCGI.pmを継承して、自動で文字コード変換をしてくれるモジュールを作ってみた。 Perlで他のモジュールを継承するのは簡単。 package CGI_JP_conv; use base qw(CGI); sub new { my $class = shift; my $self = $class->SUPER::new(@_); return $self; } 1;とすればCGIモジュールのすべてのメソッドが呼び出せる。ってことで、paramメソッドにJcodeでの文字コード変換を付けてみる。 package CGI_JP_conv; use base qw(CGI); use strict; use Jcode; sub new { my $class = shift; my $self = $class->SUPER::new(@_); return
このページを最初にブックマークしてみませんか?
『hideden.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く