読者です 読者をやめる 読者になる 読者になる

nesheep5's blog

プログラミング・子育て・音楽 etc...

HHKBで小文字英字が入力できなくなったら(CapsLock)

普段、HHKB(Happy Hacking Keyboard)というキーボードを使用しています。
ある日、突然大文字英字しか入力できなくなってしまい戻すのに少し手間取ったのでメモ。

挙動的にCapsLockがかかったのだろうと推測したのですが、HHKBにはCapsLockキーがありません。
じゃあショートカットキーかな、、と思い色々調べたところ、公式サイトのFAQに記載がありました。

Happy Hacking Keyboard サポートFAQ

以下、引用です。

Q1:“Caps Lock” を有効にするにはどうしたらいいですか?
A1:キーボード後部のDIPスイッチで、設定したモードにより動作が異なります。
HHKモード】
“CapsLock"の機能はありません。
【Lite拡張モード、Macモード】
【Fn】+【Tab】キーで"CapsLock"の働きをします。

私はMacモードで使用していたので、Fn + Tabキーで無事CapsLockを解除できました。
FAQの一番上に書かれていたので、意外と皆さん引っかかるのかもしれませんね。

リフレクションで引数名を取得するときはjavacに-parametersオプションをつける

Java プログラミング

Javaでリフレクションを利用してメソッドの引数名を取得したかったのですが、ちょっと詰まったのでメモ。
結論としてはコンパイル時、javacに-parametersオプションをつける必要がありました。
以下検証までの手順です。

問題:リフレクションで取得した引数名がargNになる

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class GetArgsName {
    public static void main(String... args) throws NoSuchMethodException, SecurityException {

        Method m = Calc.class.getDeclaredMethod("add", int.class, int.class);
        Arrays.stream(m.getParameters())
            .map(Parameter::getName).forEach(System.out::println);
    }

    public static class Calc {
        public int add(int x, int y) {
            return x + y;
        }
    }
}

上記のプログラムで引数名を取得できると思い、実行してみたところ以下のような結果が。

arg0
arg1

引数名であるx,yを取得したかったのですが、なぜかargNで取得されました。

解決法:javacに-parametersオプションをつける

いろいろ調べた結果、以下のサイトにドンピシャの答えが書いてありました。
ひしだまさんにはいつもお世話になっています。笑

Javaリフレクションメモ(Hishidama's Java Reflection Memo)Javaリフレクションメモ(Hishidama's Java Reflection Memo) 

リフレクションで引数名を取得したい場合、javacに-parametersオプションをつける必要があるとのこと。
またEclipseで実行するときは、プロジェクトのProperties > Java Compiler より以下にチェックを入れればOK。
f:id:nesheep5:20170202140221p:plain

再度実行した結果、以下のように思惑どおり引数名を取得できました。

x
y

エンジニアのヘルスケアで本当に買ってよかったもの5選

プログラミング 健康

エンジニアになってから十余年、日々のデスクワークのによる肩こり・腰痛・腱鞘炎が辛いです。職業病ですね。
放っておくとどんどん悪化していくため、なんとか改善しようと試行錯誤の毎日です。
色々試した中で、これは本当に買ってよかった!と思えるものを紹介します。

LPN ストレッチポール®EX

LPN ストレッチポール(R)EX ネイビー 0001
LPN
売り上げランキング: 73
  • プロアスリート御用達
  • 猫背の矯正、肩甲骨まわりのストレッチに効果
  • 体幹トレーニングにも利用可能

ラグビーをやっているエンジニアの方に薦めてもらいました。
プロのアスリートも多く使われているそうです。
ポールの上に寝そべり、エクササイズをすることで正しい姿勢に矯正することができます。
寝起きに使うと、いかに体が凝り固まっているか実感できると思います。特に猫背の矯正、肩甲骨まわりのストレッチに効果があり、ググーっと伸ばすことでデスクワークで凝り固まった体をほぐすことができます。
また体幹トレーニングにも利用できるため、体を鍛えて凝りや痛みを未然に防ぐ使い方も可能です。
類似品が色々ありますが、正規品は作りがしっかりしていてヘタりもなく硬さも絶妙だったのでおすすめです。

参考サイト
ストレッチポールとは|ストレッチポール公式サイトストレッチポールとは|ストレッチポール公式サイト 
ストレッチポール®がベスト体幹ツールの理由と効果的使用法ストレッチポール®がベスト体幹ツールの理由と効果的使用法 

ドクターエア 3Dマッサージロール

  • 充電式でとにかく手軽に使える
  • 継続することで体質改善に

とあることからモニターをやることになりこの商品を知りました。
3段階のバイブレーションで凝っている箇所をほぐします。充電式でとにかく手軽につかえるので、テレビをみながらソファーで使用したりと、「買ったけど面倒になって使わない」がなく毎日使用しています。
バイブレーションだけでコリが取れるのか?と半信半疑だったのですが、筋肉を振動させることで筋膜剥がしのような効果があるそうです。足などに使うとむくみがとれ、柔軟性も高まります。
モミ玉でゴリゴリやったときのようなもみ返しがないのもメリットです。

参考サイト
3D MASSAGEROLL(マッサージロール) | DOCTOR AIR (ドクターエア)3D MASSAGEROLL(マッサージロール) | DOCTOR AIR (ドクターエア) 

PFU Happy Hacking Keyboard Professional2 墨

  • 知る人ぞ知る高級キーボード
  • キー入力のしやすさで指・手首の負担軽減

MacBookを使うようになってから薄いキーボードのせいで指が痛むようになったため、購入しました。
静電容量無接点方式のためキーがとても軽く底打ちせずに入力できるので、指や手首への負担が格段に減りました。
また矢印キーもないほどコンパクトなので、マウスへ手を伸ばす距離が最小限になり、腕への負担も少なくなります。
知る人ぞ知る高級キーボードで購入までかなり悩みましたが、本当に買ってよかったと思える一品です。

参考サイト
Happy Hacking Keyboard | PFUHappy Hacking Keyboard | PFU 
僕がHHKB(Happy Hacking Keyboard)を愛用する理由 - give IT a try僕がHHKB(Happy Hacking Keyboard)を愛用する理由 - give IT a try 

無印良品 ネッククッション

  • 昼休みの仮眠に最適
  • 寝る姿勢に合わせて形を変えられる

昼休みに15分ほど仮眠を取っているのですが、良い枕がないか探したところこれにたどり着きました。
中身がサラサラのビーズクッションになっているため、寝る姿勢に合わせて形を変えることができます。
使う前は起きた時に首が痛かったのですが、使ってからは短時間でしっかり体を休めることが出来るようになりました。

MOLDEX 耳栓お試し8種類セット

MOLDEX 耳栓お試し8種類セット
Moldex
売り上げランキング: 4,026
  • 抜群の遮音性
  • 8種セットで自分に合うものが見つかる

集中したい時、仮眠を取るときに使用するため、いろんな耳栓を試してこれにたどり着きました。
遮音性が抜群で、人の声もきちんとカットできます。(逆に声をかけられても反応できないくらいです)
大きさや柔らかさ、遮音特性などが異なる8種がセットになっているので、自分に合うものが見つけられると思います。
個人的にはカモフラージュ柄のカモプラグがおすすめです。

参考サイト
Moldex JapanMoldex Japan 
うるせぇ、MOLDEXの耳栓比較記事ぶつけんぞ!うるせぇ、MOLDEXの耳栓比較記事ぶつけんぞ! 

すぐできる!Java100本ノックをSlackに自動投稿するBot

プログラミング Java

先日、JJUG CCC 2016 Fallに参加してきました。 その中でJava100本ノックが紹介されており、面白そうだから社内でもやってみようかという話になりました。 Slackに問題を自動投稿するBotスプレッドシートとGASで作ってみたので、よければ参考にしてみてください。

手順

1.問題番号を保存するスプレッドシート作成

Java100本ノックSlackBot_-_Google_スプレッドシート.png

2.スクリプトエディタを開く

スプレッドシートのメニューから「ツール」→「スクリプトエディタ」を選択します。

3.GASにSlackAppライブラリを導入する

スクリプトエディタのメニューから「リソース」→「ライブラリ」を選択し、以下のLibrary Keyを入力します。

SlackAppのLibrary Key → M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO

4.Slackのトークンを発行

こちらの記事を参考に、Slackのトークンを発行します。

5.コード作成

スクリプトエディタに以下のコードを貼り付けます。 TOKEN定数は上記で取得したトークンに置き換えてください。

var URL = "https://github.com/JustSystems/java-100practices/tree/master/contents/";
var TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // 取得したトークンを貼り付け

function main() {
  // 平日のみ投稿
  var today = new Date();
  if(isJapaneseHoliday(today) || today.getDay() == 0 ||today.getDay() == 6){return;} 
  
  var qNumRange = SpreadsheetApp.getActiveSheet().getRange(1, 2);
  var qNum = qNumRange.getValue();
  postSlackMessage(qNum);
  
  // 問題インクリメント
  qNum++;
  if(qNum > 100){ qNum = 1;}
  qNumRange.setValue(qNum);
}


function postSlackMessage(qNum) {
  var slackApp = SlackApp.create(TOKEN); //SlackApp インスタンスの取得
 
  var options = {
    channelId: "#java100knock",
    userName: "Java100本ノックBot",
    message: "今日の問題はこちら!\n" + 
             URL + ('000' + qNum).slice( -3 ) // 問題番号0埋め         
  };
 
  slackApp.postMessage(options.channelId, options.message, {username: options.userName});
}

function isJapaneseHoliday(date) {
  var year = date.getFullYear();
  var month = date.getMonth();
  var day = date.getDate();
  
  var startDate = new Date();
  startDate.setFullYear(year, month-1, day);
  startDate.setHours(0, 0, 0, 0);

  var endDate = new Date();
  endDate.setFullYear(year, month-1, day);
  endDate.setHours(23, 59, 59, 999);

  var cal = CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
  var holidays =  cal.getEvents(startDate, endDate);

  return holidays.length != 0;
}

この状態でmainメソッドを実行すると、Slackのjava100knockチャンネルに問題が投稿されます。

6.起動トリガーを設定

スクリプトエディタのトリガーアイコン(時計のマーク)より、トリガーを設定します。 Java100Knock.png

この設定で毎朝8~9時に問題が自動投稿されます。(ソース内で平日のみ投稿するように制御しています)

投稿された問題は以下のような感じになります。 Slack_-_Paygent.png

参考

Scala入門時に役立つ情報まとめ

プログラミング Scala

はじめに

Scalaの勉強を始めた時にJavaRubyと比べると情報量が少なく苦戦したので、今まで調べたことや経験者から聞いた情報などをまとめてみようと思います。
私自身まだまだ初心者ですが、これからScalaやってみようかなと思っている人の参考になれば幸いです。

WEBサイトで勉強する

ScalaのインストールやHelloWorldなどは検索するとすぐ見つかるので割愛します。
Scala特有の記法や概念などを勉強するのに以下のサイトが参考になりました。

技術系

読み物系

勉強会・イベントに参加する

技術書選びやネットでの勉強が意外と苦戦したので、勉強会を探して経験者に直接聞く作戦に切り替えました。ただ勉強会も他の言語に比べると少ないです。
関東で唯一?定期開催している芸者東京エンターテインメント社の「Scala勉強会in東京」にお邪魔させていただきました。
結果として作戦は大成功で、有益な情報がたくさん聞けました。可能な限り通いたいと思います。
またScalaをテーマにした日本最大級のカンファレンス「ScalaMatsuri」が2016年1月30、31日に開催されるので参加してみようと思います。

書籍で勉強する

通称コップ本と呼ばれる「Scalaスケーラブルプログラミング第2版 (2016/09/20に第3版が出版されました!)」がいちばん有名です。ただし全35章、700ページ超えと、初心者が読み切るにはそれなりの覚悟が必要です。苦笑

業務でScala使っている方に伺ったところ、普段は「Scala逆引きレシピ」で調べて、深く知りたい箇所をコップ本で勉強するのが良いのでは。との回答でした。
個人的には「関数プログラミング実践入門」「Javaによる関数型プログラミング」を読んでいたおかげで比較的すんなり頭に入ってきた感があるので、関数型プログラミングを全く知らない方は合わせて読むと良いかも知れません。

※ 参考:Scalaを学ぶためのScala本の読み進め方 (10冊)

問題を解く

とにかくコード書くのが上達の近道とのことで、別言語技術書のサンプルソースScalaに書き直す、などやったりするそうです。
最近はオンラインでプログラミングの問題を解くことができるので、簡単なレベルのものからScalaで書いています。プロコン系は開催日が指定されていることが多いので、自分のペースで進められる「Paiza」「AOJ」あたりがオススメです。
また「AtCoder」は過去問について他ユーザの回答を閲覧できるので、自力で解いた後に他の回答を見て良いところを盗む、といった使い方ができます。

Scala界の著名エンジニアを追う

Scalaの最新情報をキャッチアップする方法について勉強会で相談したところ、口を揃えて「吉田さんをフォローしろ」と言われました。
てっきりどこかのサイトを教えてもらえるものだと思っていたので、エンジニアをフォローするというアプローチはかなり新鮮でした。
私が参考にさせてもらっているエンジニアの方たちを挙げさせてもらいます。(50音順)

瀬良 和弘さん

エムスリー社ソフトウェアエンジニア。 ScalikeJDBC、Skinny Framework など Scala OSS プロジェクトリード。 Scalatra、json4s、Scalate のメンテナ。

竹添 直樹さん

ビズリーチ社チーフアーキテクト。 Scala逆引きレシピ著者、GitBucketファウンダー。

中村 学さん(がくぞさん)

株式会社Tech to Value 代表取締役。 Japan Scala Association理事。

水島 宏太さん

ドワンゴプログラマ。 Japan Scala Association代表理事。

Kenji Yoshidaさん

scalazとsbtとargonautとscalikejdbcのコミッター。

フレームワーク関連

WEBアプリフレームワーク

Play Framework」がデファクトスタンダードと言ってよさそうです。執筆時点で安定版である2.4系の情報が意外と少ないので、古い記事は公式の移行ガイドなどを見ながら読み替えをする必要になるかも知れません。ビズリーチ社のハンズオンは2.3系、2.4系が用意されているのでとても参考になりました。
シンプルでSinatraライクなWebフレームワークとして「Scalatra」も人気があるようです。

DBアクセスライブラリ

SlickScalikeJDBCが二大勢力のようです。SlickはPlayFrameworkの標準ライブラリになりました。
ScalikeJDBCは前述のエンジニアの方たちが作っているので、本当に困ったら直接聞けるというメリットがあります。(と勉強会で教わりました。笑)
私個人はScalikeJDBCを勉強し始めた段階なので、それぞれの良さがわかった頃に改めてまとめたいと思います。

※ 参考:Slick vs ScalikeJDBC

その他

scalazを使うエンジニアを業界では「Z戦士」と呼ぶそうです。笑

開発環境関連

IntelliJ IDEA

PlayFrameworkの勉強時、始めはEclipseにScalaIDEというプラグインを入れて使っていたのですが、動作が不安定&重いのでIntelliJ IDEAに乗り換えてみました。まだ使い始めなので慣れないですが、サクサク動いておすすめです。

ATOM

最近注目のテキストエディタATOMを使って開発環境を整えることもできるそうです。IDEを使うには大げさすぎる時など状況によって使い分けるといいかもしれません。 * AtomでのScala開発環境 - たけぞう瀕死ブログ

小ネタ

REPLでシンタックスハイライト

  • Scala 2.11.4より、ターミナルで"scala -Dscala.color"と入力してREPLを起動するとちょっとだけ(REPL結果の変数と型だけ)カラー表示となる。