ymsr送別会へ行って来ました

ましろ先生の送別会に行ってきました。


最初に亡くなったのを知ったのは1月に入ってからでした。
最近はjava-jaのコミュニティともそれほど絡んではおらず
関係者ともすっかり疎遠でした。


ただtwitterなどで技術に対する意識や発信力を一方的に見て尊敬していながら
自由な発言や奔放な行動にも憧れを感じていました。


そんなやましろさんの異変に気がついたのは
QiitaのScalaのAdventCalendarでした。
http://qiita.com/advent-calendar/2013/scala


いつまで経っても更新されない。そういえば最近つぶやき見ないな?と思って
Twitterを見てみると最近つぶやきが全く無く
さらに調べて行くと事故に合ったらしいと言う情報が書かれていました。


情報が少ないしjava-jaだし、イタズラじゃないか?と疑ったりもしましたが
そんなことは無いと言うのを感じて混乱しました。。



ましろさんと出会ったのはまだSeaserカンファレンスが盛り上がっていたとき
java-jaの飲み会に参加したのがきっかけです。その後もymsr幹事の会に数回参加しました。
自分は人見知りで誰かに話しかけることも出来ずはじっこで飲んでたりしてました。
ましろ先生とも話したのは2、3回程度だと思います。


こんな感じにそんなに深く関わりが無かったので参加して良いか少し悩みましたが
最近の自分の状況が仕事やらプライベートやら色んなことで悩んでいて
行かないことに後悔するかなと思って、行かないで後悔するよりは行こうと思いました。



送別会は非常に良い会でした。
ディスったり、ネタで笑いを取ったりして相変わらずメチャクチャしてましたが
すごく慕われていたのを感じる会でした。


飲んで酔っぱらってる中でのやたら難しいゲームだったり
MacBookAirでスイカわりしたり
Macにビールを飲ませたり。
自前で都会のど真ん中の飯田橋で花火あげたり!


相変わらずムチャクチャで尊敬します!
ここ最近で一番笑うことができました!



あんまり関わることが出来なかったけど向こうに行ったときにはもっと仲良くなりたいです。
そして、これからはやましろ先生をもっと見習って
"周りを気にしすぎず" 自分に正直に、後悔しないように
はっちゃけるときにははっちゃけ、もっとコンテンツ力発揮出来るように
少しでも楽しい人生に出来るように少しずつでも変わって行って全力で生きたいと思います!



P.S.
まだまだ自分はJavaを使ってるので新しいPCになったとき
eclipseの設定どうやるんだっけ?って検索すると
ymsr先生のブログがいつも出て来ます。
これからもお世話になります。


いつまでも僕の先生です。

良いプログラマになるための基礎知識

久々です。
ちょっとだけ技術に近くて見せれるものをやったので
久々にブログ書いてみた。

動けばいいかなって感じでプログラムしてる
新人とか若い人に向けてとか、
まじめにやってるけど体系的な言葉は知らないで
プログラムしてる人へ向けて
社内で発表したときの資料。

オブジェクト指向って書いてあるけど、
ある意味では大してオブジェクト指向じゃないかも。
でも、根底かも。

具体的なオブジェクト指向のことは発表資料には書いてないので
本を買うか、ネットでキーワードをぐぐって貰えばいいかな。





まじめにプログラムや開発したいなら
この本は結構オススメ!

htmlを開くと文字化けするとき

metaタグとかが無いと自動判別してくれないので
ファイル毎に直すのはだるい。
でも、いつも設定を忘れちゃうのでメモっておく。


コンテンツ・タイプ(content type)のデフォルトエンコードって
入力しても全然効かないんだよね。意味無い。。
File Assosiationsも設定するとこないし。
ワークスペース文字コード設定も継承しないし。


と、言うことで調べて見つけた以下のサイトを参考に、
eclipse.ini に -Duser.language=en
で行くことにしました!

文字化け対応
PDT をインストールしたことにより、エンコード文字 UTF-8 で作成された既存プロジェクトの HTML ファイルや CSS ファイルを開いたときに文字化けすることがあります。
meta タグによる charset の指定が HTML ファイルに存在しない場合、エンコード文字を自動判定しようとするのですが、日本語環境においては UTF-8 が定義されておらず、デフォルトの Shift_JIS になってしまうためです。
CSS ファイルの場合は @CHARSET "UTF-8"; が必要です。


また、前項のエンコード文字設定は、新規にファイルを作成する際に挿入される charset の定義になります。
したがって、既存ファイルには効果がありません。


対応としては、


1.個々のファイルにエンコード指定を記述する。
多分、これが正式な対応なのでしょう。
ただ、ファイルの数が多いと、手間が大きくなります。
ちなみに、当サイトでは共通のヘッダー要素は、別ファイルに定義して include で取り込むようにしています。


2.個々のファイルのプロパティでエンコードを指定する。
これも、ファイルの数が多いと、手間が大きくなります。


3.個々のファイルを BOM 付 UTF-8 にする。
これも、ファイルの数が多いと、手間が大きくなります。
また、BOM により別の不都合が発生する可能性があります。


4.eclipse.ini に -Duser.language=en を指定し、Eclipse を英語環境で動作させる。
英語環境でも、日本語表示ができますし、エンコード文字の自動判定に UTF-8 が定義されていますので、文字化けも解消します。
しかし、Eclipse 全体の日時表示が英語圏の形式(例:4/20/10 5:28 PM)になってしまいます。


5.コンテンツタイプのテキストに拡張子 HTML を追加する。
文字化けは解消しますが、コンテンツタイプがテキストであるため、PDT によるタグの補完やチェック等の機能が使用できなくなります。


6.HTML エディタを別にインストールする。
meta タグによるエンコード指定がなくても、UTF-8 であることが認識できる HTML エディタを別にインストールして、HTML ファイルの関連付けを、そのエディタにします。
の方法が考えられます。


7.HTML エディタとして、EclipseHTMLEditor、WTP(Web Tools Platform)、そして Aptana Studio の 3 つから Aptana Studio を使用することにします。
なお、EclipseHTMLEditor を使用する場合は、コンテンツタイプのテキストに拡張子 HTML を追加する方法と併用する必要があります。
また、WTP(Web Tools Platform) では、PDT と同様のエンコード文字自動判定を行っていますので、文字化けを解消することができません。

http://www.system-act.com/eclipse/pdt.html

eclipse起動時に設定するメモリ設定

仕事でjava7に上げようって話が出て、
真面目に使う感じだったので
eclipseを3.7のjava7対応バージョンに入れ替えようとしたときに
はまったので、メモっときます。



eclipseを動かすときに
XXMaxPermSizeは上げすぎるとダメらしい。
Xmxとのバランスが重要なようだ。
両方をeclipseが起動する最高まで設定
(メモリ設定を割り当てすぎるとeclipse自体が起動しない)
すると、Out of Memoryが出やすいのが全然解消しない。


メモリ4Gのマシン(ただし、利用可能メモリは3Gと出てる)で
XXMaxPermSizeを640m、Xmxを1024mだと
バシバシOut of Memoryで落ちる。


XXMaxPermSizeを384mにして、Xmxはそのまま1024mだと
安定しました。


どうやらXXMaxPermSizeはXmxの3分の1くらいが良いんですかね?
細かい検証などはしてないですが。
もし、検証してるサイトなどありましたら教えて下さい。



最大がどこまで設定できるかを調べていたときにこのブログを見つけました。
http://d.hatena.ne.jp/byunsangho/20110928/1317181697


Xmxで設定して
最大に使えるjava heapから70%までの数値しか指定ができないらしい。
(実際の英文はこちら

http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00014884d287-11c3fb28dae-7ff6_1001.html

)



最後に設定ファイルの中身を全部張っときます。
pleiades使ってます)

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.XXMaxPermSize
384m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms256m
-Xmx1024m
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

業界技術マップ

ちょっと自分の知ってる技術の感じとかポジションを整理したかったので
描いてみました。
SIの経験と現在の仕事の経験から。
頭の中のイメージを全部出せた感じではないのだけど。。


現在の仕事の関係でゲーム側の情報が多めかな。
HTML5とかスマホ周りは過渡期だし。
正直、さわりくらいしか知らないのとか、
名前しか知らないのとか入ってるけど。



あと、絵がしょぼいのは誰かパワーアップしてくれるとうれしい。


もっと情報あったらトラックバックでも、コメントでも下さい。
他に、この言語、このフレームワークは入れとけよ!!って言うのがあれば
ぜひぜひお願いします。


Javaが大好きなのでJava以外あんまりやる気が無いのですが、
最近JavaScriptに萌えポイントがわかってきた感じです。面白い。
でも、Javaっぽさが欲しいのでActionScriptがベターです。
型付JavaScriptって感じで。
でも、モバイル対応終了宣言によって未来がなさげなのが残念。


誰か面白い仕事(職場)紹介してくれないかな。
いろんな技術の話を話し合える仕事場がいいな、、、。



以下、マップ上のキーワード
PHP
 symfony 1.x
 CakePHP 1.x
 Zend Framework
 CodeIgniter
 Ethna
 symfony2
 CakePHP 2.x
 Zend Framework 2


Python
Django
Kay-framework
GAE


Ruby
Ruby on Rails
Sinatra


■.net
LINQ
ASP.net MVC3 (razor)
F#


Java
android(Dalvik)
HBase
Cassandra
GAE
Struts(残念ながら)
Seasar
Spring
Wicket


Erlang
CouchDB


■Go
GAE


iOS
Objective-C
cocos2d


HTML5 & JavaScript
jQuery Mobile
WebGL
sparrow.js


JavaScript
Node.js
Unity
NgCore
PhoneGap
enchant.js
Impact
LimeJS
Titanium Mobile


Flash(ActionScript)
AIR
Flex


Lua
Corona


Squirrel
emo-framework


関数型言語
scala
Haskell
LISP
F#

ループなしFizzBuzzを書いてみた。

http://d.hatena.ne.jp/JunichiIto/20111007/1317976730
で、FizzBuzzがちょっと話題になっているのを見て
自分もFizzBuzz書いてみた。Javaだけど。


で、最初普通に書いたけど面白く無かったので、
縛りをつけて書いてみた。


forやwhileのループ句の禁止。
switch禁止。
ifの数を出来るだけ減らす。
三項演算子はifと同等にカウント。


って言う縛りで書いてみた。

public class FizzBuzz {

	private static final Command command;

	static {

		Command endOfCommand = new Command(null) {void print(int i) {}};
		Command otherCommand = new Command(endOfCommand) {int calc(int i) {return 0;}};
		Command fizzCommand = new Command(otherCommand) {void printOut(int i) {System.out.println("Fizz");}int calc(int i) {return i % 3;}};
		Command buzzCommand = new Command(fizzCommand){void printOut(int i) {System.out.println("Buzz");}int calc(int i) {return i % 4;}};
		Command fizzbuzzCommand = new Command(buzzCommand){void printOut(int i) {System.out.println("FizzBuzz");}int calc(int i) {return i % 15;}};

		command = fizzbuzzCommand;
	}

	public static void main(String[] args) {

		int inParam = 100;

		fizzbuzz(inParam);

	}

	public static void fizzbuzz(int i) {

		command.print(i);
	}

	private static abstract class Command {

		private final Command next;

		public Command(Command next) {
			this.next = next;
		}

		void print(int i) {

			if (calc(i) == 0 && i > 0) {
				fizzbuzz(i - 1);
				printOut(i);
				return;
			}

			this.next.print(i);
		}

		void printOut(int i) {
			System.out.println(i);
		}

		int calc(int i) {
			return 0;
		}

	}
}


コメントがないので見づらいかもしれないけど、
ifを1つにまで出来ましたー。


とりあえず満足。
ifを0個に出来ないかなー。