Logic Delight

明日のワシは忘れてしまうから、コードにはコメントを書くのです。

MacOS XのVagrant上にGruntとSASSをインストールした作業ログ

たまにしかやらないので毎回忘れて調べながらやることになってしまうVagrantまわりの環境セットアップを、今度こそ作業ログって覚えるぞ、の巻。

今回は、Vagrant上にGrunt/SASSをインストールするところまでやります。

まずはVagrant用のディレクトリを作成してVagrant(Ubuntu)をテキトーに立ち上げる。

# on Mac OS X

$ mkdir ubuntuGrunt
$ cd $_

$ vagrant init hashicorp/precise32
$ vagrant up
$ vagrant ssh

無事に仮想ホストにssh接続できることが確認できたが、これだけでは素のUbuntuなので、プロビジョニングで諸々ツールがインストール済みの状態にして仮想ホストが立ち上がるようにする。

$ exit
$ vi provisioning.sh
#!/usr/bin/env bash

echo "*** install by apt-get ***"

apt-get update
apt-get install -y curl
curl -sL https://deb.nodesource.com/setup | bash -
apt-get install -y nodejs

echo "*** install by ruby-gem ***"

gem update --system
gem install sass

echo "*** install by npm ***"

npm config set registry http://registry.npmjs.org/

npm install -g grunt-cli
$ vi Vagrantfile
Vagrant.configure(2) do |config|
  # :
  # :

  config.vm.provision :shell, path: "provisioning.sh"
end
$ vagrant reload --provision
$ vagrant ssh

# on Vagrant(ubuntu)

$ node -v
$ npm -v
$ scss -v

インストールされたバージョンが確認できれば、最後にGruntをインストールして作業終了☆

$ mkdir mysite
$ cd $_
$ npm init
$ npm install grunt --save-dev

ですが実際は動作確認で何度もハマってやり直したので、その点をメモっておくと

  • apt-get insatll で -y オプションを忘れると、Y/N ? の問いに応えられずにプロビジョニングが失敗して終わる
  • 何もせずに apt-get install nodejs をしても、インストールされるNode.jsのバージョンが古いので、後に控えている npm install 系がことごとく(バージョンが対応していないよ)エラーで失敗する
    • curl -sL ... の行を追加することで新しいバージョンのNode.jsがインストールされるように
  • 何もせずに npm install -g grunt-cli してもregistry見つからないエラーになる
    • npm config set registry ... の行を追加して解消
  • 初回の vagrant up 時に初回のプロビジョニングが走ってしまうので、プロビジョン設定を追記した後は reload --provision する必要がある

簡潔にメッセージが伝わる便利アノテーションが素敵

Javadocに「このクラスはスレッドセーフではありません。」とか書いてあるのを見ていて、最近gs-collectionsを眺めて便利だなと思ったアノテーションをつければいいんだ、と思った。

具体的には、↓ここらへんのアノテーションをつけておけばスマートに伝えられるよなー、と。

  • javax.annotation.concurrent.NotThreadSafe
  • javax.annotation.concurrent.ThreadSafe
@NotThreadSafe
public class SampleFormatter {

同様に、Google Guavaで提供される次のアノテーションも、いいところをついている感じ。

  • com.google.common.annotations.VisibleForTesting
@VisibleForTesting
void setInnerValue(String value) {
    this.value = value;
}

・・・あぁ、その気持わかる。この package private や protected は、人様に使われるためじゃなく、単にテストの利便性目的なだけなんだよ、ってね。。。

皆様、悩み考えていることは似たり寄ったりなんだなと痛感。

IntelliJ IDEAをMacで使おうとしたらJava6がないから起動できませんて

職場ではEclipseを長年使っておりますが、最近IntelliJ IDEA派な方にもお会いして色々とかじってみるのはいいよなーと思い、まずはCommunityEditionをお試ししようと思いました。したらDownloadして起動しようとしたら「Java6がないので起動できないよ」的な内容のエラーが出てシューン・・・。ちなみにJava8はインストール済みで、それで動かすつもりでした。

結果的には↓のサイトをググって見つけたので対処出来ましたが、厳密にワシが使ってるバージョンと違っていたり、なぜかJava8使おうってのにJava7を一旦イントールする的なことも書いてあってハテナ?なので自分用にやったことをログっておく。

MacのJava8環境でIntellij IDEA 13.1.1が起動しない — Strawberry Field
http://blog.yotchang4s.org/2014/04/13/mac_java8_intellij_idea_13_1_1

Info.plist の編集
vi "/Applications/IntelliJ IDEA 14 CE.app/Contents/Info.plist"

編集内容はこんな感じで。

  <key>JVMVersion</key>
- <string>1.6*</string>
+ <string>1.8*</string>

これで普通に起動出来ました。

Gitまわり久しぶりに触ってハマったログ

  • 久しぶりにGitHubに新しいリポジトリを追加してclone、ファイルを追加してcommit -> push したらエラーになってpushできない。
  • 試しにBitBucketで仮リポジトリを作って、リモートに追加して同内容をpushしたら、こっちはすんなりできた。
  • エラーの内容("git-credential-sourcetree" Error)でググってみたら、こんなのが出てきた。
    • 「それは git/HTTPS 1.9.3の問題で、1.9.3.1では解消されてるよ」という一文が目についた。
    • terminal で git --version してみたら、確かに git version 1.9.3 (Apple Git-50) と出てドンピシャなり。
  • ココらへんを参考にGitのバージョンアップをしてみる。
    • この中にある手順で、ふと /usr/local/bin を ls -l した時に、GitHub.app (GitHub App for Mac)の残骸symlinkの存在に驚愕する。味見の副作用がこんなところに・・・。
  • こんなものが、それなりにGoogleさん的に有名になっていたので内容確認の上でshellファイルに落として実行してGitHub.app関連のキレイキレイを完了。こんなモノが出まわるほどに困ったちゃんなヤツだったんですな。やれやれ
  • で、git --version が git version 2.2.1 となった上で、再度GitHubにpushしてみるも、まだエラー
  • よくよく見てみると、origin のURLが ssh ではなく、https になっている。
    • ちなみに、BitBucketのURLは ssh だった。
    • origin(GitHub)のURLをsshのモノに変えてみたら、すんなりpushできた。そこか
  • Connecting over HTTPS の方が今では recommended らしいので、今度やってみよっと。

https://help.github.com/articles/caching-your-github-password-in-git/

SMS/MMSへ送られてきた怪しげメッセージをログっておく

何なんだろう、鬱陶しい。調べたらfb.comってのはアメリカIPだったな。

  • from 01012460209758522
    • 2014/10/13 9:14
      • (Facebookの友人)さんが近況アップデートを投稿しました。「このページの存在にしばらく気づいてなかった。...」 続きはh t t p s://〓
    • 2014/10/13 9:16
      • 繇戀⸀挀漀洀⼀氀⼀㄀䘀氀㜀㐀氀氀㜀欀㈀欀㐀氀㌀䰰朰Ȁ〓
  • from 01012461413927515
    • 2014/10/19 9:22
      • (Facebookの友人)さんが写真を追加しました。[h t t p s://fb.com/l/(ハッシュ文字列)]でチェックしましょう

今さらながら、WebサイトのAutoPagingをやってみた

過去に作った個人用ホームページを再利用し、AutoPaging用jQueryプラグインを使ってスルスルページングを実装してみた。利用したプラグインはjScroll。

pklauzinski/jscroll

jScroll - a jQuery Plugin for Infinite Scrolling / Lazy Loading

ハマったポイント

ページ最後のaタグが問答無用で次頁に置き換わる

nextSelector オプションがデフォルトだと 'a:last' だったので当然の挙動。最後のaタグが次ページへのリンクじゃなかったのと、次ページを示すリンクは最後のページには存在しなかったりするので、次のページへリンクのaタグに class="next" を追加して、jscroll()のパラメータを nextSelector: 'a.next' とすることで解決。

自動で次ページを読み込め読み込むほど挙動が怪しく

何ページ目を最初に表示してもAutoPagingされるようにするために、各ページのHTMLにjScrollの起動スクリプトを埋め込んだが、次ページを読み込んだ際 contentSelector がデフォルトの "" だとHTMLタグの配下すべてがDOMに追加されてしまうようなので、次々に読み込んだページのjscrollスクリプトが発動していた模様。コンテンツ部分を括っていたdivに class="content" を追加して、 jscroll()のパラメータを contentSelector: '#content' とすることで解消。

雑感

いやー、それにしても大昔に自分で書いたHTMLは汚かった。リファクタしても自己満足の誰得なので、手を入れた箇所しか改善しませんでした。たとえ便利なライブラリでも、オプションのデフォルトのままでは想定した動作にならなかったりするので要注意、という当たり前の感じで、久しぶりに軽く手と頭を動かしましたとさ。

MacのJava8開発環境を構築

あとは、今日やったことを記録しておく。

  • Java6をアンインストール

(参考)
Apple版Java6をすっきりアンインストールする

*1:Jdk8u20

*2:eclipse-java-luna-SR1-macosx-cocoa-x86_64.tar.gz