sqlite3

sqliteの型はかなりいいかげん。
型は

NULL
INTEGER
REAL
TEXT
BLOB

しかない。がcreate tableで他の型を書いても通す。
stringとかvarcharとか。でも内部では適当に扱われる。
たまに文字入れたつもりがREAL扱いされたりするので注意。

他所様のサイトにpostするときは文字コードに注意

いや、すっかり忘れてた。
そりゃそうだね。

自動化されたテストのないアジャイルはダメだ

頻繁なリリースなのでみんな焦る。
テストがないから(やっても手作業)既存の振る舞いを変えるのが怖くて場当たり的な対応をする。
構造の変更もできない。(怖くて)

詰む

若手の子に言っとくこと

今度若手の子と飲みに行ったら話すことのメモ。

多人数の開発では糞なルールでもないよりはあったほうがいい

他人の書いたコードを呼び出す不安はわかるが同じ処理を新しく作るのはやめよう

ガード節使おう

バージョン管理使ってるんだから古いコードは削除してOK

Shallow CopyDeep Copy、同値と同一の違いを分かっておこう

定数はコンパイル時に取り込まれるから注意しよう

わかりにくいコメントでメソッドの説明書くよりはテスト書いといた方が挙動がわかりやすい

フレームワークは作った人の意図を汲んで使ってあげてください

入力は厳しくチェックしてダメならささっと例外上げてあげよう。わかりやすいエラーメッセージも添えて

業務アプリ作るならDBとはどうせ付き合うことになる。ORマッパーもいいけどSQL書こうよ

トランザクション分離レベル、共有ロック、更新ロック、排他ロックは理解しとこう

ついでに楽観的同時実行制御、悲観的同時実行制御を理解しよう

さらについでにスレッドも覚えよう。レースコンディションとか共有のリソースいじるという意味ではDBとさして変わらない。プロセス内のメモリの話なだけだ。

sqlの暗黙の型変換に気をつけよう

フレームワークの変な挙動を逆手にとったハックはやめよう

java以外もやろう。クロージャと高階関数くらいは覚えとこう

変数のスコープとエクステントをしっとこう

遅延評価を覚えとこう

rubyでエクセル

時間もあったしjavaは飽きたからrubyでエクセルからエラーコードの情報を抜いてみた。
書き捨てのスクリプトだからわりと適当。

やっぱ高階関数いるよ。いるって。javaにも入れろよ。
高階関数には無名関数が必要だよ。

# -*- coding: utf-8 -*-
require "win32ole"
require "kconv"

def writeExcel path
  excel = WIN32OLE.new('EXCEL.Application')
  excel.visible = false
  excel.displayAlerts = false
  wb = excel.workbooks.open path
  sheet = wb.worksheets.item(1)
  begin
    yield sheet
  ensure
    wb.save
    wb.close
    excel.quit
  end
end

writeExcel "C:/Temp/xxx/xxx.xls" do |os|
  whidx = 1
  excel = WIN32OLE.new('EXCEL.Application')
  excel.visible = false
  excel.displayAlerts = false
  dir=Dir.glob "C:/xxx/xxx/**/*xls"
  dir.map do |e|
    wb=excel.workbooks.open e
    begin
      file_name = File.basename wb.name , ".xls"
      1.upto wb.sheets.count do |idx|
        sheet = wb.sheets.item(idx)
        next unless sheet.name.toutf8 == "xxxx"
        
        1.upto 100 do |hidx|
          cell=sheet.cells.item(hidx,1)
          no=cell.value
          next unless no
          next unless no.to_s=~/^[0-9.]+$/
          puts no.to_s
          cell=sheet.cells.item(hidx,3)
          title=cell.value
          cell=sheet.cells.item(hidx,18)
          check=cell.value
          cell=sheet.cells.item(hidx,48)
          error_code=cell.value
          cell=sheet.cells.item(hidx,52)
          msg_code=cell.value
          break unless title

          puts "file:#{file_name},title:#{title},check:#{check},errorcode:#{error_code},msgcode:#{msg_code}"
          cell=os.cells.item(whidx,1)
          cell.value=file_name
          cell=os.cells.item(whidx,2)
          cell.value=title
          cell=os.cells.item(whidx,3)
          cell.value=check
          cell=os.cells.item(whidx,4)
          cell.value=error_code
          cell=os.cells.item(whidx,5)
          cell.value=msg_code
          whidx = whidx+1
        end
      end
    ensure
      wb.close
      excel.quit
    end
  end
end

RVM入れた(ホントは結構前に)

おもい腰を上げてRVM導入
参考にしたサイト
Mac に rvm をインストールして 複数バージョンの Ruby を使う - hogehoge foobar Blog Style5
nashiwaterの日記
以下コマンド等

rvm list known

インストール可能なrubyのリスト

rvm install x.x.x

rubyのインストール

rvm list

入ってるrubyのリスト

rvm reset

設定リセット。systemに戻す

rvm use x.x.x

特定のバージョンを使うように設定。ログアウトすると設定消える。

rvm --default x.x.x

デフォルト設定。ログアウトしても消えない。

rvm get latest
rvm reload
rvm version

rvmのアップデート

rvm gemset name

仕様中のgemsetの名前表示

rvm gemset create xxx

gemsetの作成

rvm use x.x.x@xxx

使用するrubyとgemsetを指定

つでにgem

gem install xxx

でインストール

gem list --remote|grep xxx

入れれるの探す。

javaその5(周辺ツール)

色々と足りんなあ。知識が。

スレッドダンプ取得:
SendSignal
コンパイラ
2010-02-16 - 谷本 心 in せろ部屋

例外発生時にブレーク
Java例外ブレークポイントの追加

スレッドダンプ、ヒープダンプ、プロファイラ、スナップショット
VisualVM 入門 — Project Kenai