EmacsでJazz

d.hatena.ne.jp

EmacsでJazzが聴けるという素敵なelispがあったので、 Macで導入した手順をメモする。

このelispを導入する条件は以下のとおり

Emacsのバージョンは24.5だったので、クリアしている。

$ type mplayer
-bash: type: mplayer: not found
$ type curl
curl is /usr/bin/curl

mplayerだけない状態だったので、brewを使ってインストールした。

$ sudo brew update
$ sudo brew install mplayer

少し、インストールに時間はかかるが、これで下準備は完了。

~/.emacs.d/init.elに以下を追加した上で、 init.elを読み込んだ。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; jazzradio
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(el-get-bundle syohex/emacs-jazzradio)
(require 'jazzradio)

パッケージ管理にはel-getを使っている。

あとは、M-x jazzradioをすればチャンネルを選ぶポップアップが上がるので選択するだけ。

f:id:takahitonara:20150619012249g:plain

集中したいときのBGMをブラウザ経由で音楽を探すと、 ついつい関係ないサイトも見ちゃったりしてしまう。 emacs内ですぐjazzを聴けるこのツールだと、その心配がないので今後も使っていくかも。

Shinjyuku.ex #10に行ってきた

最近、Elixirが気になっていたので、 6/2(火)に新宿で行われていたElixirの勉強会に参加してきた。

自分のレベル的には、 ElixirとPhoenix Frameworkとインストールしてみて、Hello Worldしつつ、 mixの使い方に四苦八苦している程度。

とりあえず、ElixirをElixerと間違わないようにはなった。

勉強会ページ

shinjukuex.connpass.com

発表内容

現時点でのElixir情報収集サイトやブログの紹介をされていた。

海外サイトには公式サイト以外は辿れなかったので、 注目のElixir情報が載っている海外サイトを紹介してもらったのが嬉しい。

日本語のサイトが少ないのは、新しく海外で作られて言語なので仕方ないけど、 だからこそ、Elixirについてこれから何か自分から発信できたらいいなと思う。

GNU gettestという、 プログラムに予め決められた書式で記載されたメッセージを 別ファイルに情報を用いて翻訳してくれるアプリケーションと そのElixirバージョンを紹介されていた。

GNU gettextというものも初めて知ったので、そこから紹介してもらって助かった。

あと、ライブコーディングの代わりに、Youtubeを挟むのはいいなと思った。 自分が社内の発表で簡単なライブコーディングしたときに、 エラーが出てしまって、しばらくライブデバッギングになってしまったので。。。

Elixirを勉強していると時々でてくる用語 OTPに関して、 説明と何が便利かをライブコーディングを交えて説明されていた。

コーディングされていた内容は難しくてわからなかったけど、 いままでぼんやりしていたOTPの内容が、わずかながら輪郭をはっきりさせることができたのがよかった。

RailsPhoenix Frameworkの比較。

書き方的には同じ(ほんとは、Railsの方が洗練されてるかも)だけど、 パフォーマンスは3倍!!らしい。

パフォーマンスは置いておいて、 M,V,Cに分けて、Railsとの記載方法の比較があって面白かった。

もうちょっと、自分がElixirやPhoenix Frameworkを使えるようになったら、 Javaフレームワークとのパフォーマンス比較もしてみたい。

全体感想

当日まで、というか開催の直前まで「補欠」だったから、参加できるかどうかわからなかったけど、 参加できてよかった。

OTPなどのElixir/Erlangの用語などは普段仕事などで触れる機会がないため、 いままでは調べ方もよくわからなかったけど、こういう勉強会で輪郭だけでも理解できたことが増えたのはよかった。

Spring Boot @ComponentScanの使いどころ

@ServiceがInjectionできない

Spring Bootで以下のプログラムがコンパイルできなかった。

Controllerクラス

package com.sample.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.confront_them.bean.ResultBean;
import com.confront_them.bean.ResultRequestBean;

@Controller
public class ResultController {

    @Autowired
    private ResultService resultService;

    @RequestMapping("/results")
    public String results(Model model) {

    ResultRequestBean requestbean = new ResultRequestBean();
    ResultBean bean = new ResultBean();

    resultService.execute(requestbean, bean);

    model.addAttribute("bean", bean);
        return "results
    }


}

Serviceクラス

package com.sample.service;

import org.springframework.stereotype.Service;

import com.confront_them.bean.ResultBean;
import com.confront_them.bean.ResultRequestBean;

@Service
public class ResultService {

    public void execute(ResultRequestBean requestbean, ResultBean bean) {

        bean.setHoge("hoge");
    }

}

エラーは以下の通り。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resultController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.sample.service.ResultService com.sample.controller.ResultController.resultService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.sample.service.ResultService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

対策

AutowiredしているのにScan対象のbeanがないと行っている。

@ComponentScanは記載されたControllerクラスと同じパッケージ配下のクラスしかScanしないらしく、それが原因でServiceクラスがみれていない。

なので以下のようにパッケージ名を変更したら、コンパイルできるようになった。

package com.sample.controller -> package com.sample;
package com.sample.service; -> package com.sample;

Ubuntu Mate 14.04 インストール直後にした設定

システムアップデート

以下をたどって、ソフトウェアを最新にします。

システム > システム管理 > ソフトウェアの更新

日本語化

以下のコマンドを実行します。

$ sudo apt install fcitx-mozc
$ im-config -n fcitx

※ 参考 日本語化 - Ubuntu となかまたち

ディレクトリ日本語化

アプリケーション > システムツール > Mate端末 でターミナルを立ち上げる。

以下を入力します。

$ LANG=C xdg-user-dirs-gtk-update

ウィンドウが立ち上がるので、「Update Names」を押します。

f:id:takahitonara:20150523114024p:plain

注意点としては、名前が変更されるディレクトリないにファイルがあると日本語ディレクトリが残ってしまいます。

Oracle Java インストール

以下を実行します。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-jdk7-installer

以下のバージョン確認でインストールされていることを確認します。

$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

Linux Mintのインストールとその後の設定

Linux Mint 17.1をインストールした。

linuxmint-jp.net

Cinnamon版をインストールした。

手順は以下の通り

  1. MacOSX上でUnetbootinを利用して、LiveUSBを作成する。
  2. 起動時にUSBから見に行くように、BIOSを設定する。
  3. インストールするPCにUSBをさす。
  4. 起動して、USB上でLinux Mintを走らせた後、デスクトップ上にあるInstall Linux Mintをダブルクリックする。
  5. 表示に従って、設定していく。

インストール後は以下を設定した。

Synapticパッケージマネージャの設定

  1. 設定 > 設定を選択する。
  2. 全般タブ > 指定の変更 > 「依存関係で推奨されたパッケージを考慮する」にチェックをする。
  3. OKをクリックする。

ソフトウェアソースを変更

  1. メニュー > システム管理 > ソフトウェアソースを選択する。
  2. ミラーのMainとBaseを好きな取り込み先を選択する。(日本の取り込み先はBaseしかなかったので、Mainは元のアメリカのまま)
  3. 「キャッシュをアップデート」をクリックする。

ソフトウェアアップデート

  1. メニュー > システム管理 > アップデートマネージャを選択する。
  2. 更新をクリックする。
  3. アップデートをインストールをクリックする。

日本語入力設定

  1. Synapticパッケージマネージャを起動する。
  2. 検索をクリックして、fcitx-mozcを検索する。
  3. fcitx-mozcにチェックして、適用をクリックする。
  4. メニュー > 設定 > Languageを選択する。
  5. Input methodでFctixを選択する。

※ 参考 http://viva-ubuntu.com/2014/12/systemupdate/ (ほぼ、ここに書いてあることを実行した。)

play2.3のインストール(brew)&起動確認

brewでplay2.3をインストールする。

sudo brew install typesafe-activator

インストールできていたら、以下のコマンドでヘルプが確認できる。

 activator -help

次に、起動させてみる。

"activator new"でアプリケーションを作成する。

activator new my-first-app play-scala

アプリケーションのディレクトリで、"activator run"を実行する。

cd my-first-app
activator run

デフォルトのポート9000でlocalhostに接続する。 以下の画面がでてきたら、成功。

f:id:takahitonara:20150313020503p:plain

gitのbranch名を変更する

ローカル、リモートともにgitのbranch名を変更したい。

ローカルのbranch名を変更

しかし、このままpushすると新しい名前のremoteブランチは作成されるが、古い名前のremoteブランチも残ってしまう。
なので、以下のコマンドも実行する必要がある。

リモートbranchを削除

参考