技術開発日記

技術やら日々思ったことを綴ってます。

Scala の Collection の使い分け

Scalaで開発をしていると様々な場面で Collection を使うことがあると思うが、Collection と言ってもScalaには多くの種類のクラスが存在する。 しかも、その種類はかなり多いうえに分類も大変だ。 まず、mutable なのか imutable。 さらに IndexedSec なのか…

ConohaのVPSにSSHでログインする際の注意点

VPS

ConohaのVPSにSSHでログインする際の手順で /etc/ssh/sshd_config を編集後にsshdを再起動とあるが、実際には再起動だけではログイン出来ず、コンソール画面からVPSの再起動をしないとパスワードログインができなかった。 本来ならsshdの再起動だけで問題な…

iPhoneアプリを作ってみました

iPhoneアプリを作ってみました。もともと業務でテスト用のアプリがあるといいねっていうところから じゃー、ちょっと作って見ますといった割と軽いノリで作って見ました。 ただ技術的好奇心で本当に"作ってみた"というレベルなので、かなりお粗末なものにな…

Scalaを選ぶ理由

Scala スケーラブルプログラミングの1章を簡単にまとめ 互換性(Javaとの共存) Scalaプログラムをコンパイルすると、Java仮想マシンバイトコードになる パフォーマンスは通常Javaと同じぐらいになる Scalaは標準Javaライブラリの型も再利用している 例1)Sc…

AWS SNS を使ってプッシュ通知してみた【Java】

AWS

AWSの管理画面からプッシュする記事だったり、SDKを使っていても断片的なコードしかない記事が多かったので、アプリからサーバーサイドまでの一連の流れをまとめたものを作ってみました。 AWS SNS とは 簡単に言ってしまえばプッシュ通知をまとめて管理して…

Amazon Kinesis Log4j Appenderの jar が最新じゃない件

AWS

Amazon Kinesis Log4j Appenderの公式ドキュメントからjarをダウンロードしても最新の修正が反映されていないため、下記のエラーが発生。(2015/7/4時点)Amazon Kinesis サンプルアプリケーションの Log4J Appender、サンプル認証情報ファイル、サンプルログ…

音楽ストリーミングアプリ AWA を早速使ってみました

AWAという音楽配信アプリが今日リリースされたので、早速使ってみた感想。 AWAとは 主要レーベルの洋楽・邦楽数百万曲をいつでも楽しむことができる月額定額制の音楽ストリーミングサービスAWA - 音楽配信アプリawa.fm 個人的に感じたこと ・UIがスタイリッ…

タイプアノテーション

今までクラスやメソッドに対して宣言できたアノテーションが、Java8から変数の型やジェネリックスの型に対してもアノテーションを定義することができるようになりました。 ただ、注意点として、あくまて宣言できるようになっただけでデフォルトでJavaに入っ…

関数型インターフェイスが多すぎる理由を調べてみた

Java8について調べると、標準で用意されている関数型インターフェイス関数の多さにびっくりする。 Supplier、Consumer、Predicate、Function、UnaryOperator、BinaryOperator、etc.. 全部で40以上はある。正直はじめはこれ全部覚えるのかと、かなり憂鬱だっ…

Java8のOptionalの使い所

そもそもOptionalとは OptionalはT型のオブジェクトに対するラッパーで、オブジェクトがnullかどうかを判断したり、nullだった場合のデフォルト値を設定できるJava8から追加されたクラス。 Nullオブジェクトに近い感じでしょうか。 どういったところで使うの…

Java8の文字列結合

Java8から文字列の結合方法がいくつか追加されたので、簡単にまとめました。 StringJoiner Java8から新しく追加されたクラスjava.util.StringJoiner。 区切り文字、サフィックス、プレフィックスを埋めて文字列を連結できるので 便利ライブラリGuavaのJoiner…

JettyでcookieにSecure属性、HttpOnly属性の設定方法

JettyでJSESSIONIDとかの cookieにSecure属性、HttpOnly属性の設定をする日本語の情報を見かけなかったので、設定方法をまとめてみました。 対象はJetty9.X。 webdefault.xmlで設定する方法 $(jetty.home)/etc/webdefault.xmlにある設定ファイルを修正 <session-config> <session-timeout>30</session-timeout> <cookie-config> <secure></secure></cookie-config></session-config>…

最近おもしろかった本を5冊選んでみた

最近ブクログを更新したついでに、ここ最近読んだ中で個人的に面白かった本を選んでみました。 インフラの教科書 インフラエンジニアの教科書作者: 佐野裕出版社/メーカー: シーアンドアール研究所発売日: 2013/10/26メディア: 単行本(ソフトカバー)この商…

iOSでオレオレ証明書を許可する

WebViewとかで普通に https://www.google.co.jp/にリクエストを投げると問題なくページは表示されるのに、自分とこのサーバにhttpsでアクセスしたとたんに何も表示されず、コンソールログに下記のようなエラーが表示されました。 NSURLConnection/CFURLConne…

xcodebuildで32bit、64bitのライブラリをビルドするスクリプト

xcodebuildを使って32bitと64bitの静的ライブラリをビルドする簡単なスクリプトを作りました。最終的な成果物としては、指定した出力先に、ビルドしてlipoでくっつけた32bitと64bitの静的ライブラリが配布される感じです。 #!/bin/sh #---------------------…

アプリ起動時のUIApplication#openURLの動作

Xcode5でビルドしたアプリをiOS7の端末で起動させると初回起動になぜかUIApplication#openURLが正常にブラウザを起動してくれない現象が発生。 正確にはアプリが起動して10秒ぐらい何も表示されない状態が続く。ちなみにiOS6、Xcode4だと問題なし。 今のとこ…

退職しました

私事ですが、7月末日をもって約4年半お世話になったレッドフォックス株式会社を退職しました。 とはいえ、最終出社日が7月12日だったので7月のほとんどは毎日読みたかった本を読んだり、今まで見たかった映画とかアニメを見たりしていた、引きこもりのニート…

Eclipse 4.3 Kepler

Eclipse 4.3 Kepler が昨日リリースされたみたいなのでさっそく入れてみました。 ダウンロード ダウロード先はこちら(Eclipse Downloads) ちなみに日本語版のAll in One はこっち(Eclipse 日本語化 | MergeDoc Project) Eclipseの細かい設定はこちらの記事に…

ランダム文字列生成

先日CodeIQでランダムパスワードを生成するプログラムの問題(挑戦者求む!【ウチに来ない?】[Java]ランダムパスワードの作成 by CodeIQ運営事務局 アプリケーションエンジニアを募集する企業│CodeIQ) で解答した際に使ったランダム文字列生成のメモです。そ…

TOEIC 900点取りました。

先月のTOEICで900点取ることが出来たので、僕なりにやってきたことを少し紹介します。 Listing podcast 定番と言えば定番だけど、一番ながら勉強が出来るだけあってかなりの時間節約になりました。 Business English Pod (iTunes - Podcast - www.BusinessEn…

JUnitとNoSuchMethodError

java.lang.NoSuchMethodError: org.mule.util.CollectionUtils.isNotEmpty(Ljava/util/Collection;)Z JUnitでテスト中に上記エラーが出た場合の対処法(mavenを使用している場合)。 ローカルのmavenリポジトリデフォルはこんな感じの所に置いてある。 C:\User…

僕と村上春樹

新刊のニュースのこともあってか、なんとなく村上春樹に関して思うことを、落書き程度に残してみたい。そもそも、僕が彼の作品を始めて手に取って読んだのは大学入って1,2年経った頃だったと思う。 その頃の僕は、基本的に音楽しか興味がなかった時期で、 授…

throwsするべきかtry/catchするべきか

JUnitで例外が発生する場合のテストを書くとき、throwsするべきかtry/catchするべきかを 悩んでいる場合、特別な理由が無い限りはthrowsにするべきという指摘を頂いた。じゃ、なんでtry/catchではなくthrowsのがいいか。1.コードが綺麗になる。 2.エラー…

commit、revision戻し、mergeのメモ

svn

コンソール上でもsvnのコマンドがすぐ叩ける用にメモ。以前のリビジョンに戻す方法。 例としてリビジョン300を100に戻したい場合。 svn merge -r 300:100 https://sample.co.jp/branch/xxx/yyy trunkの内容をbrunchにmergeする確認。 例として、trunkのリビ…

Log4jのエラーハンドリング

log4jってファイルIO系のエラーが発生したときは内部でエラーハンドリングしてまうため、 書き込みが失敗した場合とかはそのことを呼び出し側に知らせてくれない。 ということを最近知りました。。。これはlog4jの思想というか考え方らしく、log4jを使ってい…

リードオンリー・インタフェース

セキュスペの勉強がてらにIPAのサイトを見ていたら、リードオンリーインタフェース という考え方があって、なるほどーって思ったりしたので、その内容を少し。「カプセル化のすすめ」と題したその内容は簡単に言うとは普段getterとsetter を書いているクラス…

twitter4j

若干今更感はあるけど、twitter4jを触る機会があったので、とりあえず、以下の3機能を簡単に実装してみた。・OAuth認可をつかってツイートする。 ・指定したユーザのタイムラインを取得する。 ・ツイートの検索をする。■準備 1.なにはともあれ、まずはtwi…

シングルトンの変数

シングルトンの生成の方法はよく議論されるところなんだけど、 それとは別にシングルトンクラスの変数の初期化に関して少し予想外の挙動が起きたので、 メモしておきたいと思う。 public class Sample { public static void main(String args[]) { Single.ge…

Ruby技術者認定試験Goldの受験感想

Ruby技術者認定試験Goldに合格したので、今後受験する予定の人がいれば参考にしてみてください。勉強期間:1日2時間 * 週4,5 の1ヶ月半 Ruby経験:0 参考書: Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)作者: 増井雄一郎,小…

環境による改行コード

Junitでテストを書いていたら、どうしても文字列が一致しないのケースがあって少し調べて見たら、どうやら改行コードの指定の仕方に問題があったみたい。テストケースは以下のような感じ。 @Test public void test() { // ファイルとかから文字列を取得 Stri…

インスタンス変数・クラス変数・クラスインスタンス変数

インスタンス変数、クラス変数、クラスインスタンス変数。 この3つの変数に関してスコープとか参照方法がいまいちわからなかったので、ちょっと調べてみた。 class Sample #クラス変数 @@var1 = 1 #クラスインスタンス変数 @var2 = 2 def initialize #インス…

ConcurrentHashMapという選択

最近「java.util.HashMap」がスレッドセーフじゃないことを知って それについていろいろ調べてみた。まず、「java.util.HashMap」はスレッドセーフじゃないから、複数スレッドが並行してHashMapにアクセスする場合はハッシュテーブルの破壊とか無限ループ、…

AtomicInteger

JDK1.5からスレッドセーフなクラスが色々と追加されているみたい。 中でも、AtomicInteger とかは便利で使い所が多いかも。 下はスレッドセーフな値を更新するサンプル今までの実装 class Atomic { private int count = 0; public synchronized void add(int…

Rubyでのstaticメソッド

ずっとJavaのstaticメソッドをRubyでどう表現していいかわからなかったけど、調べた感じだとこんな感じになると思う。Java版 class Sample { public static void func() { System.out.print("test"); } } Ruby版 class Sample def self.func print "test" end…

特異メソッドとクラスメソッド

Rubyの中でも特異メソッドは結構苦戦したので、ちょっとまとめて見る。まずは普通のインスタンスメソッドの記述方法。 これは特に問題ない。 class Hoge def func print "test" end end hoge = Hoge.new hoge.func # => "test" 次は特異メソッド。 これは特…

ブロックの使い方

Rubyを勉強していて一番につまずいたのはこのブロックというやつ。 javaをずっとやっていたせいか、どうもこのブロックという概念が掴みにくい。そこで少し調べて見て、以下の内容にまとめてみた。 とりあえずブロックとは? ブロックは二言で言えば「コード…

for文でのIterator

while文でIteratorを使う場合の欠点としてローカル変数(以下の例の場合「it」)の有効範囲が広がるうえに、「it」という変数名が再利用できないといったことがある。 なのでIteratorを使う場合はwhile文じゃなくてfor文の中で使った方がいいよ、っていうこと…

Commons CLI

Jakarta Commons CLI というものが最近あるのを知ったので、少し調べてみた。いちようコマンドラインオプション解析ライブラリということだけど、つまりはシェルスクリプトとかでjavaを呼んだりするときに、optionやらhelpとかを簡単に実装できるライブラリ…

Log4jとLogBack

文字列の生成に処理コストが掛かってしまうため、Log4jを使ってデバッグログを出力する場合は以下のように書くことが多い。 if(log.isDebugEnabled()){ log.debug("User Name:" + user.getName()); } しかし、正直僕はこの書き方にはとても賛成できない。 実…

IllegalArgumentExceptionとIllegalStateExceptionの違い

メソッドの引数が不正だった場合に IllegalArgumentException をthrowするのはよく使っていたりしていたけど、、、 以下のような感じで。 public void regist(String name) { // 引数チェック if (name == null) { throw new IllegalArgumentException("引数…

hamcrest のMatchersとCoreMatchers

JUnit4.4で使用するMatchersとかの一覧がまとまっているブログがあったのでメモ。Matchers http://d.hatena.ne.jp/Naotsugu/20110307/1299510820 CoreMatchers http://d.hatena.ne.jp/Naotsugu/20101018/1287407710

DbUnitとデータ量

DbUnitを使う機会があったので、そのメモ。 ただテスト対象のテーブルのデータが多いせいで元のデータをファイルに一時退避させる処理にすごい時間が掛かってしまい、全然テストができるレベルじゃなかった。 おそらくDbUnitを使うときはデータの少ないテー…

SimpleDateFormatとマルチスレッド

SimpleDateFormatは基本的には以下の様にクラス変数として宣言するものと思っていた。 毎回newするのも微妙だと思って。 private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); public void func () { } ただ、このように実装してしま…

新聞

ここ2年ぐらいは新聞なんてほとんど読んでない。 たまに休日に図書館に行った際に軽く読むぐらいで、いわゆる社会人的な新聞の読み方は全くしていない。 でもだからといって今まで困ったこともないし、特に損したって思ったこともない。 むしろ新聞読む時間…

diffファイル作成

svn

windowsで簡単にsvnのdiffの作成方法をメモ。 対象のディレクトリまたはファイルをコマンドプロンプトで開いて、以下のコマンドを実行。 svn diff -r リビジョン番号(古):リビジョン番号(新) > ファイル名 例)svn diff -r 6550:6731 > C:\diff.txt

ディレクトリ削除

Javaのファイル操作でディレクトリを削除しようと思ったら、中のサブディレクトリとファイルを削除しないと失敗してしまうので、わざわざ以下の様な長い処理を書かないといけない。 ただ、ディレクトリを削除したいだけなのに。。。※一様ファイルの場合でも…

シンプルなモック

Javaのモックフレームワークだと、EasyMock、JMockit、Mockitoとかいろいろあるけど、 なんとなくJMockitが一番シンプルで使いやすい気がする。 上記の中ではあまり有名じゃないせいか、なんとなく情報が少ない気がする。 メモ程度にサンプルコード。 /** * …

ひらがなの検知

全角ひらがなを文字列から削除する方法を探していたところ、以下の方法があることを知って少し驚いた。"abcあいう123".replaceAll("[\\p{InHiragana}]", ""); 結果:abc123ただ調べた感じだと、\p{InHiragana}は単にひらがなの範囲指定を文字列に置き換えて…

Junitの構造化

JUnitでRunWithアノテーションにEnclosed.classを追加するとテストクラスを構造化できると知って、早速試して見たら、確かにこれは便利だ。 何のテストをしているかをクラスごとに区別できるので、テストケースを後から追加したい時や実施の結果をわかりやす…

Junitのパラメータテスト

Enclosed.classとは別にRunWithアノテーションにTheories.classを追加すると複数パラメータのテストでありがちなコピペを減らすことができるみたい。具体的にはパラメータのパターンで使いたい変数に@DataPointを付与し、テストメソッドに@Theoryを付与すれ…