プログラマメモ2 - programmer no memo2

目次

8人の女王はバックトラッキングのための例題 - バックトラキング 2007/06/29

8人の女王は、ひとつますに女王をたんにおいていけばいいという問題なのではなく、バックトラッキング(back tracking:後戻り法)を行うためのいい問題ということなのですね。

日本ソフトウェア科学会 ホームページ 2007/06/28

日本ソフトウェア科学会 ホームページ

# 準会員
計算機ソフトウェアに係わる科学・技術に興味を持つ個人で、所定の会費を納める者。

実は、はじめから例外なことばかり - 前提が違うからコードがちらかるわけで。 2007/06/28

人は自分の速度でしか、変化することができず、いろいろなことを共有したければ、相手を理解することも大切だし、理解してもらう努力をするのも大切。

でも、もう頭がくらくらするコードはみたくない、というのが本音だったりもする。もうアドホックなことはやめにしたいな。

割り切れないこともあるわけですよ、よい習慣は、あっというまに悪い習慣に駆逐されてしまう。人や自分に言い訳しながら仕事するのはしんどいですよ。はい。

前提が違うことをコードで表現するさいに、もうあちらこちらにフラグや、条件判定がちりばめられるわけですよ。それで、何度も何度も実行して、デバッガ使って動きを観察して動くようにするわけです。動けば勝ち。で、動いたら喜ぶ。動かなければ、動くようにするわけですよ。ずーと、ずーと、そういうことばかりだと、どうも....

8人の女王にチャレンジ - 失敗、そして挫折 2007/06/28
2007/07/05

プログラムの教科書によくでている8人の女王にチャレンジ。
単純に縦の線、横の線、斜めの線をチェックして、
みると案の上だめ。女王は8人いないといけないのです。


で、まちがいコード。
いや、数学はだめだめなので。

しかし、大学一年生レベルらしいんですよね。

正解はまた別記事で。

ちょっと参考書みて、考えたけど、よくわからないです。

結果

1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
count:5



package queen8;

public class TestQueen8 {

static class Board {

boolean[][] B;
int N;

public Board(int N) {
this.N = N;

B = new boolean[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
B[i][j] = false;
}
}

}

public void set(int x, int y) {
B[x][y] = true;
}

public boolean check(int x, int y) {

// check H
if (!checkHLine(x, y)) {
return false;
}

// check V
if (!checkVLine(x, y)) {
return false;
}

// check cross
if (!checkCross(x, y)) {
return false;
}

return true;
}

public void unset(int x, int y) {
B[x][y] = false;
}

public boolean checkHLine(int x, int y) {
for (int i = 0; i < N; i++) {
if (get(i, y) && !(x == i)) {
return false;
}
}
return true;
}

public boolean checkVLine(int x, int y) {
for (int i = 0; i < N; i++) {
if (get(x, i) && !(y == i))
return false;
}
return true;
}

public boolean checkCross(int x, int y) {
if (get(x, y))
return false;

int ux, uy;
ux = x;
uy = y;

// up left
for (;;) {
ux -= 1;
uy -= 1;
if (!(0 <= ux && 0 <= uy))
break;
if (B[ux][uy])
return false;
}
// up right
ux = x;
uy = y;

for (;;) {
ux += 1;
uy -= 1;
if (!(ux < N && 0 <= uy))
break;
if (B[ux][uy])
return false;
}
// down left
ux = x;
uy = y;
for (;;) {
ux -= 1;
uy += 1;
if (!(0 <= ux && uy < N))
break;
if (B[ux][uy])
return false;
}

// down right
ux = x;
uy = y;
for (;;) {
ux += 1;
uy += 1;
if (!(ux < N && uy <N))
break;
if (B[ux][uy])
return false;
}
return true;
}

public boolean get(int x, int y) {
return B[x][y];
}

public int size() {
return N;
}

public int countQueen() {
int cnt = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print((B[i][j] ? "1" : "0") + " ");
if (B[i][j])
cnt++;
}
System.out.println();
}
return cnt;
}
}

public static void main(String[] args) {
fail_3();
}

public static void fail_3() {
int N = 8;
Board board = new Board(N);

for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (board.check(i, j)) {
board.set(i, j);
}
}
}

System.out.println("count:" + board.countQueen());
}

}

文字列にある語が何回出現しているか数える 2007/06/25

文字列にある語が何回出現しているか数える


正規表現使うというのありだと思うけども。


package t;

import java.util.HashMap;
import java.util.Map;

public class Test3 {

public static void main(String[] args) {

String s = "こんにちわabcこんにちわ こんにちわ";

Map<String, Integer> map = p(s);
System.out.println(map.get("こんにちわ"));
}

public static Map<String, Integer> p(String s) {
Map<String, Integer> map = new HashMap<String, Integer>();
int len = s.length();

for (int i = 0; i < len; i++) {
String tmp = s.substring(i);
for (int j = 1; j <= tmp.length(); j++) {
String tmp2 = tmp.substring(0, j);
System.out.println(tmp2);
Integer cnt = map.get(tmp2);
cnt = cnt == null ? 1 : (cnt + 1);
map.put(tmp2, cnt);

}
}
System.out.println(map);
System.out.println("==================");
return map;
}
}

文字列”abcde”の中にある全てのsubstring 2007/06/25

多分。。。
15組だと思う。

abcdeという指定がないなら、
重なっている組み合わせは除外しないといけないような。

package t;

public class Test2 {

public static void main(String[] args) {
int c = 5;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < c; i++) {
p(new String(builder.append((char) (65 + i))));
}

// String s = "abcde";
// p(s);
}

public static void p(String s) {
int len = s.length();
int cnt = 0;

for (int i = 0; i < len; i++) {
String tmp = s.substring(i);
for (int j = 1; j <= tmp.length(); j++) {
System.out.println(tmp.substring(0, j));
cnt++;
}
}
System.out.println("cnt:"+cnt);
System.out.println("==================");
}
}



A
cnt:1
==================
A
AB
B
cnt:3
==================
A
AB
ABC
B
BC
C
cnt:6
==================
A
AB
ABC
ABCD
B
BC
BCD
C
CD
D
cnt:10
==================
A
AB
ABC
ABCD
ABCDE
B
BC
BCD
BCDE
C
CD
CDE
D
DE
E
cnt:15
==================

Curly braces indicate an array of values is being supplied 2007/06/25

Curly braces indicate an array of values is being supplied
の訳は?

java アノテーション忘れるのメモ 2007/06/25
2007/07/16

アノテーションに触る機会がないのでいじってみます。

Java言語機能-TECHSCORE-

package an;

public class A {

@Original(value="OK", a = {"i am anno"})
public int b(int i){
return 0;
}
}

package an;

public @interface Original {
String value();
String[] a();
}



アノテーションで使われる引数は、@intefaceで定義したものを全部使わないとだめなようです。

おいおいみていきます。

コードジェネレーターでソースを出力してアノテーションに可変になるようなパラメータをうめこむといのもありなのかなと考えてます。

だったらはじめからスクリプト言語を使用して、ジェネレータで生成するのはスクリプトに値をうめこんだものというものもありなのかな。

アノテーションをうめこんでコンパイルして、別のアプリケーションサーバに渡すとか。
※JBossあたりってそうやって振る舞いを指定していたような。

でも効果的使用方法がイメージできない。


IBM Tigerでのアノテーション 第1回: Javaコードにメタデータを追加する - Japan

上記のibmの記事からだと自分が考えていたのは若干ちがうかな。

アノテーションはメタデータです。

メタデータのメリットは、ドキュメンテーション、コンパイラー・チェック、コード解析、だそうです。
ドキュメンテーションは、なんとなくJavaDocがあるからわかるかな。
コンパイラーチェックはoverride,deprecatedとからの用法からわかるかな。
コード解析は、

IBM Tigerでのアノテーション 第2回: カスタム・アノテーション - Japan

2004年の記事だから、現時点から3年もまえの記事なんだけど、いまだにアノテーションの効果的な使い方を自分がイメージできていないことにあせりを感じますね。

Functioal Programming IAT なるもの試してみました。 2007/06/22

Functioal Programming IAT

結果は、「あなたの関数型指数は 0.486530786739228 です。正が関数型、負が手続き型です。」でした。ちょっとだけ関数型よりということでしょうか。

参考:
IATテスト

ログコードがあちらこちらに点在しはじめたら 2007/06/22

ログコードがあちらこちらに点在しはじめたら、コードの健康状態がよくない方向に進んでいることはまちがいないですね。
プログラマが開発用のログを放置するのは、怠惰のあわられ、もしくは疲弊した結果、自信のなさからだと思います。そういった結果で注入されたログコードは大概、開発した本人にしかわからないものになります。コードの可読性を落とします。

コードレビューのようなチェック機構、もしくは開発はペアプログラミングであればよいのですが。

プログラマが開発時に自信がなくいれるログコードは、《掛け捨ての保険みたいなもの》ですね。

blit - 転送するという意味です。 2007/06/21

blit


転送するという意味です。ですので、bitbltはビット転送ということですね。

check the validity of 2007/06/20

check the validity of

~の有効性を調べる、
~の正当性を検査する
だそうです。

チートシート、またはカンニングペーパーともいう。 2007/06/18
2007/07/05

日頃操作しているものでも、少し触らなくなると忘れてしまいます。

プログラミング言語でも、自分がホームだといえる言語、エディタ、データベースはそれぞれひとつかふたつくらいなのではないでしょうか。

お仕事でコンピュータにかかわっていると、何でもやららないといけないときがあります。
慣れないエディタやデータベースに接続しないといけない時もあります。

そういう時は、チートシートを常備しているとよいでしょう。

参考:
Our Favorite Cheat Sheets - a definition from Whatis.com
Linuxのテキストエディタviとvimのグラフィカルなチートシート - GIGAZINE
Snail Blog (beta) » 開発者に重宝なチートシート一覧
Ajax,Apache,CSS,CVS,HTML,JS,Perl,PHP等のチートシートまとめ:phpspot開発日誌
SubVersionやRMDB、他各種プログラミング用チートシート集:phpspot開発日誌
秋元@サイボウズラボ・プログラマー・ブログ: viマグカップ
vi reference mug > vi stuff > geekcheat.com - cheat sheets for geeks! | CafePress

Windows版Safariがでてくるそうですね。 2007/06/16

【レビュー】Mac & Win両対応のSafari 3 パブリックβを試す (3) WindowsでCoreGraphicsが! | パソコン | マイコミジャーナル
【コラム】OS X ハッキング! (230) Windows版Safariに秘められた野望 | パソコン |


上記の記事で気になったこと。

使用されているフレームワークだが、標準インストールでC:\Program Files\Safariへコピーされるコンポーネントを確認してみると、WebKit.dll(v3.522.11.3)のほか、 CoreFoundation.dllやCoreGraphics.dllといったMac OS Xから移植したと思われるランタイムを発見できた。SQLite3.dllなど、オープンソースの技術も利用されている。【レビュー】Mac & Win両対応のSafari 3 パブリックβを試す (3) WindowsでCoreGraphicsが! | パソコン | マイコミジャーナル



OS Xの主要なAPIレイヤーの1つであるCoreGraphicsが移植された意味だが、今後もSafari限定とは考えにくい。すでにWindws版が存在するiTunesとQuickTime Playerは、いずれこの高機能なライブラリの力を使うことだろう。ひょっとすると、Windowsで動くApple製ソフトが増える契機になるかもしれない。
【コラム】OS X ハッキング! (230) Windows版Safariに秘められた野望 | パソコン | マイコミジャーナル


appleがオープンソースを多用していること。windowsとのUIの互換をしっかり考えているようであること。

[link]PHP関連 2007/06/16


throw new CybozuLabsException()

[windows]レジストリー操作して便利なろう 2007/06/13

職場の同僚からいただいたREGファイルより。

任意の場所でコマンドプロンプトを開く
エクスプローラでフォルダを選択して実行で、そのフォルダにCDしたコマンドプロンプトが開きます。

[HKEY_CLASSES_ROOT\Folder\shell\WinHandPrompt]
@="コマンドプロンプト(&C)"

[HKEY_CLASSES_ROOT\Folder\shell\WinHandPrompt\command]
@="cmd.exe /K cd %1"


コマンドプロンプトで補完(TABキー)
REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"CompletionChar"=dword:00000009
"PathCompletionChar"=dword:00000009

[HKEY_USERS\.DEFAULT\Software\Microsoft\Command Processor]
"CompletionChar"=dword:00000009
"PathCompletionChar"=dword:00000009


エクスプローラでフォルダを選択して実行するとその箇所が、エクスプローラーのルートとして表示されます。

REGEDIT4

[HKEY_CLASSES_ROOT\Folder\shell\WinHandExpHere]
@="エクスプローラ@(&J)"

[HKEY_CLASSES_ROOT\Folder\shell\WinHandExpHere\command]
@="explorer.exe /e ,/root, %1"


実行すると下記のような感じです。

改行コードを削除 2007/06/13

bloggerで記事を投稿する際に、javascriptを埋め込もうとすると改行コードがある場合に、それがHTMLコードで置き換わって、スクリプトが動作しなくなるので、改行コードを削除するjavascriptです。


<html>
<head>
<script language="JavaScript"><!--

function action_20070613(o){
var s = o.value;
var reg = new RegExp("\\n", "gm");
t = s.replace(reg, "");
o.value = t;
}
-->
</script>
</head>
<body>
<form name="f_20070613">
<textarea name="txt_20070613" rows="8" cols="40"></textarea>
<br>
<input type="button" value="OK" onclick="action_20070613(document.forms.namedItem('f_20070613').txt_20070613);">
</form>
</body>
</html>


下記、動作するフォームです。






UPCコード,EANコード,JANコードにおける国別コード判定 2007/06/12
2007/12/16

UPCコード,EANコード,JANコードにおける国別コード判定です。

頭の、2、3桁をみればいいようです。

簡単な国別コード識別プログラムです。
javascriptのサンプルです。
データ構造はjsonにしてみてます。


var codes = {
"10":"アメリカ合衆国、カナダ",
"11":"アメリカ合衆国、カナダ",
"12":"アメリカ合衆国、カナダ",
"13":"アメリカ合衆国、カナダ",
"20":"小売業インストアコード用",
"21":"小売業インストアコード用",
"22":"小売業インストアコード用",
"23":"小売業インストアコード用",
"24":"小売業インストアコード用",
"25":"小売業インストアコード用",
"26":"小売業インストアコード用",
"27":"小売業インストアコード用",
"28":"小売業インストアコード用",
"29":"小売業インストアコード用",
"30":"フランス",
"31":"フランス",
"32":"フランス",
"33":"フランス",
"34":"フランス",
"35":"フランス",
"36":"フランス",
"37":"フランス",
"380":"ブルガリア",
"383":"スロベニア",
"385":"クロアチア",
"387":"ボスニア・ヘルツェゴビナ",
"400":"ドイツ連邦共和国",
"401":"ドイツ連邦共和国",
"402":"ドイツ連邦共和国",
"403":"ドイツ連邦共和国",
"404":"ドイツ連邦共和国",
"405":"ドイツ連邦共和国",
"406":"ドイツ連邦共和国",
"407":"ドイツ連邦共和国",
"408":"ドイツ連邦共和国",
"409":"ドイツ連邦共和国",
"410":"ドイツ連邦共和国",
"411":"ドイツ連邦共和国",
"412":"ドイツ連邦共和国",
"413":"ドイツ連邦共和国",
"414":"ドイツ連邦共和国",
"415":"ドイツ連邦共和国",
"416":"ドイツ連邦共和国",
"417":"ドイツ連邦共和国",
"418":"ドイツ連邦共和国",
"419":"ドイツ連邦共和国",
"420":"ドイツ連邦共和国",
"421":"ドイツ連邦共和国",
"422":"ドイツ連邦共和国",
"423":"ドイツ連邦共和国",
"424":"ドイツ連邦共和国",
"425":"ドイツ連邦共和国",
"426":"ドイツ連邦共和国",
"427":"ドイツ連邦共和国",
"428":"ドイツ連邦共和国",
"429":"ドイツ連邦共和国",
"430":"ドイツ連邦共和国",
"431":"ドイツ連邦共和国",
"432":"ドイツ連邦共和国",
"433":"ドイツ連邦共和国",
"434":"ドイツ連邦共和国",
"435":"ドイツ連邦共和国",
"436":"ドイツ連邦共和国",
"437":"ドイツ連邦共和国",
"438":"ドイツ連邦共和国",
"439":"ドイツ連邦共和国",
"440":"ドイツ連邦共和国",
"45":"日本",
"49":"日本",
"460":"ロシア連邦",
"461":"ロシア連邦",
"462":"ロシア連邦",
"463":"ロシア連邦",
"464":"ロシア連邦",
"465":"ロシア連邦",
"466":"ロシア連邦",
"467":"ロシア連邦",
"468":"ロシア連邦",
"469":"ロシア連邦",
"470":"キルギスタン",
"471":"台湾",
"474":"エストニア",
"475":"ラトビア",
"476":"アゼルバイジャン",
"477":"リトアニア",
"478":"ウズベキスタン",
"479":"スリランカ",
"480":"フィリピン",
"481":"ベラルーシ",
"482":"ウクライナ",
"484":"モルドバ",
"485":"アルメニア",
"486":"グルジア共和国",
"487":"カザフスタン",
"489":"香港",
"50":"イギリス",
"520":"ギリシャ",
"528":"レバノン",
"529":"サイプラス",
"531":"マケドニア",
"535":"マルタ",
"539":"アイルランド",
"54":"ベルギー、ルクセンブルク",
"560":"ポルトガル",
"569":"アイスランド",
"57":"デンマーク",
"590":"ポーランド",
"594":"ルーマニア",
"599":"ハンガリー",
"600":"南アフリカ共和国",
"601":"南アフリカ共和国",
"608":"バーレーン",
"609":"モーリシャス",
"611":"モロッコ",
"613":"アルジェリア",
"616":"ケニア",
"619":"チュニジア",
"621":"シリア",
"622":"エジプト",
"624":"リビア",
"625":"ヨルダン",
"626":"イラン",
"627":"クウェート",
"628":"サウジアラビア",
"629":"アラブ首長国連邦",
"64":"フィンランド",
"690":"中華人民共和国",
"691":"中華人民共和国",
"692":"中華人民共和国",
"693":"中華人民共和国",
"694":"中華人民共和国",
"695":"中華人民共和国",
"70":"ノルウェー",
"729":"イスラエル",
"73":"スウェーデン",
"740":"グアテマラ",
"741":"エルサルバドル",
"742":"ホンジュラス",
"743":"ニカラグア",
"744":"コスタリカ",
"745":"パナマ",
"746":"ドミニカ共和国",
"750":"メキシコ",
"759":"ベネズエラ",
"76":"スイス、リヒテンシュタイン",
"770":"コロンビア",
"773":"ウルグアイ",
"775":"ペルー",
"777":"ボリビア",
"779":"アルゼンチン",
"780":"チリ",
"784":"パラグアイ",
"786":"エクアドル",
"789":"ブラジル",
"790":"ブラジル",
"80":"イタリア",
"81":"イタリア",
"82":"イタリア",
"83":"イタリア",
"84":"スペイン",
"850":"キューバ",
"858":"スロバキア",
"859":"チェコ",
"860":"ユーゴスラビア",
"867":"朝鮮民主主義人民共和国",
"869":"トルコ",
"87":"オランダ",
"880":"大韓民国",
"884":"カンボジア",
"885":"タイ王国",
"888":"シンガポール",
"890":"インド",
"893":"ベトナム",
"899":"インドネシア共和国",
"90":"オーストリア",
"91":"オーストリア",
"93":"オーストラリア",
"94":"ニュージーランド",
"955":"マレーシア",
"958":"マカオ",
"977":"定期刊行物",
"978":"書籍用",
"979":"書籍用",
"980":"返金受領書用",
"981":"ユーロ通貨クーポン用",
"982":"ユーロ通貨クーポン用",
"99":"クーポン用 "
} ;



調べたい頭の数字を入力するとマッチすると国名を表示します。
フォームに数値を入力します(ex. 10 45など)
※賢くないので、あらかじめマッチする数値の桁数を入れないといけません。








参考:
バーコード仕様 - エフ・ディー・シー 技術部国別コードを参考にしました。

リンク集 2007/06/12

スペル修正プログラムはどう書くか

Tumblr

Main Page - Bloggerhacks

【コラム】Java API、使ってますか? (15) アノテーションをさらに広い範囲で利用可能にするJSR 308 | エンタープライズ | マイコミジャーナル

Amazon Web Services Developer Connection : XML UPC SEARCH NOT WORKING ...

Joshua Marinacci's Blog: Using Java2D to to build a Stacked Image Editor

EfficientJavaScript - Dev.Opera - 効率的な JavaScript

Amazon Web サービス ブログ: ECS 3.0 から 4.0 への移行

libdecodeqr - Trac


Karetta|Gaucheプログラミング|「Lisp脳」の謎に迫る - Schemeプログラマの発想

lethevert is a programmer - Re: クロージャ

Photoshopチュートリアル ミニチュア模型を撮影したような写真に加工する - DesignWalker

viでutf-8のファイルの編集 2007/06/12

viでutf-8のファイルの編集


:edit ++enc=utf-8

とうつ。

[オラクルメモ]日付関連 2007/06/11


to_number(to_char(SYSDATE, 'YYYYMMDD')), to_number(to_char(SYSDATE, 'HH24MISS'))

if文のネストでのelseは好きではない その続き 2007/06/11
2008/03/23

boolean値が3つあって、その状態の組み合わせてをelseなしで記述するための準備。


public class PrintCombination2 {

public PrintCombination2() {

}

public static void main(String[] args) {
p(3);
}

public static void p(int n) {

int t = 1;
for (int i = 0; i < n; i++)
t = t * 2;

System.out.println("c:" + t);
Boolean[] b = new Boolean[n];
for (int i = 0; i < n; i++)
b[i] = false;

int pos = n - 1;
pp(b, pos);
}

public static void pp(Boolean[] bb, int pos) {
if (!(0 <= pos)) {
print(bb);
return;
}

bb[pos] = true;
pp(bb, pos - 1);

bb[pos] = false;
pp(bb, pos - 1);

}

public static void print(Boolean[] bs) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bs.length; i++)
builder.append(bs[i] ? "T" : "F").append(" ");

// System.out.println(builder);
StringBuilder builder2 = new StringBuilder();
for (int i = 0; i < bs.length; i++)
builder2.append(
bs[i] ? (char)(97 + i) : "not(" + (char)(97 + i) + ")")
.append(i < bs.length - 1 ? " && " : "");
System.out.println("if(" + builder2 + "){");
System.out.println("// " + builder);
System.out.println("return;");
System.out.println("}");
}

}




c:8
if(a && b && c){
// T T T
return;
}
if(not(a) && b && c){
// F T T
return;
}
if(a && not(b) && c){
// T F T
return;
}
if(not(a) && not(b) && c){
// F F T
return;
}
if(a && b && not(c)){
// T T F
return;
}
if(not(a) && b && not(c)){
// F T F
return;
}
if(a && not(b) && not(c)){
// T F F
return;
}
if(not(a) && not(b) && not(c)){
// F F F
return;
}


ちなみにnotメソッドは、


static boolean not(boolean b){
return !b;
}



ここまでして、if-elseの山形を消したいのか。。。

processingで作成されたグラフィック 2007/06/10

Vimeo / Magnetic Structure






Magnetic Structure from flight404 on Vimeo


processingでここまでできるんですね!!

かっこいいです。



作者のブログ
all manner of distractions

言語ゲーム - 論文読み No Ifs, Ands, or Buts Uncovering the Simplicity of Conditionals http://lambda-the-ultimate.org/node/2148 2007/06/10

言語ゲーム - 論文読み No Ifs, Ands, or Buts Uncovering the Simplicity of Conditionals http://lambda-the-ultimate.org/node/2148

ECMAScript Edition 4 レファレンス実装 2007/06/10

ECMAScript Edition 4 Reference Implementation | Lambda the Ultimate

ECMAScript Edition 4 レファレンス実装はSML(Standard ML)で行われたそうです。


参考:
ML (プログラミング言語) - Wikipedia

Standard ML of New Jersey

生年月日から年齢を計算する簡単な方法 2007/06/09

sanonosa システム管理コラム集: 生年月日から年齢を計算する簡単�

public class Cals2 {
public static void main(String[] args) {
System.out.println(((20070608 - 19850101)/10000));
System.out.println( (int)((20100102 - 20000103)/10000));
System.out.println( (int)((20100103 - 20000103)/10000));
System.out.println( (int)((20100104 - 20000103)/10000));
}
}

高速化 2007/06/08

最近の高速化

開発者はVarnishを高速化プログラミングの参照実装として活用してほしい。Varnishで採用されている実装はOSの性能をフルに引き出すという点できわめて興味深い実装になっている(FreeBSD 6/Linux 2.6対象)【レポート】高速化プログラミングの参照実装としても活用さ�



一般にFTPはTCPを使っているので,受信確認パケットをやりとりするための時間がかかる。Files2UのJavaアプレットでは受信確認をしないUDPを使い,ファイルを圧縮している。【Interop Las Vegas】カナダの企業がJavaで実装した高速ファイル転送ソフトを出展:ITpro

xxx2ていうメソッド名もしくはクラス名はやめてくれ、というのはすごくまともな感覚だと思う。 2007/06/08
2007/07/16

N2 ToolBox 頼むからxxx2ていうメソッド名つけるのはやめてくれ

「xxx2ていうメソッド名つけるのはやめてくれ」というのはすごくまともな感覚だと思う。

とはいっても、なんとか2というネーミングをしてしまう気持ちもわからないではない。

理由こんな感じだろう。

(a)もう頭がいっぱい、いっぱい。
(b)別の名前つけて、ぶーぶーいわれるのがいやだから。
(c)自信がなくて、おきかえられない。えい、xxx2にしちゃえ。

命名するというのは、いずれにしろ覚悟がいる行為。
ぐっ覚悟決めて名前つけしましょう。
と、自戒をこめて。

[オラクル]現在、接続しているインスタンス名を知る方法 2007/06/08

現在、接続しているインスタンス名を知る方法

SQL> select INSTANCE from v$thread

真理値表を作成するための準備 その2 2007/06/08

public class PrintCombination {

public PrintCombination() {

}

public static void main(String[] args) {
p(3);
}

public static void p(int n) {

int t = 1;
for (int i = 0; i < n; i++)
t = t * 2;

System.out.println("c:" + t);
Boolean[] b = new Boolean[n];
for (int i = 0; i < n; i++)
b[i] = false;

int pos = n - 1;
pp(b, pos);
}

public static void pp(Boolean[] bb, int pos) {
if (!(0 <= pos)) {
print(bb);
return;
}

bb[pos] = true;
pp(bb, pos - 1);

bb[pos] = false;
pp(bb, pos - 1);

}

public static void print(Boolean[] bs) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bs.length; i++)
builder.append(bs[i] ? "T" : "F").append(" ");

System.out.println(builder);
}

}



c:16
T T T T
F T T T
T F T T
F F T T
T T F T
F T F T
T F F T
F F F T
T T T F
F T T F
T F T F
F F T F
T T F F
F T F F
T F F F
F F F F

BLOBからgetBytesするときの注意 2007/06/08

blob型格納されているデータをバイトの配列ですべて取得する場合
BlobクラスにはgetBytesメソッドがありますが、最初の引数は0ではなく、1ではじまることに注意。


Blob blob = rs.getBlob("col_blob");
byte[] bs = blob.getBytes(1, (int)blob.length());


getBytesの最初の引数
javadocに最初のバイトの位置は1と明記されています。

pos - BLOB 値内の最初に抽出されるバイトの位置 (序数)。最初のバイトの位置は 1
javadoc

プログラマという職業 2007/06/07
2007/07/16

最近読んだ記事のなかで、おどろいたのは、プログラマーの未来の時給の下がりが一番大きいというものだった。

うーん。

でも、めげずにがんばろう...Orz

参考:
駆け出しプログラマーのグループ - hamastaの日記 -Pythonで学ぶプログラ�


4901280384プログラマーの復権 情報ビジネスの展望
Edward Yourdon
シイエム・シイ 2001-02-01

by G-Tools

バーコード ISBN などなど そしてrubyのsliceとjavascriptのsliceは違う 2007/06/05


function decode_isbn(c){

if(c.match(/^978/)){
c = c.substr(3,9)
} else {
c = c.substr(0,9)
}

sum = 0
checksum = 0
for(i=0;i<9;i++){
sum = sum + (parseInt(c.substr(i,1)) * (i+1));
}
checksum = sum % 11

if(checksum == 10){
c = c + "X"
} else {
c = c + checksum;
}
return c;
}


コード参考にさせていただいたサイト
rubyのコードを公開していました。
http://rcode.jp/

バーコードの紹介、バーコードを使ったアマゾンサービスの利用のプログラムを提供しているようです。
http://www.nminoru.jp/~nminoru/memo/barcode/

参考
http://mobiquitous.com/device/barcode.html

コピープログラマ 2007/06/01
2007/07/16

白状すると僕は、コピープログラマであると思う。
現状、この職業の7割がたコピープログラマでなりたっている可能性大である。
検索エンジン、Webの恩恵で、たいがいコピーペーストでプログラムを書いてしまえる。

コピープログラマからはじまって、
ブログを通して、オリジネーターになれたらいいな、と夢想するが、その道は長そう。

プログラマになる方法

上記のリンクは、まさに現代においてのプログラマの姿を端的に現していると思う。

コピーペーストすればいいと、いいきってしまうプログラマがいたら注意したほうがいい、ある意味それは真実かもしれないが、新しいものが何もでてこなくてつまらないから。