タグ

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

  • LTSVログをパースする最強のワンライナー集 · DQNEO日記

    最初に結論 これ最強 cat accesslog | perl -F'\t' -nale '%h=map{split/:/,$_,2}@F;print"$h{time}\t$h{ua}"' なぜPerlワンライナーなのか? LTSVログを解析するには、Perlのワンライナーに限る。 なぜならPerlはほとんどのサーバにデフォルトで入ってるから。 Perl 5.8で動くワンライナーを覚えておけばどの環境でも使える。 「何にも依存しない」 これ最強。 基中のキホン まずは基形です。 これだけは絶対覚えてしまいましょう。 perl -nale 'print' % cat access_log | perl -nale 'print ' time:[22/Feb/2014:15:13:07 +0900] host:10.10.200.102 ident:- user:- method:GET

    LTSVログをパースする最強のワンライナー集 · DQNEO日記
    n2s
    n2s 2019/01/09
  • Mac OSXやLinuxにplenvとperl5.22とcpanmをインストールする方法 · DQNEO日記

    # plenvを取得 git clone https://github.com/tokuhirom/plenv.git ~/.plenv/ # Perl-Buildを取得 git clone https://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/ # 初期設定をする # - Bashを使っている場合 echo 'export PATH=~/.plenv/bin:~/.plenv/shims/:$PATH' >> ~/.bash_profile echo 'eval "$(plenv init -)"' >> ~/.bash_profile # - Zshを使っている場合 echo 'export PATH=~/.plenv/bin:~/.plenv/shims/:$PATH' >> ~/.zshrc

    Mac OSXやLinuxにplenvとperl5.22とcpanmをインストールする方法 · DQNEO日記
    n2s
    n2s 2015/12/28
  • ソースコード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日記
    n2s
    n2s 2013/11/18
  • Gitの驚愕の真実:1億行のファイルに1行追記するとレポジトリ容量が200MB増える[※補足あり] · DQNEO日記

    1億行のファイルに1行追記するだけでレポジトリ容量が2倍になった 以前の記事「Gitレポジトリはパッチの集積ではなくてスナップショットの集積である。」を確認するために、1億行のファイルを作って実験してみました。 結果は、なんと1行追記しただけでレポジトリ容量が200MB増加し、サイズが2倍になりました。 実験手順 空のレポジトリを作る 1億行のファイルを作ってgit addしてgit commit コミットする そのファイルに1行だけ追記してgit addして git commitする 空のレポジトリを作る $ git init 1億行のファイルを作る 1億行のファイル(1から1億までの数字が書かれたファイル)を作ります。 $ seq 1 100000000 > numbers.txt この時点で、ワーキングツリーとレポジトリ容量を調べてみます。 $ ls -lh 合計 848M -rw-

    Gitの驚愕の真実:1億行のファイルに1行追記するとレポジトリ容量が200MB増える[※補足あり] · DQNEO日記
    n2s
    n2s 2013/11/01
    多分「git gcという素晴らしいコマンドがありまして」とか言っても、この人や「パッチの集積かと思ってた」などとブコメする人の不満は解決しないだろうね。
  • [ShellScript] $?をif-elifで使ったら死ぬよ!! · DQNEO日記

    実行結果 "Unknown Error 1" あれ?? ちょww 一瞬目が点になりました。 FatalErrorをキャッチしたと思ったら、キャッチできていません。 どういうこと? こういうことです。 #!/bin/sh func () { # Fatal Error return 3 } func if [ $? -eq 3 ] ;then echo "Unknown Error $?" fi 実行結果 Unknown Error 0 そう、if の条件式が、「コマンド」であることを忘れていました。 []コマンドは「コマンド」なので、これを実行した結果のステータスコード が $?に再代入されてしまっているのです。 正しい書き方 $?をすぐに一時変数に代入してやれば、期待通りの結果が得られます。 #!/bin/sh func () { # Fatal Error return 3 } fun

    [ShellScript] $?をif-elifで使ったら死ぬよ!! · DQNEO日記
    n2s
    n2s 2013/10/31
    「ret=$?」するべし、と。/regexp/ の後 $1 をずっと使ってると危ないのと似ているような。
  • [Git] HEADの代わりに@が使えるようになったYO! · DQNEO日記

    Git 1.8.5から、HEADと書くかわりに@が使えるようになったようです。 Instead of typing four capital letters "HEAD", you can say "@" now, e.g. "git log @". https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.5.txt 試してみた git log $ git log -1 @ commit db9bdfbeb044f73a01f6325f4ad61413666a2ce0 Author: Junio C Hamano <gitster@*****.***> Date: Fri Oct 18 13:53:05 2013 -0700 Update draft release notes to 1.8.5 Signed-of

    [Git] HEADの代わりに@が使えるようになったYO! · DQNEO日記
    n2s
    n2s 2013/10/24
    1.8.5から。<del>現時点でrcも出てないが楽しみ。<del/>(10/31)rc0来ました。
  • git diffで、異なるブランチの異なるファイルを比較する方法 · DQNEO日記

    "ブランチ名:ファイルパス名" という表記を使えば簡単です。 例:br1ブランチのfoo/bar.tx と br2ブランチのhoge/fuga.txtを比較したい git diff br1:foo/bar.txt br2:hoge/fuga.txt ちなみに異なるブランチ間の同じファイルを比較する場合は、 git diff br1 br2 foo/bar.txt のように書けます。

    git diffで、異なるブランチの異なるファイルを比較する方法 · DQNEO日記
    n2s
    n2s 2013/08/09
  • 目からうろこ!日本一わかりやすくGitの本質を解説してみた · DQNEO日記

    Git質は「コミットオブジェクトのチェーン」 コミットには親子関係がある。 子は親を参照している。 子の名前(=コミットハッシュ値)が特定できれば先祖をたどれる。 コミットオブジェクトがチェーンのようにつながっているので、「コミットオブジェクト・チェーン」と理解しましょう Gitとは、コミットオブジェクトのチェーンなのです。 (専門的には「オブジェクトグラフ」と言います) ブランチとは枝のことではない ほとんどの初心者が勘違いしていますが、ブランチとは「枝」のことではありません。 ブランチの正体は「立て看板」です。 「ラベル」といってもよいでしょう。 それは、コミットオブジェクトにつけられらた「別名」のことです。 下記の図でいうと、"branchX"とはコミット"C"を指します。 「アメリカ大統領」という言葉と「バラク・オバマ」という言葉は、同一人物を指しますよね? まさにそれといっし

    目からうろこ!日本一わかりやすくGitの本質を解説してみた · DQNEO日記
    n2s
    n2s 2012/12/05
    徳川家までその矢印で繋げたのは斬新だな。養子=rebaseってか?w
  • 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日記
    n2s
    n2s 2012/11/15
    pullの代わりにfetch, merge, rebaseの組み合わせで運用、と / 「gitの操作に馴れてきて、『git fetchしてからgit mergeするのめんどくせー』と思い始めたらそのときにはじめてgit pullを使ってみましょう」概念の勉強にはいいかも
  • 仕事で使ってる巨大SVNレポジトリをGithubに移管するためにやったことまとめ · DQNEO日記

    動機 Subversionで困ってない ぶっちゃけSubversionで全然困っていませんでした。 コードレビューはちゃんとやっていたし、マージ・ブランチングも自作シェルスクリプトのおかげてスムーズにやれていました。 よく「Gitはマージが賢い、ブランチ作成が一瞬でできる」とかいわれますが、Subversionだってちゃんと使えばコンフリクトなんかめったに起きないし、ブランチ管理・マージだって全然めんどくさくない。 特にver1.7からはサーバもクライアントも大幅に高速化されたし、.svnディレクトリが.gitみたいに1個になったし、rebaseみたいなことだってできる。(sync merge & reintegrate) ただ、世の中が一斉にGitにシフトしている中でいつまでもSubversionを使っててよいのかという不安がありました。 また、月から金までSubversionにどっぷり

    仕事で使ってる巨大SVNレポジトリをGithubに移管するためにやったことまとめ · DQNEO日記
  • 引数なしのgit pushは危険なので気をつけましょう · DQNEO日記

    絨毯爆撃pushの例 いまmasterブランチに、未プッシュのコミットがあるとします。 ここで、新たにbr1ブランチを作ってチェックアウトします。 $ git checkout -b br1 master $ git branch * br1 master br1ブランチでコミットを作ります。 echo hello >> hello.txt git add . git ci -m "add file" 引数なしでプッシュします。 git push すると、どこに何がpushされると思いますか? 実は、master -> masterにpushされます。 masterがまだpushできる状態でない場合、これはかなり痛い。すごく痛い。頭が頭痛でおなかが腹痛。 しかもpushしたかった当のbr1ブランチはpushされないというオチ。(リモートにbr1ブランチがない限りは) この挙動は大半のユーザ

    引数なしのgit pushは危険なので気をつけましょう · DQNEO日記
    n2s
    n2s 2012/10/17
  • Git超入門 - 猿でもできるGit rebase · DQNEO日記

    むちゃくちゃわかりやすい例を考えてみた 今あなたは、羊を数えるプロジェクトをGitで開始しました。 羊を1匹数えるごとに1コミットして、3コミットまで終わりました。 ひつじが1ぴき (←1コミット目) ひつじが2ひき (←2コミット目) ひつじが3ひき (←3コミット目) masterブランチ歴史 (左から右に進みます) 1ぴき 2ひき 3ひき ○ - ○ - ○ ワイルドプログラマ、wildブランチを作る ここで突然ワイルドプログラマのスギちゃんが登場します。 スギちゃんは、masterブランチをもとにwildブランチを作成して、そこで1コミットずつ発言をワイルドに変えてしまいました。 ひつじが1ぴきだぜぃ ひつじが2ひきだぜぃ ひつじが3ひきだぜぃ wildブランチ歴史 (左から右に進みます) 1ぴき 2ひき 3ひき 1ワイルド 2ワイルド 3ワイルド ○ - ○ - ○ -

    Git超入門 - 猿でもできるGit rebase · DQNEO日記
    n2s
    n2s 2012/10/13
  • いい加減、>/dev/null 2>&1と書くのをやめたらどうか (追記あり) · DQNEO日記

    はじめに これから書く内容は、シェルスクリプトをばりばり書いている現場(サーバエンジニアインフラエンジニア)向けのものではありません。 年に数回crontabをいじるような現場(サーバに詳しくないアプリケーションプログラマが多数を占めるような現場とか、Webデザイナや非プログラマがcrontabをおそるおそるいじったりするような現場)を想定しています。 >/dev/null 2>&1 の問題点 この記法の問題点は、「覚えにくい、間違えやすい、間違ってても気づかない」ということです。 初心者を迷わせる要素がこんなにあります。 >/dev/nullは先か後か 1と2はどちらが先か &はどこに書くのか よって下記のように多種多様なミスが起こり得ます。 2>&1 >/dev/null >/dev/null 1>&2 >/dev/null 2>1& >/dev/null &2>1 これをぱっと見て

    いい加減、>/dev/null 2>&1と書くのをやめたらどうか (追記あり) · DQNEO日記
    n2s
    n2s 2012/06/19
    「1>/deb/null 2>/dev/null」興味深いけどDRYじゃないからやっぱ「>&/dev/null」が一番かな。最近までbashにこの記法がなかっただなんて可哀想だ / しかしシェルのリダイレクト系は楽しいねぇ。
  • 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日記
    n2s
    n2s 2012/06/19
    crontab -rはいいかげんy/nで尋ねるようにすべき
  • MongoDBをext3とext4でベンチマークしてみたらext4が圧勝だった。 · DQNEO日記

    マシン:ニフティクラウド サーバタイプmini [1vCPU(1GHz)・512MB] ディスク:Disk200 B OS:CentOS release 6.2 (64bit) MongoDB: mongodb-linux-x86_64-1.6.4 実験方法 マシン内で mongod(サーバ)を1プロセス起動する。 mongoシェルを3つ立ち上げる。 mongoシェルから次のようなsaveクエリを無限ループで投げ続ける。 > var x = { a : new Date() , b:(new Date()).toString(), c: 'hoge hoge foobar' , d: 1234567890 }; > while (1) { db.foo.save({ x : x, t : new Date()}) } サーバのログファイルに書かれたアロケーション所要時間を記録。 Wed A

    MongoDBをext3とext4でベンチマークしてみたらext4が圧勝だった。 · DQNEO日記
    n2s
    n2s 2012/04/25
    ext4すごい
  • Git/Github超入門:猿でもできるPull Request · DQNEO日記

    Git/Github初心者のみなさんこんにちわ! Pull Requestを送ってみたいけど、やり方がわからない? 間違ったPull Requesするのがこわくて躊躇している? もったいない! そんなみなさんに、Pull Requestを送るための最小の手順をご紹介します。 昨日ちょうどEthnaにPull Requestを1件送ったので、これを題材にして説明します。 以下、Githubのアカウント取得、gitのインストール、SSH鍵の設定は終わっているものとして解説をすすめます。 Pull Requesを送る最小手順 1.ブラウザでプロジェクト画面を開きます。 例:https://github.com/ethna/ethna 2.forkボタンを押します。 3.以下、自分のPCで作業 git clone git@github.com:DQNEO/ethna.git cd ethna

    Git/Github超入門:猿でもできるPull Request · DQNEO日記
    n2s
    n2s 2011/10/28
  • Git超入門:"git push origin master"の"push"と"origin"と"master"の意味がわからないあなたへ · DQNEO日記

    Home Subscribe この2行のコマンドを見て((;゚Д゚))ガクブルした経験はないでしょうか? 私は恐怖を感じました。 "remote"と"add"と"origin"と"push"と"master"の意味がわからん!! 人間(というか私は)は、わからないものが3つ以上同時に登場すると、ストレスを感じるものです。 この場合は5つもあるのでものすごいストレスです。 でもご安心を! これから超わかりやすく解説します! git remote add origin ... の意味は? ずばり、 URLに"origin"という短縮名(ニックネーム)を付ける したがって、git remote add unko .... と書いてもかまいません。 慣習上、"origin"という名前が使われることが多いというだけのことです。 そして、ここが重要なのですが 別にニックネームをつけなくてもよい。(

    Git超入門:"git push origin master"の"push"と"origin"と"master"の意味がわからないあなたへ · DQNEO日記
    n2s
    n2s 2011/10/28
  • 1分でわかる、GitとSubversionにおけるブランチの違い · DQNEO日記

    Subversionにおけるブランチとは、ディレクトリのことである。 Subversionにおいては、ブランチとは単なるディレクトリに過ぎません。 Subversionではよく下記のようなツリー構造にすることが推奨されます。 project - trunk - branches - foo - bar ブランチfooやブランチbarは、たいていtrunkディレクトリをコピーして作ります。 「ブランチを作成する」という行為は「ディレクトリをコピーすること」と操作的には同じであり、1コミットとして扱われます。 $ svn cp svn://path/trunk svn://path/branches/foo -m "make branch" 「ブランチの名前変更」も「ディレクトリのリネーム」と同じ操作であり、やはり1コミットして扱われます。 $ svn mv svn://path/branch

    1分でわかる、GitとSubversionにおけるブランチの違い · DQNEO日記
  • Plack入門:Plackでウェブサーバを起動してhello worldするまで · DQNEO日記

    準備:Plackをインストールする cpanやcpanmなどでTask::Plackをインストールしましょう。 cpan Task::Plack または cpanm Task::Plack これだけで、Plack関連のソフトウェア・ライブラリ一式を導入することができます。 psgiファイルを作る 下記のコードを sample.psgi という名前で作成します。 保存場所はどこでも構いませんが、ユーザホーム ~/ に保存してみましょう。 #!/usr/bin/env perl use strict; use warnings; my $app = sub { my $env = shift; return [ 200, [ 'Content-Type' => 'text/plain' ], [ "Hello World" ], ]; }; return $app; plackupコマンドでサ

    Plack入門:Plackでウェブサーバを起動してhello worldするまで · DQNEO日記
  • 簡単!たった13行のコードでHTML取得&解析をするPerlスクリプト - DQNEO起業日記

    13行のコードで、Yahoo!Japanのトピックス一覧を取得する! PerlHTML取得・解析したいときはLWP::UserAgentHTML::TreeBuilderというのを使うと簡単にできます。 LWP::UserAgentを使うと、Webページの取得ができます。 HTML::TreeBuilderを使うと、HTMLのDOM解析ができます。 この2つのモジュールを使って、Yahoo!Japanのトピックス一覧を取得してみましょう。 コメント行と空行を除くとたったの13行です。 use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; # urlを指定する my $url = 'http://www.yahoo.co.jp'; # IE8のフリをする my $user_agent = "Mozilla

    簡単!たった13行のコードでHTML取得&解析をするPerlスクリプト - DQNEO起業日記