2014年3月21日金曜日

FC2ブログのソースコード

FC2ブログがソースをオープンソース(MITライセンス)にて公開したとのこと。
【ブログ】「FC2ブログ」をオープンソースで公開!より自由にカスタマイズ可能!

githubのソースコードはこちら。
https://github.com/fc2blog/blog


2014年3月13日木曜日

些末なコードレビュー - naoyaのはてなダイアリー

些末なコードレビュー - naoyaのはてなダイアリー
これは確かに難しい問題だと思う。スキルの問題ではあると思うが、レビューの際には致命的な設計上の欠陥よりも、些細な書き方の悪さのほうが気づきやすいということもあって、こういう感じのレビューになりがちなのは反省しなければならないところだ。

ただ、とは言えさすがにかんべんして欲しいレベルのひどい書き方もあるからな~。
例えば、

  1. キャメルケース(getHogeなど)とスネークケース(get_hogeなど)が同じモジュールに混在している
  2. unless句の中が複雑すぎてベン図を書かないとわからないレベル(unless(!$hoge && (!$bar || $foo))など)
  3. 何でもかんでも変数をぶち込んだ巨大ハッシュリファレンスをテンプレートに渡している
  4. 一つの関数が巨大化しすぎてもう読むのが嫌なレベル

とかもうかんべんして欲しい感じ。あんまり細かく指摘し過ぎると宗教みたいになるのでさじ加減が難しいところ。



2014年3月4日火曜日

ビットコイン取引所Mt. Goxのソースコード

ロシア人のハッカーがビットコイン取引所Mt. Goxのソースコードの取得に成功したようだ。
ロシアのハッカー、破綻したMt. Goxのソースコードと顧客データを入手したと主張

ソースコードはこれ。PHPで書かれているようだ。
http://pastebin.com/W8B3CGiN

function一覧はこんな感じ。業務がわからないと、内容さっぱりわからないな。
        public static function update() {
        public static function getRate() {
        public static function mergeSmallOutputs() {
        public static function splitBigOutputs() {
        public static function getTxInput($amount, $inputs = array()) {
        public static function getPaymentAddr($payment_id) {
        public static function getNullAddr($priv = false) {
        public static function getVerboseAddr($wallet, $description, $ipn = null, $user = null, $callback = null) {
        public static function getPermanentAddr($wallet, $user = null) {
        public static function getAddrWithOptions(\User\Wallet $wallet, array $options = [], \User $user = null) {
        public static function optionAddrEvent($addr, $hash_n, $block, $amount) {
        public static function optionAddrSellEmail($user, $oid, $type, $data = null) {
        public static function checkOrders() {
        public static function getAddressForOrder($order) {
        public static function sendAmount($address, $amount, $green = null, $inputs = array(), $fee = 0) {        public function getWalletHost() {
        public static function parseVersion($v) {
        public static function _Route_getStats($path) {
        public static function checkNodes($sched) {
        public static function importBlockClaim($hash, $n, $tx) {
        public static function parseScriptPubKey($pubkey) {
        public static function importBlock($id) {
        public static function importBlocks($scheduler) {
        public static function insertMisingAvailableOutputs($addr) {
        public static function runAddrTriggers() {
        public static function getAddressBalance($addr) {
        public static function getAddressOutputs($addr) {
        public static function claimPrivateSha256($wallet, $priv, $desc = null) {
        public static function claimWalletFile($wallet, $data, $desc = null) {        public static function claimPrivate($wallet, $priv, $desc = null) {
        public static function makeNormalTx($input, $amount, $final_output, $remainder, $fee = 0) {
        public static function publishTransaction($txs) {
        public static function broadcastPublished() {
        public static function _MQ_broadcastPublished($info) {
        public static function broadcastTransactions() {
        public static function getTotalCount() {
        public static function _Route_bitcoind($path) {
        public static function _Route_handleTx() {
        public static function getTablesStruct() {

ざっと見ていって適当にメモってみると、
balanceというのは残高のこと。
100000000などのマジックナンバーが何を意味しているのかよくわからない。1億ってなんだ?
$beanやらaddressというのは何を表しているのだろう?

頑張ってみれば、プログラムの穴も見つけられるかもしれないが、適当に覗いただけだと
よくわからんな。業務内容がよくわからないし。



2014年2月4日火曜日

FindBinモジュールの使い方

FindBinモジュールはスクリプトの実行ファイルやディレクトリを変数に格納するモジュール。
以下のコマンドを実行してみるとわかりやすいかと。

vim /hoge/test.pl
で以下のファイルを作成。
use FindBin;
print "Bin: $FindBin::Bin\n";
print "Script: $FindBin::Script\n";

コマンドを実行。
perl /hoge/test.pl

実行結果:
Bin: /hoge
Script: test.pl

cpanサイトはこれ。
http://search.cpan.org/~rjbs/perl-5.18.2/lib/FindBin.pm

Path::Classモジュールの使い方

Path::Classモジュールの使い方がよくわからなかったので調べていたら、CPANのSYNOPSISを見るのが一番わかりやすいという結論になった。
このモジュールはWindowsでもLinuxでもディレクトリやファイルのパス名をよしなに生成してくれるモジュールのようだ。
以下のワンライナーを実行してみればわかりやすいかと。

perl -MPath::Class -e '
my $dir  = dir('foo', 'bar');
my $file = file('bob', 'file.txt');
print "dir: $dir\n";
print "file: $file\n";
'
出力結果:
dir: foo/bar
file: bob/txt

これがwindows環境で実行すれば
dir: foo\bar
file: bob\txt
となるというのがこのモジュールを使うメリット。

cpanサイトはこれ。
http://search.cpan.org/~kwilliams/Path-Class-0.33/README.pod


2014年1月31日金曜日

Setting locale failedの対処法

サーバーでPerlのコマンドを打つたびにこのような表示が出て困っている。

$perl -e 'print "hoge"'
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "*******"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

どうやら以下の手順で直すことができるようだ。

$vim ~/.bashrc
でファイルに下記を記載する。
export PERL_BADLANG=0

$source ~/.bashrc

これで直った。



2014年1月6日月曜日

スクリプトの終了コード11のエラー

最初ググり方がわからなくて当惑したのでメモ。
このエラーはSignal 11、segmentation faultとして知られているエラー。
つまり割り当てられていないメモリを参照しようとしたときに起きるもの。下記参照。
http://linuxjf.sourceforge.jp/JFdocs/GCC-SIG11-FAQ/sig11faq.html
http://sonic64.com/2005-04-19.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1288299487