6月の帰社日は社員の入社歓迎会を「和食 おの寺」にて行いました!

新しく入社された方は、なかなかのイケメン、プログラミングのセンスが高く、お酒にも強いという三拍子揃った優秀な社員さんです!
同じプロジェクトとなったら毎週飲みに行きましょう!(笑)

さて、今回ごちそうになった「おの寺」さんは、1ヶ月以上前から予約を取らないとまず取れないほどの人気のお店。当日は予約のみで埋まっていました…

メニューは日替わりのコースメニューのみで、旬の季節料理が出てきます。

今回のメニューはこちら。(見づらいかも…)

旬の料理が盛りだくさん


定番の茶わん蒸し。これは外せない!


お値段が書いていない一品物…推定2000円~5000円?

写真がピンボケしてて載せていませんが、のどぐろの一夜干しは至高でした。
5月24日にJavaをテーマにしたカンファレンス「Java Day Tokyo 2016」が開催。
※Java 9は、来年3月にJava 9リリース予定。

■注目の「Project Jigsaw」とは?
 
 他のモジュールをどのように使うか、また他のモジュールからどのように使われるかを制御するモジュールを規定
 
■何が変わるの?(「Project Jigsaw」の思想)
 
 これまではpublicなクラスにしたら全てのクラスからアクセスできてしまっていたが、
 意図しないクラスからも自由に呼べてしまっていた。(publicなので当然なんですが)
 
 さらに、Javaのモジュール化が実現すれば、Javaは小さなIoTデバイスから大規模なクラウドまで、これまで以上に活用の幅を広げられるとのこと。
 
■具体的には?
 
 モジュールという概念を導入することにより「依存関係」「バージョン」「公開範囲」をコントロールしていく。
 つまり、今までのpublicクラスは誰からでもアクセス可能だったが、モジュール内のpublicクラスは、公開範囲に対応するクラスからしかアクセスできなくなるようになるらしい。

■実践
 
 ふーん(?)という感じですが、作成~実行までの流れは以下のような感じ。
 ※ソースは、クイックスタートより引用

 1.ソースの準備
 
  ①org.astro/module-info.java        ←呼び出される側のソースのモジュール定義
  ②org.astro/org/astro/World.java      ←呼び出される側のソース(製品などのモジュールだと思ってくれればOK)
  ③com.greetings/module-info.java      ←呼び出す側のソースのモジュール定義
  ④com.greetings/com/greetings/Main.java   ←呼び出す側のソース(自分たちが作成するサービスだと思ってくれればOK)
 
  ④は②に依存している関係
 
  ===== ①org.astro/module-info.java =====
   module org.astro {
       exports org.astro;
   }
 
  ===== ②org.astro/org/astro/World.java =====
   package org.astro;
   public class World {
      public static String name() {
       return "world";
      }
   }
 
  ===== ③com.greetings/module-info.java =====
   module com.greetings {
       requires org.astro;
   }
 
  ===== ④com.greetings/com/greetings/Main.java =====
   package com.greetings;
   import org.astro.World;
   public class Main {
       public static void main(String[] args) {
           System.out.format("Greetings %s!%n", World.name());
       }
   }
 
 2.コンパイル ※見易くするために一部改編しています。
  
  # 呼び出される側のソースのコンパイル(①と②)
  javac -d mods/org.astro org.astro/module-info.java org.astro/org/astro/World.java
  # 呼び出す側のソースのコンパイル(③と④)
  javac -modulepath mods -d mods/com.greetings com.greetings/module-info.java com.greetings/com/greetings/Main.java
 
 3.実行
  
  # com.greetingsモジュールのcom.greetings.Mainを実行。
  java -modulepath mods -m com.greetings/com.greetings.Main
 
  # 依存関係を定義しているorg.astroモジュールのorg.astro.Worldを実行される
  >> 「Greetings world!」と出力


 仮にcom.greetings/module-info.javaでモジュールorg.astroをrequiresしないようにするとクラスパス上は解決できてもコンパイルに失敗するようです。
 
  ===== ③com.greetings/module-info.java =====
   module com.greetings {
     // requires org.astro; ← この行をコメント!
   }
 
  # 呼び出す側のソースのコンパイル
  javac -modulepath mods -d mods/com.greetings com.greetings/module-info.java com.greetings/com/greetings/Main.java
 
  import org.astro.World;
            ^
  src/com.greetings/com/greetings/Main.java:5: error: cannot find symbol
   System.out.format("Greetings %s!%n", World.name());
                           ^
   symbol: variable World
   location: class Main
   2 errors

今までのANTやMavenなどのビルドツールが使えなくならない事を祈りたいですショック!
Python3で他の言語にはない変わった機能の紹介。

Pythonにはイテレータとジェネレータがあり、以下のような違いがあります。
・イテレータ :要素を反復して取り出す
・ジェネレータ:1要素を取り出そうとする度に処理を行い、要素をジェネレートする。イテレータの一種。

分かりにくいと思うので、とりあえず、サンプルを見てみましょう。

【イテレータ】
(ソース)
# リスト生成
list = [1, 2, 3]
# listの内容を繰り返し
for v in list:
  print(v) # 1, 2, 3を順番に出力

(実行結果)
1
2
3

【ジェネレータ】
(ソース)
# ジェネレータ関数を定義
def my_gen():
  print('何かの処理1')
  yield 1
  print('何かの処理2')
  yield 2
  print('何かの処理3')
  yield 3

# ジェネレータ生成
gen = my_gen()
# ジェネレータの結果を表示
for v in gen:
  print(v) # 1, 2, 3を順番に出力

(実行結果)
何かの処理1
1
何かの処理2
2
何かの処理3
3

★ジェネレータまとめ★
【使用方法】
・関数内でyieldを使う
・yieldを使った分だけイテレート(繰り返し)可能
・ジェネレータ内でreturnは使えない(1つの関数内でreturn or yieldのどちらかが利用可能)

【特徴】
・使用感はイテレータとジェネレータは同じ挙動
・リストの場合は作成時に中身を全て計算、ジェネレータは呼び出された際に計算。
 →ジェネレータは予めメモリ上に記憶しておく必要がないのでメモリ使用量が抑えられる。

【使い分け】
・予めリストの内容が特定でき、単純に生成できる→リスト
・予めリストの内容が特定できない、もしくは、生成にコスト(時間やメモリ量)が掛かる→ジェネレータ
と使い分けすれば良いかと思われます!