JavaScriptの小技集とかって記事を参考になるなって見てる人とは仕事したくない。
久しぶりの日記
あれ、いつも書いてるな~というJavaScript の小技集 | バシャログ。
配列からランダムで値を取り出す
Math.floorが抜けてるからnullが返って来る
等差数列の配列を作る
すごく見にくい。普通にforループでええやん
A-Zのアルファベットと英数字からランダムな文字列を取得する
そうかくならwhile(len--)のほうがスマートなのでは?!!?
配列をシャッフルする
すっごく偏る http://ideone.com/uB1GJk
もう疲れた。この記事に載ってる処理のほとんどがunderscore.jsで関数1個とかに置き換えられるのでお勧めです。
Wikipediaのリンク最短経路を探索するウェブアプリを公開しました。
なんかGWの4日くらい消費して、半年近くフロントエンドエンジニアしてたせいでプログラミング能力が恐ろしく落ちているのを実感しました。
アルゴリズムとか詳細
計算機触った人ならだれもが尊敬するダイクストラ様のアルゴリズムを借用しています。 Celeron G530の1コアで1クエリあたり500msで処理出来ます。 始点が一緒なら終点が違う経路探索は計算結果を使いまわせるのですが、ダイクストラ法の計算結果が1MB近くのサイズになり、それをキャッシュして管理するのが面倒なのでしていません。代わりに、分散処理が容易になるようにRedisのRPUSH/BLPOPとPub/Sub(後述)を使っています。
Redis RPUSH/BLPOPとPub/Sub
- WebAppはリクエストを受け取った時点でPub/Subでサブスクリプションして、メッセージを待つ。
- WebAppはリクエストをRPUSHでジョブキューを追加して、ワーカーはBLPOPでジョブを受け取る。
- ワーカーは受け取ったジョブをこなしてPub/Subのパブリッシュでメッセージを送信。
- WebAppはPub/Subのメッセージを受信しレスポンスを返す。
といった感じで処理しています。正確には最終的な結果をキャッシュしているのでもう少し複雑ですが。
Debian SqueezeにRedis 2.6をインストール
ほとんど公式ドキュメントのまま。 ビルドするのにbuild-essential、テストにtclが必要なので最初にインストールしてる。 redis-2.6.xx.tar.gzの部分は公式ドキュメントから安定版の最新を各自取得してください。
$ sudo apt-get install -y build-essential tcl $ wget http://redis.googlecode.com/files/redis-2.6.xx.tar.gz $ tar xzf redis-2.6.13.tar.gz $ cd redis-2.6.13 $ make $ make test \o/ All tests passed without errors! $ sudo make install
mysqlとmongodbサーバー構築メモ
自宅サーバーにmongodbとmysqlをインストールしたのでメモ。同じディスクでmongodbもmysql も使いたい!という奇特な人向け。
DBディスクはLVMを使う
mysqlでinnodbを使っていて、なおかつmongodbでジャーナルをオンにしている場合、バックアップはLVM Snapshot一発でイケるから楽でよい。確認していないけどredisもジャーナルをオンにしたら同じようにSnapshotだけでバックアップできると思う。
DBディスクはマウントオプションにnoatimeをつける
atime(最終アクセス日時)はmtime(更新日時)あるからいらない子だよねーという話。 MongoDB イン・アクションの10章に書いてあった。 もちろんnoctimeとかnomtimeとかして死んでも知りません。
ファイルシステムはext4を使う マウントオプションにnobarrierをつける
mongodbをext3で使うとpreallocateで死にます。また、mysqlをext4やxfsで使うとI/Oバリアで3倍遅くなります。なのでext4でI/Oバリアを無効にして使うようにします。
ファイルディスクリプタを増やす
デフォルトだと1プロセルのファイルディスクリプタの上限は1024とかそこら辺らしいので10倍くらいにする。limits.confで編集する。これもmongodb イン・アクションに書いてあった。
- 作者: Kyle Banker,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/12/14
- メディア: 大型本
- 購入: 5人 クリック: 55回
- この商品を含むブログ (4件) を見る
LVMで2TiB以上のドライブを追加
4月1日から神奈川ケーブルテレビがTOKYO MXのパススルーを始めたらしく、ハイビジョンスパイラルが本格化したので、TS置き場に後から容易にディスクを追加できるLVMを導入した。 高収入を得られたら、こんなかんじのハードウェア構成でZFSなNAS導入する予定なので、今回は冗長化も何も無いその場しのぎ構成。 環境はDebain squeezeで追加するディスクはWD Red 3TB 1本。/dev/sdbとして認識されている。
1.LVMパーティションを作る
2TiB以上のパーティションをfdiskは作れないのでpartedコマンドを用いる。 同じ理由でMBRからGPTにしてる。
# apt-get install parted -y # parted /dev/sdb GNU Parted 2.3 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? yes (parted) mkpart primary 0 -0 #0 -0で最大容量指定 Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel? Ignore #単位書いて無いけとまちがっていないか?という旨の警告らしい (parted) set 1 lvm on (parted) print Model: ATA WDC WD30EFRX-68A (scsi) Disk /dev/sdb: 3001GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 3001GB 3001GB primary lvm (parted) quit Information: You may need to update /etc/fstab.
2.PVを作る
LVMのPhysical Volumeを作成する。lvm関連のコマンドが入ってなかったので最初にインストールしてる。
# apt-get install lvm2 -y # pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created # pvdisplay /dev/sdb1 "/dev/sdb1" is a new physical volume of "2.73 TiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 2.73 TiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID **********************
3.VGを作る
Volume Groupを作成する。PEサイズはなんとなく16Mにしてみた。
# vgcreate -s 16m tateya /dev/sdb1 Volume group "tateya" successfully created # vgdisplay tateya --- Volume group --- VG Name tateya System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 2.73 TiB PE Size 16.00 MiB Total PE 178849 Alloc PE / Size 0 / 0 Free PE / Size 178849 / 2.73 TiB VG UUID *****************
4.LVを作る
Logical Volumeを作成する。
# lvcreate -n tateya -l 100%FREE tateya #-l 100%FREEで最大容量になる Logical volume "tateya" created # lvdisplay --- Logical volume --- LV Name /dev/tateya/tateya VG Name tateya LV UUID *************************** LV Write Access read/write LV Status available # open 0 LV Size 2.73 TiB Current LE 178849 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:0
5.ファイルシステムを作ってマウント
最後にファイルシステムを作ってマウントする。ファイルシステムはext4でマウントポイントは/
# mkfs.ext4 /dev/tateya/tateya mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=1 blocks, Stripe width=0 blocks 183148544 inodes, 732565504 blocks 36628275 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 22357 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # mkdir /mnt/tateya # mount /dev/tateya/tateya /mnt/tateya/ # df -h Filesystem Size Used Avail Use% マウント位置 /dev/sda1 222G 683M 210G 1% / tmpfs 2.0G 0 2.0G 0% /lib/init/rw udev 2.0G 128K 2.0G 1% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/mapper/tateya-tateya 2.7T 201M 2.6T 1% /mnt/tateya
あとは/etc/fstab編集する。
blkid /dev/tateya/tateya
でfstabに追加すべきUUIDが調べられる。
RTX1100にSSH接続するとき便利なコマンドcocot
RTX1100にSSH接続すると、ありがたいことに日本語で喋ってくれる。 しかし文字エンコードがSJISであり、シェルはUTF8なので当然日本語でおk状態になる。 こういう時cocotコマンドが便利。Macならportとかでインストールできる。
cocot -t UTF-8 -p SJIS ssh 192.168.0.1 -ladmin
-tに出力(シェル)側の文字エンコード、-pにサーバー側の文字エンコードを指定する
ML110 g7がSSDを認識しないときの対処法
GWなのでML110 G7いじってたら、SSDを認識しない。 Intel SSD 520 240GBを挿してると、起動時プログレスバーの最後のほうでフリーズしてしまう。
これは、SATAがIDEモードになってるのが原因らしいので、一旦SSDを抜いて、起動時F9を押しBIOSを起動。
Advance Options→SATA Contoroller Options→Embedded SATA ConfigurationをEnable SATA Legacy Support
からEnable SATA AHCI Support
に変更。警告出るけどRAID有効にしたらデータ消し飛ぶとの事なので気にしない。ESC→F10で保存して再起動。
再起動後も一回電源落としてSSD挿して起動したらキチンと認識しました。
おまけ
http://www.intel.co.jp/content/www/jp/ja/solid-state-drives/solid-state-drives-dc-s3700-series.html
一貫してすごい
Intel SSD 520 Series(Cherryville) 240GB 2.5inch Bulk SSDSC2CW240A310
- 出版社/メーカー: インテル
- 発売日: 2012/02/07
- メディア: Personal Computers
- クリック: 2回
- この商品を含むブログを見る
INTEL BLK SSD DC S3700 Series 2.5inch 7mm厚 400GB SSDSC2BA400G301
- 出版社/メーカー: インテル
- メディア: 付属品
- この商品を含むブログを見る