※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

@あれこれ-2009年12月
"Follow juria on Twitter"


[2009-12-18]

nkf じゃなくても はてなブックマークに登録

[2009-12-15] のヤツ、 nkf 使わなくてもAutoHotkeyのTransformコマンドでいけますね。
内の環境では、 wget cUrl 走らせる前に少し時間を置かないとうまくいかないけど。
クリップボード使うので、退避・書き戻しとか要るかな。
inStr = %tweet%
Clipboard = %inStr%
TransForm, tweet, Unicode

変換精度はどっちでも同じぐらいで、スペースの入れ方とかでも変わってくるので、
たぶん、 nkf ならオプションを工夫するとか、NkfConvertSafe 使うとかすれば、もっと
精度は良くなるんじゃないかと。

ちなみに、 AutoHotkey Unicode 版 なら、mbstring.ahk を使わなくても
StringLen コマンドでワイドキャラクターの文字数をちゃんとカウントしてくれますが、
TransForm, OutputVar, Unicode の代替である
Transform, OutputVar, To[From]CodePage, codepage, StringToConvert
がうまく行かないんだよね。。。

[2009-12-15]

こういう時こそ nkf はてなブックマークに登録

[2009-12-09] の「"\デスクトップ\"みたいな日本語のパス。utf-8 で出力できたら」
って、うっかりしてましたね。
nkf があるじゃないですか。( nkf.exe nkf32.dll Windows用 最新版
sqlite3 の出力を nkf にパイプ、 nkf のオプションで出力コードに Shift_JIS を指定。

(一行で)
sqlite3 -line History "select id, full_path , url from downloads"
	 | nkf -s > output.txt

Shift_JIS 専用 nkf32.exe なら
sqlite3 -line History "select id, full_path , url from downloads"
	| nkf32 > output.txt

[2009-12-02] の wget cUrl で Twitter API 使って POST も nkf32.dll を DllCall
で日本語行けますね。日本語(Shift_JIS)の文字数カウントは、なまずさんの
mbstring.ahk を使わせて頂いてます。

twitterPost.ahk 日本語対応版
#Include mbstring.ahk
update:
InputBox, tweet, Twitter, , ,640 ,110, , , , ,%tweet%
If ErrorLevel <> 0
 Exit
else
 ;StringLen, length, tweet の代わり
 length := MBS_Strlen(tweet)
   count := length-140
 If (count > 0)
 {
   MsgBox, ,2,%length%`n%count%文字オーバー
   Gosub, update
 }
 else
 {
   MsgBox, %length%文字`n%tweet%
   inStr = %tweet%
   ; nkf32.dll をロード
    hModule := DllCall("LoadLibrary", Str, "nkf32.dll")
   ; Shift_JIS を utf-8 に変換
    DllCall("nkf32.dll\SetNkfOption", "Str", "-Sw")
   DllCall("nkf32.dll\NkfConvert", "Str", tweet, "Str", inStr)
   ;開放する
    DllCall("FreeLibrary", UInt, hModule)
    Run, wget.exe --post-data="status=%tweet%" -O- 以下略
    ;Run, curl.exe -d "status=%tweet%" 以下略
  }
 Return

[2009-12-09]

SQLite に挑戦 はてなブックマークに登録

何をどこから DL したのか、どこに保存したのか、ブラウザのダウンロード履歴は
けっこう役に立つ。
Portable Google Chrome のダウンロード履歴は \Profil\Default\History ファイルに
保存されている。SQLite3 のデータベースファイルなので、 TkSQLite PupSQLite
簡単に抽出、テキストにしておけるけど、コマンドラインで何とかしようと思い立ち。
SQL の何たるかを知らないエンドユーザは悪戦苦闘してしまいました。
(以下、自分なりの理解で書いてるので、用語は適切じゃないかもしれません。)
sqlite3.exe は、PortableChromium v.4.0.212.0 に VACUUM 用バッチファイルと共に
同梱されてたりもするけど、現時点で最新の sqlite3.exe v3.6.21(Precompiled Binaries For Windows) を使用。
sqlite3.exe は、対話型、シェル・スクリプト、両方の利用が可能。SQLコマンドは共通。

■対話型
コマンドプロンプトで、引数に Historyファイルを指定して sqlite3.exe を起動すると
sqlite3.exe path\to\Profil\Default\History
SQLite データベースとの対話がスタート、コマンドの入力待ちになる。
SQLite version 3.6.21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> 

続けて、(念のために)ダウンロード履歴データを格納している Table 名や
カラム名を確認 → 出力モードを指定 → 出力ファイル名を設定 → 抽出するデータを
指定して出力、と流れに従って逐一 SQLコマンドを入力、ENTER する。対話型たる所以。
 -- で始まる行はコメントだけど、もちろん入力する必要は無い。(画像参照)

sqlite> -- テーブル名を表示させて確認(#1)
sqlite > .tables
downloads             presentation          urls
keyword_search_terms  segment_usage         visits
sqlite> -- テーブル名を指定してフィールド内のカラム名を確認(#1)
sqlite> .schema downloads
CREATE TABLE downloads (id INTEGER PRIMARY KEY,full_path (以下略);
sqlite> -- 出力モード(#2)、出力ファイル名を設定
sqlite> .mode line
sqlite> .output DL.txt
sqlite> -- downloads テーブルからカラムを3列指定してデータを出力(#3)
sqlite> -- 命令文の最後には必ず ; を付ける(終了の宣言)
sqlite> select id, full_path , url from downloads;
sqlite> -- .q(.quit) または .e(.exit) で終了、通常のコマンドプロンプトに
sqlite> .exit

 #1 全てのテーブル名、インデックス名、各フィールドをまとめて確認するなら
sqlite> .schema

 #2 見やすいのは line モード、再利用しやすいのは csv モードでしょうか。

 #3 カラム名をひとつ指定する場合
sqlite> select url from downloads;
   指定テーブル内の全データを抽出する場合
sqlite> select * from downloads;

■shell script(コマンドプロンプト)で実行する場合
sqlite3.exe [OPTIONS] FILENAME [SQLコマンド]
 起動オプションは、 sqlite3.exe -help で確認。

テーブル名を指定してフィールド内のカラム名を確認
sqlite3.exe History ".schema downloads"
downloads テーブルからカラムを3列指定してデータをテキストファイルに出力(一行で)
sqlite3.exe -line History "select id, full_path , url from
downloads" > DL.txt
SQL コマンド中にスペースがある場合はダブルクォーテーション(")で囲む。

sql3_s.jpg

という訳で、前置きが長くなりましたが、定期的にダウンロード履歴をテキストに保存、
Chrome の履歴は削除するとスッキリ!

ChromeDLHistory2txt.ahk
 SQL コマンド中のカンマ(,)はエスケープすること。
;History ファイルがある場所
datadir = path\to\Profil\Default
History = %datadir%\History
;バックアップファイルやテキストファイルの保存場所
bkpdir = %datadir%\backup
;タイムスタンプの書式(ファイル名に付ける為)
FormatTime, date, , yyyyMMdd
;バックアップ
FileCopy, %History%, %bkpdir%\History.bak, 1  ;同名上書き
;データを抽出してテキストファイルに保存(一行で)
Runwait, cmd /c sqlite3.exe -line %History%
 "select id `, full_path `, url from downloads"
 > %bkpdir%\downloads_%date%.txt,,HIDE
;データベースからダウンロード履歴を削除
Run, cmd /c sqlite3.exe %History% "DELETE FROM downloads",,HIDE
ExitApp

REINDEX(index の再構築)や VACUUM(データベースファイルの最適化)をしてもいいかも。
問題は、"\デスクトップ\"みたいな日本語のパス。utf-8 で出力できたらいいんだけど。


[2009-12-02]

めんどくさがりやの Twitter はてなブックマークに登録

新たに専用クライアントソフトを導入する必要があるような使い方はしないので。

Twitter Auto Login フォーム

twitter.html
表示の都合により一部改行
<html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type"
               content="text/html;charset=shift_jis" />
<meta http-equiv="content-script-type" content="text/javascript" />
<title>Twitter - 自動ログイン</title>
</head>
<body onload="document.autologon.submit()">
<h3>twitter:ログイン</h3>
<form action="https://twitter.com/sessions" name="autologon"
                              method="post">
<input name="session[username_or_email]" type="text"
                          value="ユーザ名とか" />
<input name="session[password]" type="password"
                           value="パスワード" />
</form>
</body>
</html>

twitter-mode on xyzzy

キーボード操作も含めてインターフェース的に一番しっくり来る感じ。
twitter-mode.jpg

丁寧な readme が付いてますが、一応、手動導入方法。

1.~/site-lisp に以下をコピー
  twitter-mode 一式(twitter フォルダ)
  junk-library 一式(junk フォルダ)
  xml-parser-modoki.l
  json 一式(json.l・json フォルダ)

2..xyzzy または siteinit.l に
(autoload 'twitter        "twitter/defs" t)
(autoload 'twitter-toggle "twitter/defs" t)

3.M-x twitter で起動、ミニバッファにユーザ名とパスワードを入力→[ENTER]
  ログイン成功を確認したら、一旦 [q] で終了させる。

4.~/ 以下に .twitter フォルダが作成されているので、/twitter/config.l.sample を
  コピー、config.l にリネーム、アカウントや配色などの設定をする。(任意)
  ブラウザをデフォルト以外のブラウザを指定するなら
;;; ブラウザを指定する
(defun open-web (url)
  (let ((prog "path/to/xyzzy/etc/PortableChrome.lnk"))
    (shell-execute prog t url)))
  ショートカットファイルについては@あれこれ-2009年11月を参照

  複数のアカウントを使い分けるなら、アカウントの設定はしない、ってことですね。

wget で Twitter API 使って post できる そうなので(日本語不可)

inputbox で投稿用 AHK。 cURL でもおっけ。140 文字超えてたら何度でもやり直し可。
ASCII のみなので文字数カウントも単純(バイト単位)。DOS窓非表示。

twitterPost.ahk
表示の都合により一部改行
update:
InputBox, tweet, Twitter, , ,640 ,110, , , , ,%tweet%
If ErrorLevel <> 0
  Exit
else
  StringLen, length, tweet
    count := length-140
  If (count > 0)
  {
    MsgBox, ,2,%length%`n%count%文字オーバー
    Gosub, update
  }
  else
  {
    MsgBox, %length%文字`n%tweet%
    Run, wget.exe --post-data="status=%tweet%" -O-
      http://ユーザ名:パスワード@twitter.com/statuses/update.json
                                   ,,HIDE
    ;Run, curl.exe -d "status=%tweet%"
      http://ユーザ名:パスワード@twitter.com/statuses/update.json
                                   ,,HIDE
  }


-
  
添付ファイル