出戻りSEの楽しい育児日記

ごく普通のSEの育児とお仕事の日記 たいしたことは書いてない

barcode4jでチェックディジットが不一致だとIllegalArgumentExceptionになる

 

リリースを明後日に控えたある日、本番環境で突如発生した
java.lang.IllegalArgumentException: Checksum is bad (0). Expected: 4」。
知っている人なら↑みてピンときそうなものの、
寡聞にしてバーコードの生成処理に詳しくないので、
使用していた「barcode4j」のクラスファイルをデコンパイルするに至りました。

……DBに持ってる文字列でバーコード画像を作る処理だったんですが、
お客さんが間違ったデータ打ち込んだだけだった……

チェックディジットのアルゴリズムは↓でお勉強しました。
http://www.dsri.jp/jan/check_digit.html

 

世の中知らないことがいっぱいだな~~(白い目)

postgresの再インストール時は一旦アカウント削除する

もらったPCのアカウントにすでにpostgres入っていたのでそのまま使ったれ~~と思っていたけど、パスワードが分かんなかった…
ローカルからの接続をtrustにするとかごちゃごちゃやってもなんかダメだったからサクっと再インストールすることに。

 

postgresのアカウントをPCから削除
 →残っているアカウントがあると、それを使おうとしてパスワード不一致のエラーとなる。ので、アカウントを削除する。
  コマンドプロンプトをAdministratorで立ち上げて以下のコマンドを実行
  net user postgres /delete


Cortanaでcmdって入れShif+Ctrl+Enterすると、アドミン権限で立ち上げてくれるの知らなった。便利!

最近使ったコマンドめも

結局のところ、黒い画面が最強なのである

使う時は全部まず「cd {フォルダパス}」で場所移動してからね。


■拡張子の一括変換(*.JPEGにマッチするすべてのファイルを、~.JPGに名前変更する)
ren *.JPEG *.JPG

■拡張子で検索(*.gifのファイルを検索)
dir /B *.gif

■フォルダの中のファイルも一覧表示
dir /S /B

■プロセスID付きでネットの状態一覧
netstat -nao

■PID1230を強制終了
TASKKILL /PID 1230 /F

Javaでフォルダ内のファイルごとフォルダ削除したい場合はdeleteDirectoryが便利

File.deleteは中身があるとFalseが返ってきてしれっと終わるから…

なのですが、org.apache.commonsにいると思ったらいなかった。
Tomcat7ではdeleteDirectoryはutil.http.fileuploadにいた。。。

ので、こいつをimportしておく↓
org.apache.tomcat.util.http.fileupload.FileUtils

ディレクトリ削除系のメソッドはこんな感じに

// 例えばこんなフォルダがあるとして
String path = System.getProperty("user.dir") + File.separator + "tmp";
File dir = new File(path);
dir.mkdir;

// こんなファイルを作るとして
File newfile = new File(path + "¥¥newfile.txt");
newfile.createNewFile();

// FileUtilsならファイルごとフォルダ削除可能
FileUtils.deleteDirectory(dir);

// フォルダ内のファイルを全部削除(フォルダは残す)のも一発
// deleteDirectoryは↓をしてからFileクラスのdeleteをしている
FileUtils.cleanDirectory(dir);

// 指定されたパスのものを削除する。パスがフォルダだったら中身ごと(サブディレクトリも)削除する。
// Boolean型で成否を返すFile.delete()と違い、削除できなかった場合は例外が発生する
FileUtils.forceDelete(dir);

 

プログラマの美徳

「ベテラン技術者Aさんに中堅技術者Bさんを付けて作業してもらいましたがPMの意図するような情報伝搬は起きませんでした。なぜでしょう? みんなで原因を考えよう!」に対して。
私頭御花畑なので、「2人ともシャイで人見知りだった…?」なんて思ったのですが、大半の意見は「Aさんが自分の技術を出し惜しみした(自分の仕事が取られると思った)」だったので「えぇ…」ってなりました。
でもあるあるだそうで。幸い私は先輩たちからあれこれ教えてもらった経験ばかりなのでピンと来ない…いや、出し惜しみされてたのに気づかなかっただけかもしれませんが…。

 

そんな話をしていて、なんとなく思い出したのが、Perl作った人が言ったらしいプログラマの美徳。なんかふと思い立って原文を読んでみました。

原文こちら https://www.perl.com/pub/1998/08/show/onion.html
以下は抄訳。

プログラマの美徳は怠惰・せっかち・傲慢(=情熱の美徳)
コミュニティの美徳は勤勉・忍耐・謙虚
正反対に見えるこれらのことは実は正反対というわけでもないのです。なぜなら全部同時に実行することができるからです。

これらの美徳は放棄しなければ、私たちを未来へと運んでくれるでしょう。

プログラマの美徳の方ばかりが一人歩きしている感ありますが、どっちも必要だよってのがPerl作った人の言ってることですね。

 

中国人がPerlで詩を書けるようにするのが私の未来のヴィジョン、私の選んだ考え方だって言ってておおってなりました(小並感)

BOM付UTF-8のCSVをCakeで

お盆前にリリースが重なったりでバタバタしました。

お盆は実家&義実家にトータル1週間帰省。
プールしたり、海に行ったり、近所の池に亀(大好き)を見にいったりと楽しく過ごした赤子、休み明けの現在見事に保育園登園拒否になりましたorz

 

*


PHPとのお付き合い4か月目。ちょっとお友達になれてきた今日この頃です。
先日、cakephpでBOM付UTF-8CSV吐くという処理を書きました。
初歩的なことなんですが「fgetcsvのサンプルならたくさん見つかるのに…」ってなったのでメモ。

cakephpのFile ユーティリティクラスでBOM付UTF-8

//ファイルのインスタンス生成
$file = new File(<ファイルパス>);

//ファイルを作成
$file->create();

//BOM文字をパッキングして出力
$bom=pack('C*',0xEF,0xBB,0xBF);
$file->append($bom);
$file->append(<出力する文字列>);

//必要に応じてUTF-8に文字列を変換したり
$file->append(mb_convert_encoding(<出力する文字列>, "UTF-8", <変換前の文字コード>));

 

 

Excelで開いたときに「001」とかが「1」になっちゃうのの対策とExcel上の表示★

  • 囲み文字を"から'に変更→'001'
  • タブ文字を追加→001 (テキストエディタ上では001<tab文字>)
  • タブ区切り、UTF-16LE BOM付きで出力して拡張子はcsvに偽装(ただしあくまで偽装。厳密にはTSV)

 

新人さん「BOMってなんですか」

私「バイトオーダー…なんだっけド忘れした…」 ※マーク

 

週3で在宅勤務したい

赤子っていうやつぁ、どうしてこうもすぐ熱を出すのか。
(「保育園入れてるからだろ3歳まで家で見ろ」とか言わないで泣いちゃう)
そして熱が出ていてもたいていの場合元気。
うちの子はまだお喋りはしませんが、言葉よりも雄弁に「外に連れていけ」と要求する。

(ボディランゲージが激しすぎて、保育園の先生に「qさんとこベビーサインとか教えてるんですか?」て言われたけど特に何もしていないw)

 

さて先日、子が熱を出したとき、初めて在宅勤務しました。

自分は頭のオンオフ切り替えが苦手なタイプだと思ってたので、在宅勤務だと仕事にならないんじゃないかと心配したんですが、1時間もすると慣れました。
むしろ、「子が昼寝している間になにがなんでもこの機能完成させる…!」というある意味オフィスにいる時よりも切羽詰まった気持ちで仕事をしたためか、普段より進捗上がった気がします。どうなのそれ…

むしろ週3くらいで在宅勤務したい。「通勤時間って勿体ないんだなぁ…」と痛感したのです。

片道1時間の電車は、本を読んだり音楽を聴いたり刀剣乱舞をしたりするのにちょうどいいなと思っていたんですが、いや圧倒的に無駄だった。
通勤時間がなければあと2時間仕事できるやん。

 

通勤時間もですが、関東に引っ越してきて「家賃、高ッ!!」と思ってから、都内に開発用のオフィス設けてるのが本当に賃料の無駄遣いでは…? みたいな気持ちでもやもやもします。

 

在宅勤務の障壁というと、やはり労働管理なんだろうとおもうのですが、なんかうまいこと解消できないのかなぁ。

PCの操作ログ取るとか、仕事中はずっとカメラ付きでスカイプ立ち上げておいて誰かが確認するとか…?

一番いいのは成果物ベースだと思うんですが、スキルのばらつきとかどう吸収したらいいんだろう。新人さん入って来た時とかどうOJTするんだろう。調べ物とかロジック考えてるときとかどう成果として定量化したらいいんだろう。

フルリモートの会社ってどうやってるのかなぁ~。

 

夫や、友人にも何人かいますが、オフィスに出て人と話したり、オフと完全に環境を切り離さないと力が出ない~ってタイプの人も勿論いる。

赤ちゃんの性格にもよるし。私が不良母過ぎてつむじの横で普段からPC触っているからか、子が状況に慣れていて楽に在宅勤務できた面もある。

これが構って構って欲求の強い赤ちゃんだと大変だろう。

(子にもそういう欲求がないわけではない。夕方以降はべったりです。)


どちらでも選択できるのがベストなんだけどなぁと思う。

 

 

オチが思いつかない、ただの日記のようだ…