タグ

ブックマーク / dqn.sakusakutto.jp (25)

  • Goコンパイラを自作して93日でセルフホストを達成した(2回目) · DQNEO日記

    Goコンパイラをゼロから書いてセルフホストを達成しました。(1年ぶり2回目) https://github.com/DQNEO/babygo (ちなみに 前回の話はこちら 「Goコンパイラをゼロから作って147日でセルフホストを達成した」 ) 主な特徴 全部手書き。標準ライブラリも自作。system call 呼び出しも自作。libc非依存。 コンパイルするとアセンブリを吐きます。これをビルドすると単一静的バイナリになります。 設計は、go/parser + chibicicc + α かかった期間 2020/3/29に開始、2020/7/28にセルフホスト達成。 コミットした日 (Author date)を数えたら93日でした。 平均1日2-3時間としてざっくり240 時間 ほど。 前回は500時間かかってるので、今回は半分の期間で達成できたことになります。 なんでまたやろうと思ったの?

    peketamin
    peketamin 2020/07/29
  • プログラマ必見!括弧の読み方一覧 · DQNEO日記

    括弧の読み方に自信がなかったので、調べてみました。 プログラムでよく使われる4つに限ってまとめました。 「アレ」とか呼んだりしちゃっていませんか? 自己流の呼び方をしている人は、すぐ悔い改めましょう。(w 種類日語名1日語名2英語名1英語名2 ( )丸括弧(まるかっこ)小括弧(しょうかっこ)ParenthesesRound brackets { }波括弧(なみかっこ)中括弧(ちゅうかっこ)BracesCurly brackets [ ]角括弧(かくかっこ)大括弧(だいかっこ)Box bracketsSquare brackets 〈 〉山括弧(やまかっこ) Angle brackets 出展: Wikipedia - 括弧 Wikipedia - Bracket 英語名の方は何回見ても覚えられない。。。。><

    peketamin
    peketamin 2019/01/22
  • Git pullを使うべきでない3つの理由 · DQNEO日記

    git pullは使わなくてもよい 初心者はgit pullを使わない方がよい 我々ソフトウェアエンジニアは勉強が大好きなので、コマンドがあるとそれを勉強して使いこなさなければいけないと考えがちですが、ときには「覚えない、使わない」という発想も大事なのではないでしょうか。 以下にその理由をのべます。 git pullは使う必要がない git pullを使わないとできないこと、というのはありません。 使わなくても全然困りません。 git fetchとgit mergeとgit rebaseだけですべての用は足せます。 私はチーム開発でGit格的に使い始めて数か月経ちますが、普段の作業でgit pullを使ったことはないしそれで困ったこともありません。 git pullを使わなければ、余計な落とし穴に落ちない git pullには落とし穴があります。 初心者はたいていその穴に落ちます。 「

    Git pullを使うべきでない3つの理由 · DQNEO日記
    peketamin
    peketamin 2018/01/21
  • Content-type:text/htmlのcharset指定はUTF-8,utf-8,utf8どれが正しいの?調べてみた。 · DQNEO日記

    Home Subscribe UTF-8? utf-8? UTF8? utf8? 気になったので調べてみました。 結論 公式名称は "UTF-8" である。 UTF-8, a transformation format of ISO 10646 大文字小文字は区別されない。 UTF-8でもutf-8でもどちらでもいいようです。 " HTTP character sets are identified by case-insensitive tokens. " Hypertext Transfer Protocol -- HTTP/1.1 したがって、 Shift_JIS/shift_jis EUC-JP/euc-jp どちらでもOKということになります。 気になるあのサイトでは? 世の中的にはこうなっていました。(2011/8/17現在)

    Content-type:text/htmlのcharset指定はUTF-8,utf-8,utf8どれが正しいの?調べてみた。 · DQNEO日記
    peketamin
    peketamin 2017/09/23
  • PHP7から予約語がメソッド名として使えるようになっていた件 · DQNEO日記

    PHPで"echo"とか"list"という名前のメソッドを作って文法エラーになった経験はないでしょうか? ほとんど知られていないのですが、実はPHP7からは"echo",“list"などの予約語がメソッド名として使えるんです。 <?php class Foo { public function list() { echo "list\n"; } public function echo() { echo "echo\n"; } public static function die() { echo "die\n"; } } $foo = new Foo(); $foo->list(); $foo->echo(); Foo::die(); PHP 5だと文法エラーになっていた $ php a.php PHP Parse error: syntax error, unexpected 'lis

    peketamin
    peketamin 2016/01/18
  • [JavaScript] 猿でもわかるクロージャ超入門 1 問題 - DQNEO起業日記

    問題です。 問題: 呼び出すたびに、1,2,3,...を返すような関数 f( )を定義せよ。 f(); // 1 f(); // 2 f(); // 3 この問題、解けますでしょうか? 普通の関数では、できないと思います。 しかし「クロージャ」というのを使えば、このようなことができます。 クロージャって何だ? 「クロージャ」という言葉を、プログラムのやサイトで目にすることがありますよね。 私が最初に見たのは続・初めてのPerl 改訂版(アルパカ)でした。 まったく理解できませんでした。 その後、404 Blog not foundやnaoyaさんのブログなどで「クロージャ」という単語を目にしました。 やはり、まったく分かりませんでした。 とどめの一撃はWikipediaの解説記事。 クロージャ (クロージャー、Closure) は、プログラミング言語において引数以外の変数を実行時の環境

    [JavaScript] 猿でもわかるクロージャ超入門 1 問題 - DQNEO起業日記
    peketamin
    peketamin 2015/07/17
  • PHP5.6からPHP7にアップグレードして実際にはまった点9個 · DQNEO日記

    仕事で使っているPHPアプリケーションをPHP7 beta1で動かしてみたらそのままでは動きませんでした。 私が実際にはまった点を紹介します。 なお、PHP7の変更点についてはhnwさんの記事に詳しく網羅されているのでご一読ください。 PHP7で変わること - hnwの日記 Apacheのモジュール名が変わっていた ApacheにPHPを組み込むためのモジュール(俗にいうmod_php)のモジュール名・ファイル名が変更になっていました。 LoadModule php5_module modules/libphp5.so ↓ LoadModule php7_module modules/libphp7.so memcache extensionがインストールできない PHPからMemcachedを使うためのExtensionには2つあります。 memcache memcached memca

    PHP5.6からPHP7にアップグレードして実際にはまった点9個 · DQNEO日記
    peketamin
    peketamin 2015/07/17
  • cron力をつけよう!全てのcrontab入門者に贈る9個のテクニック · DQNEO日記

    なお、時間設定方法や書式についてはここでは解説しません。 拙作「くろんメーカ」をお使いください。 くろんメーカ - crontab用のコマンドを自動で生成します。 そのままコピペしてお使いください。 crontab -e で直接編集しない 有名な話ですが、crontab -r とやってしまうと全てが一瞬で消え去ります。 まさにバルス! 間違えて crontab -r してしまい、crontab をふっとばしてしまった。つか、隣同士にある -e と -r で編集と削除とか、酷いよ><。。。 crontab -r を安全にする - antipop 必ずローカルファイルに設定を書いたうえで、それを反映させるようにしましょう。 $ crontab -l > ~/crontab # 現在の設定をバックアップ $ vi ~/crontab # ローカルファイルを編集 $ crontab < ~/cro

    cron力をつけよう!全てのcrontab入門者に贈る9個のテクニック · DQNEO日記
    peketamin
    peketamin 2015/04/10
  • git logでコミットメッセージを検索する方法(コミットログでフィルタリング) · DQNEO日記

    git log --grep hoge でコミットログに"hoge"を含むものを抽出できます。 コミットメッセージにRedmineなどのチケット番号を入れるルールで開発している場合は、 git log --grep #12345 とすればチケット#12345に関係するログだけを抽出できます。 大変便利。

    peketamin
    peketamin 2015/03/25
  • vagrant global-status --pruneでゾンビ仮想マシンを削除する · DQNEO日記

    消したはずの仮想マシンが vagrant global-status で表示されてしまう場合、--pruneオプションをつければゴミ掃除してくれます。 vagrant global-status は、存在しない仮想マシンを表示してしまうことがある。 $ vagrant global-status id name provider state directory ------------------------------------------------------------------------- 55f191d default virtualbox poweroff /Users/DQNEO/hoge/kitchen 8486738 default virtualbox running /Users/DQNEO/hoge/kitchen2 2aa592d default virt

  • cdせずに任意のgitレポジトリを操作する-Cオプションの紹介 · DQNEO日記

    例えば、git pullとかするときはcdしてからgit pullする人が多いと思います。 たとえばrbenvをアップデートしたいとき、 $ cd ~/.rbenv $ git pull $ cd ~/.rbenv/plugins/ruby-build $ git pull なんてしますよね。 でもいちいち cd するの面倒くさいと思いませんか? 実はgitには -C オプションというのがあって、これを使うと cd せずにレポジトリの場所を指定することができます。 git -C <レポジトリの場所> サブコマンド という風に使います。 なので、さっきの rbenvを更新する例はこのように書けます。 $ git -C ~/.rbenv pull $ git -C ~/.rbenv/plugins/ruby-build pull シェルスクリプとかcrontabから git を実行するときは大

    peketamin
    peketamin 2014/10/19
  • Chef-Soloはオワコンになりlocal modeが今後の主流になるとのこと · DQNEO日記

    ブログ書きました → Chef-Soloを100倍楽しく使うためのrsoloというツールを作りました。 http://t.co/GI1DrlMx8O #chef #knifesolo — DQNEO.php (@DQNEO) September 27, 2014 @DQNEO ご存知かもしれませんが参考までにどうぞ(最近の流れだとchef-solo -> chef local mode): http://t.co/wNvSJz3iOR — Shuhei Tanuma (@chobi_e) September 27, 2014 全俺が泣いた。 SoloからZeroへ。Chef Client Local Modeに移行しましょう 詳しくはChef公式ブログの記事に書かれています。 From Solo to Zero: Migrating to Chef Client Local Mode Ch

    Chef-Soloはオワコンになりlocal modeが今後の主流になるとのこと · DQNEO日記
    peketamin
    peketamin 2014/10/02
  • Chef-Soloを100倍楽しく使うためのrsoloというツールを作りました。 · DQNEO日記

    "rsolo"というツールを作りました。一言でいうと "knife-soloのシェルスクリプト版"です。 https://github.com/DQNEO/rsolo bashで書いた1枚スクリプトなのでインストールが超簡単です。 rubyなしで動きます。 なので、 「 knife-soloをインストールするためのGemfileを書くためのbundlerをインストールするためのgemをインストールするためのrubyをインストールするためのrbenvをインストーするための、えーと人生ってなんだっけ」 という苦行からあなたを開放してくれます。 Let's not do yakshaving !! インストールが超簡単! ダウンロードして実行権限をつけてパスを通すだけ! $ curl -sO https://raw.githubusercontent.com/DQNEO/rsolo/master

    Chef-Soloを100倍楽しく使うためのrsoloというツールを作りました。 · DQNEO日記
    peketamin
    peketamin 2014/09/28
  • 簡単!MacOSXやLinuxにChef,Knife,Berkshelfを一発でインストールしてくれるChefDKの紹介 · DQNEO日記

    Home Subscribe 最近 ChefDKという全部入りパッケージがリリースされたので、これで一発です。 http://www.getchef.com/downloads/chef-dk/ CentOS6だとこんな感じで一発です。 sudo rpm -ivh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.3.0-1.x86_64.rpm rubyとかrbenvとかgemとかの環境について頭を悩ませる必要がないのでとても楽です。 ちなみにChefDKを使わずに自力でこれらをインストールしようとするとどうなるかというと、すごい時間がかかります。 とくにBerkshelfが依存しているライブラリで"dep-selector-libgecode" というのがものすごい怪物のようなしろもので、コンパ

    簡単!MacOSXやLinuxにChef,Knife,Berkshelfを一発でインストールしてくれるChefDKの紹介 · DQNEO日記
    peketamin
    peketamin 2014/05/18
  • rbenv rehashは何をやっているのか? · DQNEO日記

    端的にいうと、 「~/.rbenv/versions/2.x.y/bin/ 以下に置いてあるコマンド群を ~/.rbenv/shims/以下に置いて使えるようにする」 ことです。 例えば、rbenvとRubyBuildruby2.1.0をインストールした直後だと、~/.rbenv/shimsは下記のような状態です。 $ ls ~/.rbenv/shims erb* gem* irb* rake* rdoc* ri* ruby* testrb* この状態で "gem install chef", "gem install berkshelf"などとすると、~/.rbenv/versions/2.1.0/bin/ の方にコマンドが入ります。 $ ls ~/.rbenv/versions/2.1.0/bin berks* chef-service-manager* chef-zero* eru

    rbenv rehashは何をやっているのか? · DQNEO日記
  • BerkshelfとChefのインストールに苦労した話 - DQNEO起業日記

    例えばberkshelfひとつ入れるのに、膨大な知識がいる。 もしあなたが単にPHPサーバを作りたいだけだったとしても、berkshelfをちゃんとしたモダンなやり方でいれるには膨大な知識がいる。 例えばruby, rbenv, ruby-build, gem, bundlerなどだ。 まあ、rbenvとruby-buildで最新のrubyを入れること自体はそんなに難しくない。Ruby言語の知識も必要ない。 運よくgem install berkshelfが一発で成功したら、別に問題はない。おめでとう。 そういう人はここから下は読む必要はないです。 ところがである。 ひとたびgem installが失敗したら、そこからは茨の道である。 インフラの問題 gem installしたら "ERROR: Could not find a valid gem 'chef-solo' (>= 0) i

    BerkshelfとChefのインストールに苦労した話 - DQNEO起業日記
    peketamin
    peketamin 2013/12/30
  • ソースコード20万行の大規模サイトのPHPを5.1から5.4に上げるためにやったことまとめ · DQNEO日記

    所要期間 着手しはじめたのが2010年12月ごろ、完了したのが2013年9月だったので何と3年近くかかったことになります。 長引いた原因は、日々の機能追加や運用をしながら孤独に片手間で細々とやってたからです。(単純に人手不足とも言う) また、PHPバージョンアップと同時にCentOSサーバを5から6にあげることにしたのでサーバ再構築のための工数も含まれています。 後半は仕事仲間が増えてその人が専業でバージョンアップ作業をやってくれたのでだいぶ楽できました。 それと専任のテスターさんたちにも参加していただいたので番で大きなトラブルなく完了することができました。 感謝感謝です。 サーバ入れ替え作業が終わってPHP5.1の入った古いサーバを削除したときの、まさに「技術的負債」を返済し終わった瞬間の、あのスッキリ感、もう言葉にはできません。 終わってみてこの件に関するRedmineのチケットを数

    ソースコード20万行の大規模サイトのPHPを5.1から5.4に上げるためにやったことまとめ · DQNEO日記
    peketamin
    peketamin 2013/11/18
  • JavaScriptの「ケツカンマ問題」まとめ · DQNEO日記

    なぜIE6,7(とIE8の配列)ではケツカンマが正しく動かないのか 結論からいうと、「それがJScriptの仕様である」ということになるかと思います。 後述のとおりECMAScript3の仕様書はケツカンマなしなので、IE(=Jscript)がそのような仕様になっていても間違いではないということになります。 ひとつだけ納得がいかないのは、IE(=Jscript)は配列ケツカンマとオブジェクトケツカンマで挙動が異なるのです。 var list = ['a' , 'b', ]; // → 要素3個のarrayが生成される。 var obj = { a : 1, b : 2, }; // → 文法エラー この仕様はなんか中途半端な気がします。 ECMAScriptの仕様はどうなっているのか ECMAScript3 Standard ECMA-262 3rd Edition-December199

  • いい加減、<script src="http://.. と書くのはやめましょう - DQNEO起業日記

    外部サイトのJSファイルを読み込むときに、こういう書き方するのはやめましょう。 <script src="http://example.com/js/jquery.js"></script> 理由 あなたのサイトが、いつの日かSSLに対応することになったとき、そのscriptタグがバグの原因になります。 ご覧のとおり、HTTPSページの中でHTTP要素を読み込もうとすると、ブラウザによっては安全装置が働いて読み込んでくれないのです。 上の例ではjQueryの読み込みに失敗していますが、エラーメッセージ「Uncaught ReferenceError: jQuery is not defined 」を見てもHTTPS/HTTPのプロトコルが原因だとはすぐ気づかないので、わかりにくいバグになってしまいます。 結論 JSファイル(とかCSSとか画像とか)を読み込むときは、"http:"の部分を省

  • else句を使わないのが良いコードなの?いや、そんなはずは・・・ · DQNEO日記

    if (条件) { return 20; } else { return 30; } ↓ if (条件) return 20; return 30; こうすれば確かにネストは浅くなりますが、いつも毎回こう書く方がよいのでしょうか? elseを書いた方がよいケースもあるのではないか 条件の部分が特殊・例外的な場合は、確かにこの方がわかりやすいと思います。 例えば、スーパーマリオで、マリオの状態が「無敵・チビ・大きい」の3種類しかないとします。 敵に触れたときの挙動を関数として書きます。 (オブジェクト指向っぽくないかもしれませんが、記事の主眼はif-elseの書き方です。) function () { if (マリオ.is無敵モード) { 敵.死ぬ(); return ; } //以下、通常モードの場合のコードを書く } 無敵モードは特殊な状態だから、これはよいと思います。 しかし、マリオ

    peketamin
    peketamin 2013/01/12