2014年9月27日土曜日

Bloggerでコードを折り返させないで表示する

以前Bloggerでコードを見栄えよく表示する方法を投稿したのですが折り返しがあると
見づらいと感じたことが何度かありました。
今回は折り返ししないで、枠内に収まらなければ横スクロールできるデザインにしたいと思います。

1. レイアウトの「ガジェットを追加」から「HTML/JavaScript」を選択します。
2. 「HTML/JavaScript」編集画面の「コンテンツ」に次のコードを埋め込んで保存します。
<!-- Google Code Prettify -->
<script src='https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js'></script>
3. テンプレートの「カスタマイズ」で「上級者向け」を選択します。
4. 「CSSを追加」を選択して次のコードを埋め込んで「ブログに適用」します。
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{ list-style-type: decimal !important }

pre.prettyprint{
  overflow-x: auto;
  word-wrap: normal;
  font-family: 'Lucida Console';
}

ol.linenums{
  display: table;
  width: 93%;
}
5. ヘッダーの「Blogger に戻る」で戻ります。

widthを指定しないとコード行の背景色が欠けてしまうので設定しています。
widthは横スクロールの有無に関らず背景色が大きく欠けない程度に93%;を設定しています。
calc(100%-OOpx)と指定することで%指定でも任意の横幅を設定できるはずなのですが
認識せず思ったとおりに反映されなかったのでwidth: 93%;にしています。

IE11、Firefox、Chromeで確認したところ背景色も欠けずに表示されました。

2014年9月23日火曜日

CentOS6 に Pandoc を yum でセットアップする

CentOS6にPandocをセットアップしてみました。

Pandocのインストール方法にCentOSが無かったのですがEPELにパッケージがありました。

とりあえずPandocを試してみたかったので今回はこのパッケージを利用しました。

Pandocのインストール
# EPELリポジトリを取得
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# EPELリポジトリをインストール
rpm -ivh epel-release-6-8.noarch.rpm
# Pandocパッケージがあることを確認
yum info pandoc
# Pandocパッケージをインストール
yum install pandoc
PandocでMarkdownファイルをHTMLファイルに変換
# Markdownファイルを作成
vi input.md
# MarkdownファイルをHTMLファイルに変換
pandoc input.md -o input.html
input.mdの内容
# test

## テスト
input.htmlの内容
<h1 id="test">test</h1>
<h2 id="テスト">テスト</h2>
入力ファイルの文字コードはutf-8で作成しましたが、日本語も表示されていました。
今回インストールしたPandocは約2年前のバージョン(リリースページ)になるので利用するときは
だいぶ前のバージョンということを考慮しといたほうが良いかもしれないです。

Pandocパッケージ情報
Name        : pandoc
Arch        : x86_64
Version     : 1.9.4.1
Release     : 1.1.el6
Size        : 1.1 M
Repo        : epel
Summary     : Markup conversion tool for markdown
URL         : http://hackage.haskell.org/package/pandoc
License     : GPLv2+
Description : Pandoc is a Haskell library for converting from one markup format to another,
            : and a command-line tool that uses this library. It can read markdown and
            : (subsets of) reStructuredText, HTML, and LaTeX, and it can write markdown,
            : reStructuredText, HTML, LaTeX, ConTeXt, Docbook, OpenDocument, ODT, RTF,
            : MediaWiki, groff man pages, EPUB, and S5 and Slidy HTML slide shows.

VirtualBox 4.3.16 で has terminated unexpectedly during startup が発生したときにしたこと

VirtualBox 4.3.16 で仮想マシンが開けなくなるエラーが発生しました。
The virtual machine 'xxxxx' has terminated unexpectedly during startup with exit code 1 (0x1).

終了コード : E_FAIL (0x80004005)
コンポーネント: Machine
インターフェース: IMachine {480cf695-2d8d-4256-9c7c-cce4184fa048}
思い当たるのはVirtualBoxを4.3.12→4.3.16にアップデート中にプロセスが残っているにも
かかわらず無視(ignore)してアップデートしたことです。

次の手順で今のところ仮想マシンは起動できるようになったので残しておこうと思います。

1. VirtualBox 4.3.12をダウンロードページから再インストール
2. PCを再起動
3. インストールしたディレクトリの「\drivers\vboxdrv」フォルダにある「VBoxDrv.inf」ファイルを
右クリックで「インストール」を選択してインストール

これは 4.3.12 再インストール後に仮想マシンを起動すると"Cannot access the kernel driver"と
表示されたので、この症状に対応するためです。

Cannot access the kernel driver!
VirtualBox Runtime Error

4. PCを再起動
再起動せずに仮想マシンを起動すると"Cannot access the kernel driver"が出たので。

"Cannot access the kernel driver"には次のサイトも参考にさせていただきました。
http://kitaz.dip.jp/default/modules/xpress/archives/643
http://qiita.com/komiya_atsushi/items/b92d1ab844b37a78ac1c
https://forums.virtualbox.org/viewtopic.php?f=6&t=46845

問題なく動作しているPCはアップデートでプロセス云々聞かれずに終了できたので、今後は
アップデート中に問題が発生した場合は綺麗な状態にしてからアップデートしたいと思います。

2014年9月20日土曜日

Android Developer の OS別のシェアのページが見つけづらい

Android DeveloperにあるAndroidのOS別のシェアのページがすぐに見つけられなかったので。



Android DeveloperのトップページからヘッダーのDevelopersをクリック。


ヘッダーにあるメニューが表示されるのでAboutをクリック。


Dashboardsをクリックで目的のOS別のシェアのページにたどり着けました。


最近のAndroidの動作確認端末はどれが良いのか

数年前にAndroidのネイティブアプリを開発を担当していたのですが動作確認の際に
端末の選定で何も知識が無く困ることがありました。

後で知ったのですが、端末を選定するポイントがあるみたいですね。
Androidにおけるテストに関して デバイスをどう選択するか 2012を見たときに凄く参考に
なりました。ありがたかったです。

メーカー + OS + チップセットの組み合わせが選定のポイントと、このとき知りました。
このようなポイントを踏まえてみると3項目でどれも種類が多いのが分かりました。orz

最近の端末を調べてみました。
今回もAndroidにおけるテストに関して 端末をどう選ぶか 201404を参考にさせていただきました。

Xperia、AQUOS Phone、ARROWS、Galaxy、Nexusの5種類は抑えておくと良いかもしれないです。
チップセットはQualcommのSnapdragonがシェアをとっているようです。
AndroidのOS別のシェアは4.0.3(API Level15)以上が全体の約85%を占めています。
WikipediaのAndroid端末一覧を見ると国内で初期に4.3がインストールされている端末は数が
少ないので、場合によっては動作確認端末での優先度は低くなると思いました。

2013年のキャリア別の端末別のランキングを見るとXperia、Galaxy、AQUOS Phoneが高いので
2013年の端末を動作確認に含める場合は考慮しようと思います。

Xperiaはdocomoとauで発売されて人気機種、AQUOS Phoneはどのキャリアでも発売されて
いるので、外せないと思います。
Galaxyも昔から人気機種ですね。
ARROWSは昔は不評だったようですが、最近の端末は評判が良いようですので選定の際には
チェックしといたほうが良さそうです。
昔はノーマークだったNexusはNexus5がSIMフリーやキャリアどちらでも取り扱われているので
どのくらいシェアがあるのか分かりませんがNexusはこれからアプリを開発する際には考慮
しといたほうが良さそうです。

2014年9月19日金曜日

Golang環境を構築するときに気付いたこと

Go言語を触ってみたかったので、環境を構築しようとGetting Startedダウンロードページ
参考にしました。

最近知ったHTMLをコマンドラインからパースするpupとかコマンドラインを便利にできるpeco
触りたかったので go get で取得しようとしたところ $GOPATH が設定されていないので
取得できないとエラーが。

$GOPATH の設定は環境を構築する上で必要らしく重要な環境変数らしいです。
go get のときにエラーが出たので当たり前ですよね。

今度は $GOPATH に設定する値は何が無難なのか分からなかったので調べることに。
GOPATHとワーキングディレクトリを見ると作業ディレクトリのような扱いに感じたので
ホームディレクトリ直下にフォルダを作成。
# GOPATHのパスはGoのバージョンごとに分けたほうが良いと知り .go だけよりも
# バージョンがあると後で融通が効くと思ったので下の設定になりました。
# %USERPROFILE%\.go\{Goのバージョン}
SET GOPATH=%USERPROFILE%\.go\1.3
仕切りなおして再度 go get を実行するとコンソール上に hg の表示が。
調べてみたところ Google が公開しているライブラリは Mercurial を通して公開されているとのこと。

必要なので Mercurial もダウンロードページからインストーラをダウンロードしてインストール。
今回は Mercurial だけ欲しかったので一覧から次の項目のインストーラを利用しました。
Mercurial 3.1.1 MSI installer - x64 Windows - requires admin rights

Mercurial のダウンロードページに Inno Setup installer というはじめてみる名前が。
これも調べてみると OSS のインストーラとのことでした。
特に理由は無いですが、MSI installer を選びました。

go get で無事にpupもpecoも取得できコマンドラインから実行できることを確認しました。
# go get で取得したパッケージは %GOPATH%\bin にバイナリができるので
# PATHに下のパスを追加することで利用できるようになります。
%GOPATH%\bin
Go言語を触りたいから Mercurialを知る→インストーラのInno Setup installerを知る
環境変数の管理の方法が増えた

ただ単にGo言語を触りたいだけだったのに、調べてブログに書き起こしてみると他にも
新たなことを発見・気付くことができました。

形にすることで残るし、些細なことにも気付けるきっかけになるのだなぁと再認識しました。

ちなみにpuppecoはバイナリが公開されているのでGo環境を構築しなくてもダウンロードして
PATHを通せば利用できるようになります。

2014年9月18日木曜日

Jenkins でリモートサーバーのコマンドを実行できる SSH pluginを使ってみた

毎朝Linuxサーバーの電源を入れては起動後に必要なスクリプトを実行していたのですが
たまに忘れたりして他の人に迷惑をかけていました。

このような作業は自動でやりたいと思っていたのでJenkinsで出来ないか調査したところ
リモートサーバーのコマンドを実行できるSSH pluginというのがありました。

インストールから設定方法
  1. プラグインの管理の「利用可能」からsshで検索してSSH pluginをインストールします。
  2.  システムの設定で「SSHリモートホスト」でSSHサイトの「追加」ボタンを押すと下のキャプチャの設定項目が表示されます。
  3. ユーザー名とパスワードで接続できる場合はホスト名、ユーザ名、パスワード/パスフレーズでパスワードを入力します。

SSH plugin 設定画面
SSH plugin 設定画面
公開鍵で接続を行っている場合
キーファイルに秘密鍵のファイルパスを入力して、パスワード/パスフレーズで秘密鍵の
パスワードを入力することで接続できるようになります。
秘密鍵をPuTTY形式で作成している場合はOpenSSH形式に変換する必要があります。

OpenSSH形式ではなかったために見事に接続に失敗してしまいました。

使い方
  1. ビルドの設定画面で「ビルド手順の追加」から「リモートホストでシェルを実行」を選択。
  2. 下のキャプチャの項目が表示されます。SSHサイトにはシステムの設定で追加したSSHサイトが選択できるので、実行するサイトを選択します。
  3. リモートホストで実行したいコマンドを入力します。
  4. ビルド実行で実際にリモートホストに対してコマンドを実行してくれます。

SSH plugin ビルド設定項目
SSH plugin ビルド設定画面

2014年9月17日水曜日

VirtualBox4.3.12→4.3.16にアップデート

以前VirtualBox4.3.12から4.3.14にアップデートしたときには運が悪かったのか
不具合に遭遇し、仮想マシンを起動できない症状がでました。

そのときの回避策はバージョンを戻すことだったので、対応しましたが
少し前に4.3.16がダウンロードできるようになっていたのでアップデートしてみました。

今のところ問題なく動作しています。
4.3.14のダウンロードはOld Buildsからダウンロードできるようになっていますが
多分利用することは無いと思います。

2014年9月15日月曜日

連休での時間の使い方についてへこむときがある

連休で時間が出来たときに限って「やるべきこと」じゃなくて「やりたいこと」ばかりやっている気がする。
休み明けには、やっとけば良かったと思うことを何度も経験している。
「やるべきこと」ばっかり考えて、続けると心身ともに持たないことも経験している。

中途半端に「やるべきこと」、「やりたいこと」を切り替えても疲れるだけかも。
「やるべきこと」に直接関係無いことでも、その時したことをメモなりブログなり形として
残しておくことで "自分はこれだけやった" とか "あなたにはこれだけできた" と実感できるかもしれない。

凹みながらも自分だけの履歴を見返して、少しばかりの励みにして休み明けの凹み率を
下げることができれば良いかもしれない。





今更ながら、残す方法にはSNSとかEvernoteとかも良いかも。

2014年9月13日土曜日

AndroidのapkファイルをWindowsでリバースエンジニアリングしてみた

Androidのapkファイルをリバースエンジニアリングしたときに手順や利用するツールが
色々とあったので、今回試した内容を残しておこうと思います。

利用したツール

dex2jar
JD-GUI
android-apktool

apkファイルは拡張子はapkですが、実体はzipファイルなので拡張子をzipに変更して解凍できます。
今回知った内容はjarファイルに変換してソースコードを閲覧する方法とresourceフォルダのxmlや
AndroidManifest.xmlを閲覧する方法になります。

jarファイルに変換してソースコードを閲覧する方法

ツールはdex2jarとJD-GUIを利用します。

apkファイルをzipファイルとして解凍するとclasses.dexに閲覧したい.classファイルがあるのですが
このままでは閲覧できないのでdex2jarを利用してjarファイルを生成します。
dex2jarのサイトからdex2jar-0.0.x.x.zipをダウンロードして任意のフォルダに解凍します。

dex2jar Webサイト
dex2jar

解凍したフォルダにあるdex2jar.batをコンソールから実行します。
C:\> C:\dex2jar-0.0.x.x\dex2jar.bat C:\AndroidApp\classes.dex
実行するとclasses.dexファイルがあるフォルダにclasses_dex2jar.jarファイルが作成されます。
このjarファイルをJD-GUIというアプリケーションで閲覧します。
JD-GUIのサイトのDownloadからWindowsのjd-gui-0.x.x.windows.zipをダウンロードして任意の
フォルダに解凍します。

JD-GUI Webサイト
JD-GUI

解凍したフォルダにあるjd-gui.exeを起動し出現するウィンドウにclasses_dex2jar.jarファイルを
ドラッグ&ドロップすることでclasses_dex2jar.jarファイルの中身を閲覧できます。


resourceフォルダのxmlやAndroidManifest.xmlを閲覧する方法

ツールはandroid-apktoolを利用します。

apkファイルをzipファイルとして解凍することでresフォルダやAndroidManifest.xmlファイルが
生成されますが、このままではバイナリ形式で閲覧することは出来ません。
xmlファイルなど本来テキスト形式で閲覧できるようにandroid-apktoolを利用します。

android-apktoolのサイトからapktool-install-windows-r05-ibot.tar.bz2、apktool1.5.2.tar.bz2を
ダウンロードして任意のフォルダに解凍します。

android-apktool Webサイト
android-apktool

インストール方法もありました。
解凍した後は1つのフォルダにaapt.exe、apktool.bat、apktool.jarをまとめます。
apktool.batをコンソールから実行します。
C:\> C:\apktool1.5.2\apktool.bat decode C:\AndroidApp.apk
実行するとapktool.batファイルがあるフォルダにapkファイルをデコードしたフォルダが生成され
xmlファイルなどテキスト形式で閲覧できるようになります。

Jenkinsサーバーのジョブ状態を通知してくれるJenkinsOnDesktopを使ってみた

Jenkinsサーバーのジョブ状態を通知してくれるWindowsアプリケーションJenkinsOnDesktop
利用するときには.NET Framework 4.0 以上とWindows PowerShell 2.0 以上が必要になります。
Windows PowerShellを利用するのは初めてだったので、一緒にWindows PowerShellについても
触ってみました。
JenkinsOnDesktopのセットアップ手順があるのでそれに沿って実行してみただけですが。

PowerShellスクリプト実行を可能にすると書かれているのですが、PowerShellの実行ポリシーが
全体に適用される雰囲気で実行ポリシーについて調べてみるとセキュリティを考慮して
デフォルトではPowerShellスクリプトは実行不可になっているようです。
実行ポリシーの状態は get-executionpolicy で確認できます。
about_Execution_Policies
確認したところ確かにスクリプトが実行できない Restricted でした。
個別にPowerShellスクリプトの実行を制御できないか調べてみましたが、ブロックの解除という
方法はあるみたいですが、私の環境ではブロックの解除自体が見つかりませんでした。

Set-ExecutionPolicy RemoteSigned で実行ポリシーを変更します。
RemoteSigned はスクリプトを実行できるようになりますが、ローカルで実行されたスクリプトおよび
作成されたスクリプトに関してはデジタル署名が不要になるようです。
PowerShellスクリプトでのデジタル署名の役割については今度調べてみたいと思います。

JenkinsOnDesktop.exeでアプリケーションを起動してJenkinsさんに仕事をしてもらうサーバーを
設定します。
サーバーのURLを入力するだけで良いようです。
今回はローカル環境を指定したので、ジョブの状態は通知されることを確認しましたが
ログインしないとジョブの一覧が表示されない環境ではどのようになるか今回は試していません。

執事の情報や見た目を変更できるようですので、好きな画像に差し替えてテンションを上げるのも
良いかもしれません。

仕事場ではメール通知を利用していて、本当はJenkinsさんに声で知らせて欲しいのですが
そんな音を気安く出しても良い雰囲気ではないので、こういう通知してくれるアプリケーションは
助かります。

2014年9月11日木曜日

GitHubなどのissueに付けられるタグでよく使われる単語を知りたい

GitHubなどのissueに付けられるタグにでよく使われる単語を集計できたら良いな。とふと思いました。
集計する方法は思いつかないので、また今度になるかも。

リポジトリを作成したときにはbug, featureなどが用意されているけど。
単語とあわせて、それぞれタグの意味合いはどんな役割で使っているのか知りたいと思いました。
とは言っても何か良さそうなものはないだろうか。

後からでも良さそうな単語があれば追記していこう。

2014年9月10日水曜日

omnibus-gitlabでtimezoneが設定できない様子

GitLab 7.5からはタイムゾーンを設定できるようです。
内容についてはomnibus-gitlabでtimezoneをAsia/Tokyoにするを参照ください

プライベートなGitリポジトリを管理するためにGitLabのomnibus-gitlabを利用し始めました。
使い始めて登録されるデータの日時を見ると、タイムゾーンはUTCになっていました。
GitLabでタイムゾーンを設定できるらしいですが対象の config/application.rb ファイルが見つからず。
ソースからインストールしたほうが良いのかな?
rpmでインストールできるので以前よりもセットアップの敷居が低くなって嬉しかったのですが。

全然関係ありませんが少し前まで GitLab を ギットラボ ではなく ギットラブ と呼んでおりました。(>_<)

GitLab 7.2.1

WindowsのJenkinsでジョブ実行中に一時停止したいのに

WindowsでJenkinsのジョブを実行中にsleepのような一時停止を行いたかったのですが
sleepコマンドは無いので代わりにTIMEOUTコマンドを利用してみました。

ジョブを実行してみたところ、次のエラーメッセージが出てジョブが失敗してしまいました。orz
エラー: 入力のリダイレクトはサポートされていません。今すぐプロセスを終了します。

TIMEOUT /T 10 /NOBREAK > nul
TIMEOUTを実行すると残り待ち時間がコンソールに表示されるので > nul で出力を捨てることができるのですがコンソール上では確かに出力されないのですが、Jenkinsではエラーメッセージが出てしまいました。
原因は分からず。別の方法があるか調べなくては。
一時停止する方法を見つけました。
詳細はWindowsのJenkinsでジョブ実行中に一時停止するになります。

2014年9月9日火曜日

Jenkinsでタイムスタンプの値を取得したいとき

ジョブの成果物でファイル名に日時を含めたいとき、どうすればいいか確認した結果
環境変数のBUILD_IDを利用すれば良いようです。
BUILD_DATEも在るらしいですが、私の環境ではこの変数は参照できませんでした。orz
素直に標準で用意されているBUILD_IDを利用したいと思います。

実行するビルド手順によって変数の参照方法が異なります
参照方法が間違っていて失敗してしまいました。気を付けないと。

Windowsバッチコマンドの実行の場合は
%環境変数名%→%BUILD_ID%
シェルの実行の場合は
${環境変数名}→${BUILD_ID}

2014年9月7日日曜日

Jenkins で Graphics N/A Unable to access X.が出たとき

Jenkinsで本来グラフが表示される部分に次のメッセージが表示されるとき

Graphics N/A Unable to access X. You need to run the web container in the headless mode. Add -Djava.awt.headless=true to VM

Open JDKをインストールしている環境ではdejavu-sans-fontsというパッケージを
インストールすることで解決できるようです。
https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+got+java.awt.headless+problem
VagrantなどでJenkinsをCentOS環境にセットアップするときには次のような感じにしています。
# install Jenkins
sudo yum install -y java-1.6.0-openjdk
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install -y jenkins dejavu-sans-fonts
# booting and autorun jenkins
sudo chkconfig jenkins on
sudo /sbin/service jenkins start

2014年9月6日土曜日

Jenkinsでvagrant upするときはBUILD_ID=dontKillMe

Jenkinsでvagrant upするときにはBUILD_ID=dontKillMeの設定が必要
https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
ジョブを終了するとプロセスも終了するようですがBUILD_ID=dontKillMeを設定することで
プロセスを残したままにできるとのこと。

PHP Fatal error: Class 'DOMDocument' not found が出たとき

PHP Fatal error: Class 'DOMDocument' not found in /phpunit/phpunit/PHPUnit/Util/XML.php on line 136
PHPのXMLが無いとのことなのでphp -mでインストールされているモジュールを確認。
[PHP Modules]
:
xml
:
XMLの表示はあったのですが何かが足りなかったようで php-xml をインストールすると解消しました。
[PHP Modules]
:
xml
xmlreader
xmlwriter
:
xmlreaderとxmlwriterが追加されていました。

CentOSにAndroid SDKをCLIでセットアップする

  1. Android SDKをセットアップするフォルダに移動
    cd /opt (セットアップするフォルダの場所はお好みで)
  2. Android Developerサイト(http://developer.android.com/sdk/index.html)の
    VIEW ALL DOWNLOADS AND SIZESからSDK Tools Only(Linux 32 & 64-bit)Android SDKを
    ダウンロード wget http://dl.google.com/android/android-sdk_r23.0.2-linux.tgz
  3. 圧縮ファイルを解凍
    tar zxvf android-sdk_r23.0.2-linux.tgz
  4. 解凍が成功したら圧縮ファイルを削除
    rm android-sdk_r23.0.2-linux.tgz
  5. PATHにAndroidの環境変数を設定
    vi /etc/profile.d/android.sh
    export ANDROID_HOME="/opt/android-sdk-linux"
    export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH"
  6. 環境変数を再読み込み
    source /etc/profile
  7. Android SDKの一覧を表示
    android list sdk -u -a
    先頭に数字が表示されるのでインストールしたい項目の数字を覚えておく
  8. SDKをインストールする
    android update sdk -u -a -t 一覧で表示されていた数字
  9. 他のユーザでも実行できるようにSDKの実行権限を変更
    chmod -R 777 /opt/android-sdk-linux

2014年9月4日木曜日

CentOSでSSHなどコンソールでパスワードをtypoしたときにクリアする

CentOSでSSHなどコンソールでパスワードを入力するとき入力した内容が表示されないので
typoしてしまうとやり直すためにバックスペースを連打していました。

こういうとき Ctrl+u の同時押しで入力した内容をクリアできます。

ローカル:Windows7
リモート:CentOS5とかCentOS6