行事

クリスマスもお正月も過ぎてしまって、いろいろと書くタイミングを逃していまいましたが、
改めて、今年もどうぞよろしくお願い致します。

行事といえば、今はランタンですね。

あまりこういった祭りには参加しないのですが、先週はちょっとお誘われしたので行ってみることに。
なんだかんだ初ランタンかな~

こういうのを間近で見ると、やっぱり感動しますね。

あとはランタン行った証拠みたいなのが欲しかったので、角煮まん買ってほくほくしてました。
まあいつでも買えるんですけどね。笑

あ、今年のバレンタインデーも、社長の奥様からお菓子(プリン)を頂いちゃいました!
ありがとうございます。

女性である私が毎年楽しみにしてます(笑 this

Facebooktwitterlinkedintumblrmail

OSC北海道、セミナー

今回、私はブースで留守番してたのでセミナーで前説やったりタイムキーパーやったりはできませんでしたが、写真ぐらいは撮っておきたい!撮っていきたい!

ということで、はじまる直前

セミナー佳境でもうすぐ終わりってところ

セミナーが終わり、ブースの片付けも終わって油断してる代表

正直、セミナーは人数が少なかったのですが、興味を持ってくださるかたはすごくディープで「やってよかったなぁ」って感じでした。

でもセミナーは寂しすぎたのでもうちょっと事前の宣伝とかがんばろうかな、と思いました。

Facebooktwitterlinkedintumblrmail

OSC北海道、来場者ふえてきました

顔を写さないようにしてるのでわかりにくいですが。

Facebooktwitterlinkedintumblrmail

Mac で複数ファイルの一括置換ってどうしてます?

Windows だと Devas ってソフトでバッチリだったんですが、Mac ではいいソフトを見つけることができずにいます。

サブディレクトリ内のファイルも含めてまとめて置換は、今はターミナルで次の手順でやってます。

まず、find で特定拡張子のファイルリストをとって xargs で grep にわたして置換したい単語を検索。

$ find . -name '*.拡張子' | xargs grep 置換したい単語 

で、grepに -l オプションつけて置換したい単語が含まれるファイルリストをとって xargs で  perl にわたして置換。

$ find . -name '*.拡張子' | xargs grep -l 置換したい単語 | xargs perl -p -i.bak -e 's/置換したい単語/置換後の単語/g'

perl の -i オプションに .bak と付けてるので元ファイルは bak という拡張子で残ります。
「perlだけでやればいいじゃん」と言われそうですが、いきなりやるのは不安なのと置換が行われてないファイルまで全てタイムスタンプが変わったりしたのでこの方法に落ち着きました。

で、置換されたファイルの内容確認して問題なければbakファイル削除。

$ find . -name '*.bak'

で確認して、

$ find . -name '*.bak' | xargs rm

完了〜。 xargs ラヴ♡

Unix系なら他でも使えると思います。

いいっちゃいいんですが、記憶力がないので思い出せる気がしません。historyがあふれるとオレ終了って感じ(なのでメモという意味もあり)。

ちなみに私がターミナルで一番使うコマンドはブッチギリで

$ history | grep コマンド名

history ラヴ♡♡

Facebooktwitterlinkedintumblrmail

CakePHP で debug.log にクエリを出力する(手抜き版)

シェル書いてる時とか Web でも Ajax のときとか

「画面にクエリだされても見えないし、困る〜」

ってときありますよね?

「つーか、なんで画面にだすんだ?ログファイルに出してくれればいいのに 」

とか思いません?

で、調べたらみなさんDBのドライバを拡張して対応されてるようです。
ですが、常にクエリをログに書いて欲しいわけでもないし、ドライバ拡張とか面倒。

クエリを画面にだしてるとこどうなってるのかなぁ、と思って調べたら

cake/libs/view/elements/sql_dump.ctp

にゴリゴリに書いてありました。

これマネしてapp_model.phpにでもメソッド作ればいいんじゃないかなーってことで、作りました。

    /**
     * 通常画面に表示されるログを取得してdebug.logに出力する。
     */
    function sqlToLog(){
        $db =& $this->getDataSource();
        if ($db->isInterfaceSupported('getLog')){
            $this->log($db->getLog(), LOG_DEBUG);
        }
    }

元のログ表示と違って明示的に呼び出すものなのでgetLogインターフェースの確認とか要らない気がしますが、一応。

このメソッドを実行すると debug.log にそれまでに実行されたクエリやら付帯情報(画面に表示されてますよね)が書き出されます。注意点として、画面に出すデータを横取りしているのでログに書き出されたものは画面には表示されません。

配列を print_r で出力した形式なので見やすくはないですが、まぁ、十分かな。

Facebooktwitterlinkedintumblrmail

VB.NETのMy.Application.Logを使う

My.Application.Logを使用してトレースする、ログに書き込む
で詳しく説明されているのでメモ程度で。

まず、My.Application.Logを使うためにアプリケーション構成ファイルであるapp.configを編集します。(ない場合は[プロジェクト] > [新しい項目の追加]からアプリケーション構成ファイルを選択)
app.configがプロジェクトに追加された時点でMy.Application.Logに関する記述があるので楽です。



    
        
            
            
                
                    
                    
                    
                
            
        
        
            
        
        
            
            
            
        
    

しかし、このまま何も触らずにプログラム内で

My.Application.Log.WriteEntry("コントロールの初期化")

'Try~Catch内などで
My.Application.Log.WriteException(New Exception("エラー!"))

とするだけでも

DefaultSource   Information 0   コントロールの初期化
DefaultSource   Error   2   エラー!

と出力され使うことができます。

ちなみに出力先のデフォルトは
ユーザーのApplication Dataフォルダ\CompanyName\ProductName\ProductVersion\ProductName.log
ですが、Vista以降はフォルダ構成が変わっているので
ユーザーのAppData\Roaming\CompanyName\ProductName\ProductVersion\ProductName.log
になっています。

Facebooktwitterlinkedintumblrmail

ぼっちBazaar

5/21(土)、『NAGASAKI-IT hands-on Spring 2011』に参加して、ライトニングトークしてきました。

弊社の吉田くんが

「ひとりぎっと 〜ひとりで使うバージョン管理システム導入編〜」

というGitのハンズオンをやるとのことだったので、それにからめて

「ぼっちBazaar 〜ぼっちを感じるバージョン管理〜」

というわけです。

今回、HTML Slidyでスライドを作りましたのでそのまま貼り付けます(slideクラスのdivには枠を付けました)。

目論見としてはスライド自体をBazaarでバージョン管理して編集しながら実演するつもりだったのですが、残念!

時間がたりませんでした(5分枠で何しようとしてるんだという意見多数)。

ぼっちBazaar

〜 ぼっちを感じるバージョン管理 〜

村部淳也(@murave)

3大分散バージョン管理システムといえば


  • Git
  • Mercurial(hg)
  • Bazaar(bzr)

 

異論はありますまい。

ぼっち


数年前からBazaarを使っていますが

他に使ってる人に会ったことがない。

 

何故だろう。

選択理由


  • 日本語ファイル名に強い(Subversion程度には)
    • 日本語ディレクトリで変な動きをしたりはします。残念ながら。
  • Bazaar Explorer の存在

弱点


ともかく日本語の情報が少なかった

 

ドキュメントは日本語化されてるんですがね

弱点解消


しかし、今年になって

「Bazaarでござ~る。猿でもできる分散バージョン管理“超”入門」

というすばらしい記事が!

さぁ「Bazaarでござ〜る」で検索!

エテ公め!


と言いたい所だけど某社のサルの方が上にでてくるのだった。

 

弱えぇ orz

 

「Bazaarでござ〜る バージョン管理」とでも検索してください

最後に、一言


ぼっちになりたくなければGitを使っとくといいと思います。

 

以上。

時間まで適当に実演


Bazaar Explorer 最高

Bazaar Explorer を使うのがお勧め(当然、コマンドラインでも使えますが)。

  • Mac や Linux ならターミナルから起動 
    • bzr explorer
  • Windowsならメニューやアイコンから起動

    管理の基本

    • 共有リポジトリ作成 init-repo (必須ではありません) 
      • 複数のブランチで効率的にディスクを利用させるためのディレクトリを共有リポジトリという。
    • ディレクトリのブランチ化 init 
      • 管理の基本となるディレクトリをブランチという。
    • ブランチ作成 branch
    • 他のブランチを取得 pull (merge) 
      • 他のブランチの変更を取得する場合も使用します。
      • 作業後に他のブランチの変更を取得する場合はmergeを使用する。
    • 作業ブランチに反映 commit
    • 他のブランチに反映 push

      独特(?)なしくみ

      • チェックアウト(バインド・ブランチ) 
        • 他のブランチ(以降、親と呼びます)にバインドされたブランチをチェックアウトという(たぶん)。
        • コミット(commit)すると親にも反映されたり。
        • さらにSubversionっぽくなる感じ。
           

          おわり

      Facebooktwitterlinkedintumblrmail

      CakePHP でシェルを書くときに最初にやったこと(親クラス作り)

      CakePHP にはデバッグで便利な pr() って関数があります。
      出力の前後に pre タグ を付けてくれる print_r() のラッパーです。当然Web用。

      シェルにも欲しいです。てなわけで作りました。

          function pr($obj){
              $pr = print_r($obj, true);
              $this->out($pr);
          }
      

      簡単。こんな感じで使います。

          $popopopooon = array('こんにちわ' => 'こんにちワン', 'ありがとう' => 'ありがとウサギ');
          $this->pr($popopopooon);
      

      このようにコンソールに出力されます。

       Array
      (
          [こんにちわ] => こんにちワン
          [ありがとう] => ありがとウサギ
      )
      

      print_r() は第2引数に true を渡すと出力せずに結果を返してくれるのでオブジェクト構造をログに出したりするときにも便利です。
       
      でもコレ、全部のシェルに書きたくない。

      どこに集約したらいいのか悩んだのですが、実際に実行するシェルの親クラスを作成して継承することにしました。継承の段数が増えるのはあまりすきじゃないのですが、Shellクラス をそのまま継承するよりも1段増やしといたほうがいいかな?って気もしたので。

      appbase.php

      class AppbaseShell extends Shell {
      
          function initialize() {
              parent::initialize();
          }
      
          function startup() {
              //ウェルカムメッセージを消すためにオーバーライド
          }
      
          /**
           * デバッグ用
           */
          protected function pr($obj){
              $pr = print_r($obj, true);
              $this->out($pr);
          }
      }
      

      ついでに startup() をオーバライドしてウェルカムメッセージを消しました。
      こういう事やるには1段あいだに入ってるほうがいいですね。

      実際に起動するシェルは AppbaseShellクラス を継承します。

      aisatu.php

      App::import('Shell', 'Appbase');
      class AisatuShell extends AppbaseShell {
          function initialize() {
              parent::initialize();
          }
      
          function main() {
              $popopopooon = array('こんにちわ' => 'こんにちワン', 'ありがとう' => 'ありがとウサギ');
              $this->pr($popopopooon);
          }
      }
      

      サンプルコードは今テキトーに書いたのでちょっとあやしいかも。

      最後にオチを。

      このprメソッド、実際に作ったんですが普通に print_r() すればコンソールに出力されるんですよねー。「そりゃそうだ」と後で気づいたわけで。

      CakePHP のシェルでは $this->out() でコンソールへの出力をすることになってますが、開発中にしか使わないし print_r() をそのまま使えばいいかなと。親クラスは機能の集約に役立ってます。

      Facebooktwitterlinkedintumblrmail

      VB2010でNUnit2.5を利用する

      初めまして、miyazakiです。今年からこちらでお世話になることになりました。よろしくお願いします!
      初めての投稿なのでものすごく緊張していますが、さっそく本題に入っていきたいと思います。

      VB.NETの環境でNUnitを使うことになったので入れてみました。

      参考ページ
      NUnit 2.5 の導入 Step by Step
      VB2010 Express + NUnit 2.5 で、 初めてのTDD Step by Step

      参考にしたページと同じ環境だったのと、とても詳しく分かりやすく書かれていたので、インストールから動かしてみるまでサクサク進めました。
      なのでこちらではメモ程度に書いていきたいと思います。

      まずはインストール。
      NUnitのページのDOWNLOADから”NUnit-2.5.10.11092.msi”をクリックしインストール。

      インストールすると中にサンプルが入っているので、とりあえずそちらを動かしてみることにします。
      ソリューションを開くと、このプログラム古いから今の環境で動くようにしろ、と言われるので指示に従ってコンバート。
      コンバートして開けたところでビルドするんですが、元が古いということでプロジェクトで参照されているnunit.frameworkも古いです。新しいほうを参照させる必要があります。
      NUnitをインストールしたドライブ\NUnit 2.5.10\net-2.0\framework内にnunit.framework.dllがあるので、プロジェクトごとに設定しなおしていきます。
      これでビルドが通りました。

      ビルドに成功したところでNUnitを起動。このままだとVisual Studioのファイルが開けないので、
      [Tools] > [Settings…]から[IDE Support]を選択し[Enable Visual Studio Support]という項目にチェックを入れておきます。
      これでNUnit側でサンプルを開くことができます。
      読み込み時にdllファイルが見つからないエラーが出る場合は、
      [Project] > [Configurations] > [2 Release]
      を選択します。
      あとはRunを押すとテストされるかと思います。こんな感じで。


      赤い部分がテスト失敗。緑の部分が成功しているということを表しています。

       

      では、実際にプロジェクトを作ってやっていきたいと思います。こちらも参考ページにバッチリ書いてあるので大まかな部分とテストの記述部分のみ触れていきます。

      構成としてはメインプログラムとテスト用とプロジェクトを分けて作成します。
      テスト用プロジェクトに関してはクラスライブラリで作成し、NUnitから呼び出して使うためにdllとして作ります。
      参照設定は先ほども出たnunit.frameworkと、メインプロジェクトを設定しておきます。

      テストケース部分

      Imports FizzBuzz
      Imports NUnit.Framework
      
      
      Public Class FizzBuzzerTest
      
          'Fizz Buzz - 数字を数え、3の倍数でFizz、5の倍数でBuzz、3と5の倍数でFizzBuzz
          
          Public Sub SayNextTest_1回目は1_1()
              Dim obj As FizzBuzzer = New FizzBuzzer()
              Dim result As String = obj.SayNext()
              Assert.AreEqual("1 - 1", result)    'Assert.AreEqual(期待値, 検査したい値)
          End Sub
      
      End Class
      

      NUnitはTestFixture()を見て「このクラスにテストケースがある」ということ、Test()で「このメソッドがテストケース」であることを判断します。

      Assert.AreEqual()ですが、このプログラムはFizz Buzzをしているので、この場合1回目の期待値は”1-1″、検査する値はSayNext()(数字、Fizz、Buzzのいずれかを返す)で返ってくる値になります。

      また、テストケースを増やすうえで、同じような処理がある場合はまとめて書くことができます。

      
      Public Class FizzBuzzerTest
          '同じような処理をするテストはTestCaseを使うことでまとめて書ける
              '1のとき
              '2のとき
              '3のとき
         Public Sub SayNextTest(ByVal count As Integer, ByVal expected As String)
              Dim obj As FizzBuzzer = New FizzBuzzer()
              Dim result As String = Nothing
              For i As Integer = 1 To count
                  result = obj.SayNext()
              Next
              Assert.AreEqual(expected, result)    'Assert.AreEqual(期待値, 検査したい値)
          End Sub
      End Class
      

      と、こんな感じでテストケースを書いては実装を繰り返し、無事すべてのケースをグリーンにさせることができました!

       

      Facebooktwitterlinkedintumblrmail

      いつか通った道

      富士通のWindows 7ケータイ F-07C ですが、これに似たような物を持っていたなと。
      思い出してみると、SHARPのWillcom D4でした。

      D4と比べてみるとサイズは少し小さくて、重量に至っては218グラムでD4の半分以下。
      非力とはいえ、今この重量でWindows OSの機種は他に無さそうです。
      が、iPhoneやGalaxySよりは大きいので、それで大きいと感じる人には向かないですね。
      携帯用OSが入っているから、普段は困らないかも知れないですが、それならWindowsは不要じゃないかと言う事にも。

      必要か、必要無いかと言えば必要無いんですが。
      必要無いんですが。
      そろそろ携帯買い替えようかと思っていたところでこんな物が出たら・・・。

      取り合えず、安く済ませる事だけ考えるように、他は何も考えないようにしています。

      Facebooktwitterlinkedintumblrmail