読者です 読者をやめる 読者になる 読者になる

ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

Amazonの書籍詳細ページからタイトルを抜き出し大阪市立図書館の蔵書検索を行うJavaScript

JavaScript Amazon 図書館

背景

新人教育の一環として、部内でオススメの書籍を募ったところ、 自分が読んでみたいと思った書籍がたくさんありました。

Amazonで一つ一つ検索し ほしい物リスト に登録していったがすべて購入すると随分な費用となるため、 大阪市立図書館の蔵書検索 で検索し予約することにしました。

その作業を少しでも容易にすべく、JavaScriptブックマークレットを作成してみました。

スクリプト

javascript:
var w = document.getElementById('productTitle').innerText.replace(/―/mgi, " ").trim();
location.href = "http://www.oml.city.osaka.lg.jp/index.php?action=pages_view_main&active_action=v3search_view_main_init&block_id=552&tab_num=0&op_param="+encodeURIComponent("words="+w);

使い方

前提

僕の利用しているブラウザはhrome です

  1. ブックマークに次のスクリプトを登録します。(ブックマークレットとなります)
  2. Amazonの商品ページ( ex )を開き、先のブックマークレットをクリックします。

ひとこと

マウスで選択されている文字列から検索、なども容易に実現できますね。

スクリプトとは関係ないですが、大阪市立図書館のページ重たいです。

Chocolateyを使ってEclipse + ERMasterをインストールしてみる

Chocolatey Eclipse Java

背景

プロジェクトのER図作成ツールとして ERMaster を利用するケースが多いが、 メンバのためにセットアップ手順をまとめるのが面倒です。

なるべくコマンドラインで完結できるような仕組みにすれば、 テキストベースのドキュメントにできます。

Chocolatey を使って試してみました。

手順

1.Chocolateyのインストール

https://chocolatey.org/ にアクセスします。

ページ中央辺りに、 Windowsコマンドプロンプトからのインストール方法が記載されています。 実行してみます。( 2016-01-07 現在 )

※注意:コマンドプロンプト実行の際には「管理者として実行」を選択してください!

C: \> @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

2.パッケージを探す

https://chocolatey.org/ のページ 右上 には、Chocolateyでインストール可能なアプリを検索するための検索エリアがあります。

"eclipse" と入力し検索してみましょう。

3.Eclipseのインストール

表示されたページには、パッケージのインストールを行うためのコマンドが表示されています。 これを Windowsコマンドプロンプトに貼り付けます。

ありがたいことに jdk まで勝手にインストールしてくれます。

※注意:コマンドプロンプト実行の際には「管理者として実行」を選択してください!

C: \> choco install eclipse

4.ERMasterのインストール

Eclipseに対して、 ERMasterプラグインをインストールします。

まずは以下のコマンドを実行し、feature名というものを確認します。

C: \> "C:\Program Files\Eclipse Foundation\4.5.1\eclipse\eclipsec.exe"
    -clean -purgeHistory 
    -application org.eclipse.equinox.p2.director 
    -noSplash 
    -repository http://ermaster.sourceforge.net/update-site/
    -list

org.insightech.er=1.0.0.v20150619-0219
org.insightech.er.feature.feature.group=1.0.0.v20150619-0219
org.insightech.er.feature.feature.jar=1.0.0.v20150619-0219

表示されたものから =以降を削除し、,で連結 します。

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

"C:\Program Files\Eclipse Foundation\4.5.1\eclipse\eclipsec.exe"
    -clean -purgeHistory 
    -application org.eclipse.equinox.p2.director 
    -noSplash 
    -repository http://ermaster.sourceforge.net/update-site/
    -installIUs 
        org.insightech.er,org.insightech.er.feature.feature.group,org.insightech.er.feature.feature.jar

結果

これでeclipseを起動すれば、ERMasterが利用可能となっているはずです。

ひとこと

バッチファイルを作ってあげれば、「このファイルクリックしといてね!」でERMasterのインストール指示が終わります。 便利!

phpQueryを使って、commandlinefu.comからCommandLine Tipsを取得してみる

php

背景

コマンドラインからWebサイトのスクレイピングを行う必要がありました。

Goutte を使ってスクレイピングを行ったことがありました。 けれどもあまり直感的に実装できずハマった思いがあるため、もう少し使いやすいライブラリはないものかと探してみました。 代わりに良さそうなライブラリを見つけたのでこちら (electrolinux/phpquery · GitHub) を使ってみることにしました。

検証を兼ねて、 commandlinefu.com から CommandLine Tips を抜き出してみることにしました。

環境

$ uname -a
Darwin genzouw-MacBook-Pro.local 15.2.0 Darwin Kernel Version 15.2.0: Fri Nov 13 19:56:56 PST 2015; root:xnu-3248.20.55~2/RELEASE_X86_64 x86_64 i386 MacBookPro10,1 Darwin


$ bash -version
GNU bash, バージョン 4.3.42(1)-release (x86_64-apple-darwin14.5.0)
    Copyright (C) 2013 Free Software Foundation, Inc.
    ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

    This is free software; you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

$ php -v
PHP 5.5.28 (cli) (built: Aug 31 2015 12:17:07) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

インストール

事前準備

Composer がインストールされていることが前提となります。 インストールされていない場合はすぐにインストールしましょう!

準備ができたら

以下のコマンドを実行します。 少し時間がかかるので、気長に待ちましょう。

composer global require electrolinux/phpquery

正常にインストールできましたら早速スクリプトをコーディングしてみましょう。

スクリプトをコーディング

はじめの6行はほぼ固定です。 スクレイピング対象のWebページのURLだけが毎回変わることになるでしょう。

コードの詳細までは説明しませんが、 jQuery を使ってWebページをゴニョゴニョしたことがある方には馴染み深いものになっています。

#terminal-display-main 要素内の .one-liner というdivタグが、1つ1つのtipsになっています。

<?php
require getenv('HOME') . '/.composer/vendor/autoload.php';

$dom = phpQuery::newDocument(file_get_contents(
    "http://www.commandlinefu.com/commands/browse/25"
));

pq($dom)->find("#terminal-display-main")->find(".one-liner")->each(function($it) {
    echo "========================================", PHP_EOL;
    echo "$ ", trim(pq($it)->find("div.command")->text()), PHP_EOL;
    echo "", PHP_EOL;
    echo trim(pq($it)->find("div.summary")->text()), PHP_EOL;
    echo "", PHP_EOL;
    echo "", PHP_EOL;
});

結果

実行してみます。

php commandlinefu.php
========================================
$ rename 's/ //g' *

remove all spaces from all files in current folder


========================================
$ ls -1 | while read a; do mv "$a" `echo $a | sed -e 's/\ //g'`; done

remove all spaces from all files in current folder


========================================
$ grep -Pooh .*t..r,.* /etc/init.d/*

Get a quote from Pooh


========================================
$ debsecan --format detail

List known debian vulnerabilities on your system -- many of which may not yet be patched.


========================================
$ bar() { foo=$(ls -rt|tail -1) && read -ep "cat $foo? <y/n> " a && [[ $a != "n" ]] && eval "cat $foo" ;}

do anything with the last created (touched, accessed) file in the current dir

...

あまり表示されすぎるので、ある程度切ったほうがよいかもしれません。

ひとこと

Goutteよりは組みやすいです。

Bashでリダイレクトにより誤って既存ファイルを上書きしてしまわないようにする

Bash

背景

bashクックブック を読み進めています。

標準で ON にしておくと良さそうな設定がありました。 Bashでリダイレクトにより誤って既存ファイルを上書きしてしまわないようにする設定です。

環境

$ uname -a
Darwin genzouw-MacBook-Pro.local 15.2.0 Darwin Kernel Version 15.2.0: Fri Nov 13 19:56:56 PST 2015; root:xnu-3248.20.55~2/RELEASE_X86_64 x86_64 i386 MacBookPro10,1 Darwin


$ bash -version
GNU bash, バージョン 4.3.42(1)-release (x86_64-apple-darwin14.5.0)
    Copyright (C) 2013 Free Software Foundation, Inc.
    ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

    This is free software; you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

"set -o noclobber"

"set -o noclobber" を実行すると、すでに存在しているファイルをリダイレクトにより上書きできなくなります。 ファイルが存在しない場合は問題なく新規作成されます。 追記も問題なくできます。

$ set -o noclobber

# 新規はできる
$ echo 123 > x.txt

$ ls
x.txt

# 上書きはできない
$ echo 456 > x.txt
bash: x.txt: 存在するファイルを上書きできません

# 追記はできる
$ echo 456 >> x.txt

# >| を使えば上書き可能
$ echo abc >| x.txt

# -o ではなく +o で設定をOFFにできる
$ set +o noclobber

# OFFにしていれば、上書き可能
$ echo 789 > x.txt

ひとこと

明示的な上書きは >| を使うという書き方でルール化するのは有りだなと思いました。

ssh-copy-idを使ってssh公開鍵を対象サーバーに配置する

Linux SSH

背景

ssh-copy-id という、操作中のユーザーのSSH公開鍵を対象サーバーに簡単に配置するためのコマンドを知ったので使ってみた。

環境

$ uname -a
Darwin genzouw-MacBook-Pro.local 15.0.0 Darwin Kernel Version 15.0.0: Sat Sep 19 15:53:46 PDT 2015; root:xnu-3247.10.11~1/RELEASE_X86_64 x86_64 i386 MacBookPro10,1 Darwin

$ bash -version
GNU bash, バージョン 4.3.42(1)-release (x86_64-apple-darwin14.5.0)

$ zsh --version
zsh 5.1.1 (x86_64-apple-darwin15.0.0)

施行

Vagrantで新しいLinuxサーバーを立てる

$ vagrant init

$ vi Vagrantfile        # ここではすでにBoxを追加していたため、Vagrantfileを編集して利用するBoxを設定した

$ vagrant up

$ vagrant ssh
[vagrant@vagrant-centos65 ~]$ sudo useradd genzouw
[vagrant@vagrant-centos65 ~]$ sudo su - genzouw
[genzouw@vagrant-centos65 ~]$ mkdir .ssh            # sshの鍵の設定はない状態
[genzouw@vagrant-centos65 ~]$ chmod 700 .ssh/
[genzouw@vagrant-centos65 ~]$ exit
logout


[vagrant@vagrant-centos65 ~]$ sudo passwd genzouw   # 初期パスワードを設定
[vagrant@vagrant-centos65 ~]$ exit
logout
Connection to 127.0.0.1 closed.

Mac上に ssh-copy-id がインストールされていなかったのでインストール

$ brew install ssh-copy-id
==> Downloading https://homebrew.bintray.com/bottles/ssh-copy-id-6.8p1.el_capitan.bottle.tar.gz
####################################################################### 100.0%
==> Pouring ssh-copy-id-6.8p1.el_capitan.bottle.tar.gz
🍺  /usr/local/Cellar/ssh-copy-id/6.8p1: 7 files, 344K

$ ssh-copy-id                                                                                                      15-12-09 - 21:01:53
Usage: /usr/local/bin/ssh-copy-id [-h|-?|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname

早速鍵の設定

$ ssh-copy-id genzouw@127.0.0.1 -p2222

結果

おもむろにVagrant環境に接続してみる

$ ssh genzouw@127.0.0.1 -p2222

予め作成しておいたsshの鍵がパスワード無しのものだったので、 パスワード無しでログインができる。

calendar.vimで、VimからGoogleカレンダーを編集してみる

Vim Google

背景

Vimから Google Task を閲覧・編集するためのVimプラグインがないかな?と探していて面白いものが見つかったので紹介。

結果的に僕が求めている Google Task 編集機能は使いやすいとはいえないものだったが、 Google Calendar の閲覧・編集機能が非常に強力で面白かった。

環境

$ uname -a
Darwin genzouw-no-MacBook-Pro.local 15.0.0 Darwin Kernel Version 15.0.0: Sat Sep 19 15:53:46 PDT 2015; root:xnu-3247.10.11~1/RELEASE_X86_64 x86_64 i386 MacBookPro10,1 Darwin

$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Oct 11 2015 07:48:23)
MacOS X (unix) version
Included patches: 1-889
Compiled by Homebrew

$ zsh --version
zsh 5.1.1 (x86_64-apple-darwin15.0.0)

使い方

必要なもの

Shougo/neobundle.vim · GitHub がインストールされていることを前提に話を進めます。

プラグイン管理ツール なら何でも良いと思います。

セットアップ

# vimを開く
vim ~/.vimrc
# 以下の行を追記
NeoBundle 'itchyny/calendar.vim'

追加後、vimで以下のコマンドを実行

:NeoBundleInstall

使い方

Vimを開き、以下のコマンドを実行します。

:Calendar

初回アクセス時は Google 認証画面が表示されます。 プラグインからのアクセスを許可し、表示されたコードをVimに貼り付けましょう。 以下のような画面が表示されるはずです。

">" や "<" を入力すれば、月別週別日別 でカレンダーが切り替わります。 I を入力すれば新しいイベントを登録できます。

ひとこと

見やすさではwebには敵いませんが、さっとカレンダーが見たい場合には便利。 カラーリングされて見やすい。

Cygwinでkillがうまく動かない場合の対処

Cygwin Bash

背景

家ではMacBookProを使っていますが、 会社のPCがWindowsのためやむなく Cygwin を使っています。

ただ、Vimなどのプロセスが残ってしまった場合にうまくkillできないことが有ります。

そんな場合に参考になるかと思います。

環境

対処

$ # シェルの組み込みコマンドであるkillであるというメッセージが表示されていれば、以下の対処を来なう
$ which kill

$ # 組み込みコマンドが呼び出されないようにする
$ echo "alias kill='/usr/bin/kill'" >> ~/.bashrc

ひとこと

不要なプロセスがすぐ残ってしまうようなおかしな状態が発生しないようにできればよいのですが。 あるいは MacBookPro で開発ができればよいのですけどね。