2018年2月11日日曜日

IntelliJ IDEAでターミナル⇔エディタ間移動のショートカット

最近、IntelliJ IDEAに乗り換えた。

ツールウィンドウとしてターミナルを出しておけるので、そこからgitコマンドを打ったりしている。

このターミナルと、エディタ(=現在のタブ)との間を、キーボードショートカットで行ったり来たりできるようにしたい。

デフォルトでは、「Alt+F12」でエディタ⇒ターミナルの移動ができる。
のだが、ターミナル⇒エディタの移動はひと工夫しないとできない様子。

※参考:https://stackoverflow.com/questions/21134438/how-to-jump-from-intellij-terminal-to-editor-with-shortcut/23860667

以下のような方策があるらしい。
・もう一度「Alt+F12」を押す(エディタに移動できるが、ターミナルは閉じてしまう)
・「Alt+2」を2回押す(ターミナルに「2」が入力されてしまうことがある)
・「Alt+Home」でナビゲーションバーに移動した後、「ESC」でエディタに移動
・File⇒Settings⇒Tools⇒Terminal⇒Override IDE shortcuts、のチェックを外した上で、「ESC」を使う

ターミナルは開いたままにしておきたいし、ワンアクションで移動したいので、ひとまず上記4つ目の方法を選択。
しばらく使ってみて様子を見る。

2017年2月5日日曜日

Kindleオーナーライブラリで書籍を更新したいとき



  1. Amazon.co.jpのアカウントサービス⇒デジタルコンテンツ⇒コンテンツと端末の管理
  2. 前月にオーナーライブラリで登録した本を選択し、削除またはアクションメニューから利用を終了




2017年1月29日日曜日

puttyで自動再接続

Windows上からputtyでSSH接続するとき、接続先のSSHサーバとのあいだのネットワークが一時的に切断されたりしても、自動で再接続するようにしたい。

ぐぐるとpfwdを使うとかbitvise ssh clientを使うとか、いくつか方法が出てくるのだけど、手元の環境ではいずれもいまひとつうまく動かない面があったので、別の方法をとることにした。

具体的には、以下のとおり。

  • puttyのセッション設定でkeep aliveを有効にして、切断をクライアント側から検知できるようにする
  • pagentで秘密鍵のパスフレーズ入力を自動化する
  • plink使ってログインおよび再接続するバッチファイルを作る

1点目のkeep aliveについては、puttyの設定画面⇒Connection⇒「Seconds between keepalives」を0以外の値にしておく。自分は10秒にした。

pagentを使うと、このあと述べるplinkでSSHログインするとき、秘密鍵のパスフレーズを自動で入れてくれる。
使い方は簡単で、puttyに同梱されているpagent.exeを実行するとタスクトレイにpagentのアイコンが出る。
右クリックしてAdd Keyから秘密鍵を登録すればOK。

plinkはputtyをコマンドラインから実行するもの。

$ plink <セッション名> -l <ログインユーザ名>

こんな感じで接続できる。

plinkを使って作成したバッチファイルは、こんな感じ。

@echo off
cd <plink.exeがあるディレクトリ>
echo starting connection...
plink <セッション名> -l <ログインユーザ名>

:LOOP
echo starting connection...
plink <セッション名> -l <ログインユーザ名>
timeout <次の再接続まで待つ秒数>
goto LOOP


サーバ側の再起動時とかも、このバッチファイルが動いていれば、自動で再接続しにいってくれる。
注意点として、pagentは再起動すると1回はパスフレーズ入れないといけないので、バッチファイルをスタートアップに入れたとしても、クライアント側(Windows)を再起動したあとに自動で接続、とはならない。

再接続の間隔を徐々に伸ばしていったりとか、ターミナル開かないようにしたりとか、凝る余地は色々ありそうだけど、ひとまず手軽に自動再接続ということで。

2015年8月30日日曜日

複数プロキシ切り替えのシェルスクリプト

Ubuntuで,ターミナルから複数のプロキシを切り替えるスクリプト.

#!/bin/bash

echo '--------------------------------------'
echo 'Proxy Settings'
echo '--------------------------------------'

menu1='SHOW CURRENT PROXY'
menu2='DISABLE'
menu3='SET [hoge.co.jp]'
menu4='SET [foo.co.jp]'
menu5='QUIT'

select menu in "$menu1" "$menu2" "$menu3" "$menu4" "$menu5"
do
    if [ -z "$menu" ]; then
        continue
    else
        break
    fi
done

case "$menu" in
    "$menu1" )
        printenv | grep proxy
        $BASH_SOURCE ;;
    "$menu2" )
        unset http_proxy
        unset https_proxy
        unset ftp_proxy
        unset no_proxy
        echo 'printenv | grep proxy'
        printenv | grep proxy
        $BASH_SOURCE ;;
    "$menu3" )
        export http_proxy='http://hoge.co.jp:8080/'
        export https_proxy='https://hoge.co.jp:8080/'
        export ftp_proxy='ftp://hoge.co.jp:8080/'
        export no_proxy='localhost,127.0.0.1'
        echo 'printenv | grep proxy'
        printenv | grep proxy
        $BASH_SOURCE ;;
    "$menu4" )
        export http_proxy='http://foo.co.jp:8090/'
        export https_proxy='https://foo.co.jp:8090/'
        export ftp_proxy='ftp://foo.co.jp:8090/'
        export no_proxy='localhost,127.0.0.1'
        echo 'printenv | grep proxy'
        printenv | grep proxy
        $BASH_SOURCE ;;
    "$menu5" )
        echo bye ;;
esac

直接実行すると,スクリプト内での環境変数の変更が,スクリプト終了時に破棄されてしまう.
なので,sourceコマンドで呼び出す.

$ source proxyswitch.sh

エイリアスを設定しておくと使いやすい.



ついでに,Windowsで同じようなことをやるバッチ.

@echo off
:Menu
cls
echo --------------------------------------
echo Proxy Settings
echo --------------------------------------
echo 1:SHOW CURRENT PROXY
echo 2:ENABLE
echo 3:DISABLE
echo 4:SET [hoge.co.jp]
echo 5:SET [foo.co.jp]
echo q:QUIT
echo --------------------------------------
echo Attention: it changes registry settings.
echo --------------------------------------

set Slt=nul
set /p Slt="input:"

if '%Slt%'=='1' goto Set_1
if '%Slt%'=='2' goto Set_2
if '%Slt%'=='3' goto Set_3
if '%Slt%'=='4' goto Set_4
if '%Slt%'=='5' goto Set_5
if '%Slt%'=='q' goto :eof

goto Menu

:Set_1
FOR /F "TOKENS=1,2,*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable') DO IF "%%A"=="ProxyEnable" SET enable=%%C
FOR /F "TOKENS=1,2,*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer 2^>nul') DO IF "%%A"=="ProxyServer" SET proxy=%%C
if %enable%==0x0 echo [disabled]  (%proxy%)
if %enable%==0x1 echo [enabled]  %proxy%
pause
goto :Menu

:Set_2
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 1
echo Proxy ON
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
pause
goto :Menu

:Set_3
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 0
echo Proxy OFF
pause
goto :Menu

:Set_4
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d hoge.co.jp:8080 /f
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
pause
goto :Menu

:Set_5
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d foo.co.jp:8090 /f
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
pause
goto :Menu


2015年8月28日金曜日

Ubuntuでターミナルからgoogle検索できるようにする

Ubuntu等のLinuxで,ターミナルから以下の動作を呼び出せるようにしたい.

  • chromiumブラウザに新規タブを開く
  • 開いたタブで,指定したキーワードでgoogle検索を実行

~/.bashrc に以下の内容を追記する.

function google() {
      QUERY=''
      for arg in $@; do
          if [ "$arg" = "$1" ]; then
              QUERY=${QUERY}${arg}
          else
              QUERY=${QUERY}+${arg}
          fi
      done
      chromium-browser www.google.co.jp/search\?q=${QUERY} &
}

保存したら,以下のコマンドで,有効化する.

$ source ~/.bashrc 


これで,ターミナルで

$ google hoge foo bar 

などと入力すると,「hoge」「foo」「bar」でAND検索ができる.

TildaやGuakeのようなドロップダウン型のターミナルで使うと便利.


2015年7月3日金曜日

LGL22のダウングレード

2015/6/23のソフトウェア更新によって,LGL22のSIMフリー化が塞がれた.

http://k-tai.impress.co.jp/docs/news/20150623_708303.html

ソフトウェア更新をもとに戻すための手順のメモ.

1. ダウンロード

  • LGUnitedMobileDriver: http://www.lg.com/jp/support-mobile/lg-LGL22
  • LG Flash Tool 2014: http://forum.xda-developers.com/showthread.php?t=2797190
  • LGL2220D_00.kdz: http://forum.xda-developers.com/showpost.php?p=51177684

2. インストール

  • LGUnitedMobileDriverをインストール
  • LG Flash Tool 2014のzipファイルを解凍
  • LGL2220D_00.kdzは,上記zipファイル解凍でできたフォルダに入れておく

3. PCとLGL22の接続

  • LGL22の電源をOFFにする
  • ボリュームアップボタンを押しながらUSBケーブルを接続
  • 以上により,Download modeとして起動する

4. COMポート設定

  • PCのデバイスマネージャを開き,ポート(COMとLPT)を展開
  • LGE AndroiNet USB Serial Port(COM**)を右クリック→プロパティを開く
  • ポートの設定→詳細設定→COMポート番号のプルダウンからCOM41を選択

5. LGFlashTool実行

  • LGFlashTool2014.exeを起動
  • 「Select KDZ file」でLGL2220D_00.kdzを選択
  • 「Normal Flash」を押す
  • 次の画面で「START」を押す
  • 次の画面で「OK」を押す
  • 途中,何かダイアログが出るが,プログレスバーは進んでいる.そのままダイアログを放置して,プログレスバーが100%になるまで待つ.

2014年5月7日水曜日

EPSのbounding boxを自動調節

論文作成時に,画像を載せるためにEPSファイルを使う場合について.
WindowsでpptxからEPSを作る場合,EPSプリンタでファイル出力した後にGhostviewからbounding boxを設定するという方法があるが,毎回Ghostviewを開くのはけっこう面倒.

Epstoolというのを使えばコマンドラインから自動調節できるらしいが,自分の環境ではうまく動かなかった.
そこで,ghostscriptのコマンドを使ってbounding boxを自動調節するバッチを作った.

ghostscriptのオプションで「-sDEVICE=bbox」とすると,指定したソースファイルのbounding boxを(必要最小限な領域で)計算して返してくれる.

gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=bbox <ファイル名>

その結果を使って,EPSファイルの中身を書き換えれば良い.
書き換えはただのテキスト置換なので,いくらでもやりようはあると思う

@echo off
setlocal enabledelayedexpansion

set currentpath=%cd%
set /p src_filename="Source File Name: "
set /p dst_filename="New File Name: "

gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=bbox %src_filename% 2> tmp.txt
set /p bbox=”” < tmp.txt
del tmp.txt

<src_filename内の「%%BoundingBox:」で始まる行を変数bboxの値で置き換えてdst_filenameに書き出す処理>

endlocal
pause

EPSファイル書き換えの注意点として,EPSファイル冒頭部に「%%BoundingBox: (atend)」から始まる行がある場合,bounding boxはファイル末尾に記載されているため,そちらを書き換える必要がある.(冒頭部は書き換えない)