秀作としてこんなのを上げておく
回文かどうかを判定する関数を実装して、いろいろ速度計測してみた
回文かどうかを判定する関数を書きたくなりまして、goで実装してみました。
回文 - Wikipedia
さくっとかけてしまったのでなんパターンか書いてみて一番早い書き方を探ってみました。
近頃仕事でJVM言語を書く機会が多いので、久々に違う言語でかくと楽しいもんですよねー
実装案
以下の4実装で比較してみました
- reverseして元の文字列と比較
- 文字列を最初/最後 => 2番目/後ろから2番目 => ...で比較
- ↑をutf8モジュールを使って実装
- ↑をutf8モジュール+rangeで回す実装
結果
というわけでutf8モジュール+rangeで回す実装が一番早いみたいです。
もっと良い実装を思いついた方がいましたら、ぜひ教えてください。
ArchLinuxでJava環境を整える
近頃プライベートではMac OS X or Ubuntu で開発することが多いのですが、
たまには気分転換に家の開発環境をArchLinux に変更してみました。
JDKとかを手で入れるしかないのかなーと思ってたら、 @mopemope さんに
pacmanでいれられるコトを聴いたので早速設定してみました
ArchLinuxでのJava の管理法
こちらを参考にする。
Java (日本語) - ArchWiki
java-runtime-common と java-environment-common をインストールすることで使えるようになる
archlinux-java コマンドを使うことで切り替え可能。
ちなみに僕はOpenJDKは仕事ではまったことがあるので使わないことにしてます。
Oracle JDKのインストール
こちらを入れる。
AURについてはこちらを参照する。
Arch User Repository (日本語) - ArchWiki
Oracle JDK をインストールすると、上記のarchlinux-java がPATHの設定をうまいことやってくれます。どうやらJAVA_HOMEはforce setting しない様子。
ここまで来るとIDEとかも動くはず。
JVM言語いれたり、プロジェクト管理ツールいれたり
maven , gradle, scala, sbt,clojure, leiningenとかをあとは入れていけばいいだけ
現状、 gradle, leiningen はAURから取得する必要があるけど、ほかはpacman でインストール可能。
まとめ
homebrewのほうが便利だと思ってたけど、Archはここらへんよく出来てました。
2014振り返り
2014も終わることだし今のうちに振り返りを
アウトプットが減った
会社で話して満足しちゃうからかも。あとはTips的なことは書きたくないみたいな気持ちだったからだと思う。来年は心機一転いろいろ書いていくつもりです。
でも結構外で話した。
今年だと、PyConSG(LT), PyConJP, Akka meetup(LT)で話しました。
あとPy婚JP2014ですねー。
Py婚 JP 2014 (PyKon JP 2014) - connpass
PyCon Singapore 2014 - pycon.sg
CH04 Pythonの実装系総ざらい (ja) - YouTube
JVM言語でたくさんかいた
実はJVM言語って2年くらい書いてないってことは皆さんご存知ないはず。
Scalaを仕事で使ってるんですが、Javaの標準ライブラリとかお作法をしっとく必要が
あるってのがよくわかったので今年はいろいろやりました。
ちなみにClojureがかなり良く出来てるってのがよくわかりましたね
仕事でも使えるようにするかな。
あと正直JVMばかり書くのもなんなので、来年は他のをやりたいな。OCamlとかやりたい。
体力作り
ingressで歩いたり、ボルダリングを頑張って体力作りをしました。
後半仕事が忙しくて、手がつかなかったのが悔やまれる
本を読む(技術書、物語とわず)
月一で本を読むようにしてます。ちなみに今年のヒットはこれですね。
- 作者: 森見登美彦
- 出版社/メーカー: KADOKAWA / 角川書店
- 発売日: 2012/09/01
- メディア: Kindle版
- この商品を含むブログを見る
役にたつライブラリを書く(いつもは役に立たないものしかOSSでは公開しないし)
Web系の仕事ではないので、あんまり万人受けするものはないんだけど、
今年はこんなライブラリを公開した
masahitojp/java-bloomfilter · GitHub
あんまりみんな使うもんじゃないけど、僕の仕事では何回も使うので書いて公開しました。
これについてはまた別のエントリーで話します。
ちなみに、Java8の習作です。そして同じようなものはたくさんあるんですが、残念ながら速くない....
まー
今年は頑張った気がする。来年は久々に勉強会を開いたりしたいなー。
XCode5.1環境でansibleをいれる
Java6or7でラウンドロビン
ラウンドロビン的なものが欲しくなったので書いてみた。
一応スレッドセーフにはしてるつもりなんだけど、これでいけるのかは実際に動かしてみないと、わからないです。
Java8の無限ストリーム使うとどうなるかはまだ考え中。
code
package me.masahito; import java.util.Iterator; import java.util.List; public class RoundRobin<T> implements Iterable<T> { private final List<T> list; private final int listSize; private RoundRobin(final Builder<T> builder) { this.list = builder.list; this.listSize = builder.list.size(); } @Override public final Iterator<T> iterator() { return new Iterator<T>() { private int index = 0; private final Object lock = new Object(); public T next() { final T result; synchronized (lock) { result = list.get(index); index = (index + 1) % listSize; } return result; } public boolean hasNext() { return true; } public void remove() { throw new UnsupportedOperationException(); } }; } public static class Builder<T> { private final List<T> list; public Builder(final List<T> list) { this.list = list; } public final Iterator<T> build() { return new RoundRobin<>(this).iterator(); } } }
unittest
package me.masahito; import org.junit.Test; import java.util.Arrays; import java.util.Iterator; import java.util.List; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; /** * RoundRobin Test */ public class RoundRobinTest { @Test public void buildRoundRobinIterator() throws Exception { final List<Integer> list = Arrays.asList(1, 2, 3); final Iterator<Integer> ite = new RoundRobin.Builder<>(list).build(); assertThat(ite.next(), is(equalTo(1))); assertThat(ite.next(), is(equalTo(2))); assertThat(ite.next(), is(equalTo(3))); assertThat(ite.next(), is(equalTo(1))); } }
reStructuredText を Marked.app でプレビュー表示するメモ in 2014
どうもこんにちは、近頃めっきりブログを書かなくなった @masahito です。
いかがお過ごしでしょうか?
超久々にいいソフトを教えていただいたので、
下を参考に環境を作ったので残しておきます。
http://d.hatena.ne.jp/CortYuming/20130531/p1
Marked2
Markedは近頃Marked2にアップデートされたそうです。
Marked1はApp Storeで配布されていましたが、Marked2は http://paddle.com/ でRegisterするようになったみたいです。
docutils
easy_install でdocutilsを入れてやればOKです。
sudo easy_install docutils
まとめ
今までブラウザでrestructuredTextをHTML化したものを見ていたんですが、
Marked2だと更新されたところに移動してくれます。
超便利なのでみんな使うといいよ。
身長が伸びて、壁が上達....するわけではありませんが(^o^)