curlで保存先を指定してファイルをゲットだぜ!

どもです。
暑いですね。
選挙でしたね。
私利私欲のためでなければ誰が当選してもいいんですがね。
でも政治家になろうという人はほぼ間違いなく金儲けのためになろうとするのだから,
無理ですよね。
試しに,政治家の収入を会社員の収入の平均値以下にして,
年金とかも会社員と同じようにしてどのくらいの人が立候補するか見てみたいですよね。


閑話休題

curlデビューしようと思う

えーまだwget使ってるの〜? とか複数人のギャルに囲まれて言われたら,
おじさんおっきしちゃうので理由もないのに泣きそうになりそうなので,curlを使ってみようと思った暑い夏にエアコンつけた部屋の中で涼しい夏。

manを飛ばし飛ばし読んでみた

要件は,ファイルの名前はそのままに,ファイルの保存先を指定してDLする,これだけ!
しかし保存先を指定するオプションがない。

「-O, --remote-name」オプションは,リモートのファイル名を使用して保存してくれるが,
保存先はカレントディレクトリだ。いけそうな気もしたが,

If you want the file saved in a different directory, make sure you
change current working directory before you invoke curl with the -O,
--remote-name flag!

と釘を刺されたでござる。


「-o, --output」オプションは名前を指定できる。
そして複数のURLとやりとりすることを想定して,変数みたいなものを使えるらしい。
なるほど。
ポンポンポン・・・チーン!


これでオッケーだぜ!!

% curl http://modernizr.com/downloads/{modernizr-latest.js} --output "./js/#1"

もっとスマートな方法があるかもしれんが思いつかなかった。
誰か知っていたらプリーズ。

是非見ておいた方がいいと思う

私は,苫米地さんを好きか嫌いかと聞かれればぶっちゃけ嫌いになってしまうけど,
この人の出す情報には価値があると私は考えています。
そして今回YouTubeにアップされた動画の情報には非常に価値があると思うわけで。


んでこの動画については,好き嫌いとかうさんくさいとか,
そういうくだらんフィルターは外して見る価値があると考えます。
なので是非。また友人・知人・周囲の人にも勧めるといいかもです。
あんまり進めすぎるとガイキチだのウヨだのなんだの言われる可能性もあるのでほどほどに。


※2013/07/08 (Mon) 21:38 追記
なんのこっちゃわからんので動画のタイトル?をば。


『TPPが民主主義を破壊する!』出版記念対談  山田正彦元農水大臣×苫米地英人博士

吹いた

http://hayabusa3.2ch.net/test/read.cgi/news/1371944429/
から抜粋,一部修正。

1 名前: ロシアンブルー(京都府)[] 投稿日:2013/06/23(日) 08:40:29.36 ID:
【ニューヨーク=越前谷知子ソーシャル・ネットワーキング・サービス
(SNS)最大手の米フェイスブックは21日、システムの不具合で、過去1
年間に利用者約600万人の電話番号や電子メールアドレスが他の利用者に漏
れていたと発表した。

利用者がフェイスブック上の利用履歴をパソコンに取り込む際、本来は共有で
きないはずの他人の電話番号やメールアドレスが、誤って取り込まれることが
あった。不具合はすでに解消しており、これまでに、悪用されたとの報告はな
いという。

(2013年6月22日19時54分 読売新聞)
http://www.yomiuri.co.jp/net/news0/world/20130622-OYT1T00814.htm

2 名前: キジトラ(茸)[ age] 投稿日:2013/06/23(日) 08:41:56.89 ID:
いいね!

うわー流出あったんだーと思わせ,被害とかどうなんだろう? 自分の情報も流出したの?
などなどへ考えを誘導される流れで,間髪入れずに「いいね!」とレスできるセンス。
すばらしい。すばらしすぎる。俺には思いつかんわー。
ガチで声出して笑ったわ。
拍手。

はずかしい。すごくはずかしい。

すいやせんでしたー!


昨日のメモで書いていた自称バグについて調べていたら,原因わかった。
メソッド上に日本語コメントがあるとおかしくなる。
んで,なんでだろーって考えていたら,あああああぁ!
ctags-jをいじっているんだったー!
普段日本語でコメントとかあんま書かないから気づかんかったーとの言い訳。
ctagsのオプションに,`--jcode=utf8'をあたえて解決。


関係者各位の皆様この度はすみませんでした。
おかしい挙動があるときは,原因は自分にある,
と自分にいい聞かせてはいたはずなのですが。。。
ほんますんません。


あとMakefileみていたら,dctagsっていうのがあるのに気づいた。
ctagsを-DDEBUGでデバッグを有効にしてビルドするらしい。
使ってみたが,デバッグメッセージがわかりやすくなかった。
負け惜しみとかああ醜い醜い。

メモ。あとで見る。

  • anjuta付属のctagsは,javaソースをちゃんとパースできてないっぽい。
    • c++のreturntypeのパースというか出力にバグがあったので修正。
  • exuberant ctagsは,anjuta ctagsできちんとパースできないソースをパースできてるっぽい。
    • というか,anjuta ctagsはまともなjavaのソースをパースできないっぽい。
  • ctagsをいじっているけどがテストを書くのが困難で心が折れた。
    • 各地にstatic関数連発,main.cにユーティリティ的な関数があって困る。
    • こういう場合どうするべきかの経験知がない。
      • さわらぬ神に祟りなしだな。
    • 教訓,C言語だろうとなんだろうと単体テストはすげー大事なー。


結論としては,javaのパースをc.cではなくて,java.cを作ってそこでするか。
予想としては,c, c++をちゃんとパースしようとして,c.cをいじったら,
javaをパースできなくなって,けどjava使わねーから,エンバグされたことに
気づいてないか,そもそも,はjava? javaは言語階層のかなり下の方で
あほがつかう言語だから無視してもいーんだよ的な感じか。
コピペ・・・してもいいよね?
というか,今後javaにも新しいsyntaxが入るだろうから分けるべきだとは思う。
そもそもテストがないからこのような状況になるのだろうと思うわけです。


すみません。テストちゃんと書いてません。
書いてませんが,正常系のテストくらいは書いている!・・・はず!


さて,どうしたもんか。
オリジナルのctagsのc.cをjava.cとしてコピーしてc,c++の部分を削る。
んで,おそらくパース対象ソースの種類を判定してパース用の関数を呼んでいるところが
どっかにあるはずから,そこをごにょごにょすればいいかな。
でも・・テストがないから不安だし,ハードル高いし,
それゆえ重い腹いやさ腰があがらんでござる。


workingなんちゃらeffectivelyっていう本を読んだ方がいいな。いや,読むべきだね,ワタシ。

auto-complete.elとpopup.elを眺めているんですが,

もしかして,summaryプロパティってまだ実装されてない?
いや,popup.el側には準備万端であるけど,auto-complete.el側で使用してないという意味ね。
これが使用可能になれば,下記で書いてた,
text-propertyを使いたいというような要望に応えられると思う。
勘違いだったらすまん。


あと,my-auto-complete-toggle-sourceで間違っているところ発見。
面倒くさいというか,またすぐ別の問題が見つかりそうなのでここには載せな
いことにする。

2013/02/23 (Sat) 11:07 追記

auto-complete.el内の関数ac-candidates-1で,
各補完候補について関数popup-item-propertizeを使って,
プロパタイズしているので,そこでsummaryを設定してやれば表示できることには出来る。
下のdiffだけで,フェイスを設定してない素の状態で,表示すると下のように
なる。右端に表示されている"summary"っていうやつね。
ちっこいのでオリジナルサイズを見た方がいいかも。



今はお試し段階なので,"summary"っていう文字列を直接指定してますし,
ソースを読み解くテクもないのでよーわからんのですが,
たぶんpopup.el側でメニューの幅とかも計算してくれているはず。
すばらしすぎるでしょ,やっぱ。陳腐な言葉ですまんが,すごすぎ。


ただこれをどう使うのか?
文字列を返す関数を指定すればさそうだけど,どういう関数にするのか?
例えば,各候補にviewっていうtext-propertyもったせておいて,その候補の
viewプロパティを返す関数とかを指定すればいけるかな?
あとで色々試してみるー。
んで,auto-complete.elの方で正式にsummaryプロパティに対応してくれるのを待つ!
マニュアルにはsumamryプロパティのことについて書いてあるので,
そのうち来そうですね。
あとdocumentプロパティについての記述がなくなったのが気になる。

diff --git a/auto-complete.el b/auto-complete.el
index a58e8d5..1e46f30 100644
--- a/auto-complete.el
+++ b/auto-complete.el
@@ -1004,7 +1004,8 @@ You can not use it in source definition like (prefix . `NAME')."
          (face (or (assoc-default 'face source) (assoc-default 'candidate-face source)))
          (selection-face (assoc-default 'selection-face source))
          (cache (and do-cache (assq source ac-candidates-cache)))
-         (candidates (cdr cache)))
+         (candidates (cdr cache))
+         (summary (assoc-default 'summary source)))
     (unless cache
       (setq candidates (save-excursion
                          (cond
@@ -1033,7 +1034,8 @@ You can not use it in source definition like (prefix . `NAME')."
                                                       'symbol symbol
                                                       'document document
                                                       'popup-face face
-                                                      'selection-face selection-face))
+                                                      'selection-face selection-face
+                                                      'summary summary))
                              candidates))
     candidates))
 

auto-completeはやっぱ愛されてるな

どもです。


まずajc-java-completeで返り値の型を表示するためにちょいと調べてた。
んで表示させるための,2013/02/23 (Sat)時点での最新版のpopup.elのdiff。

diff --git a/popup.el b/popup.el
index 7bd3ad8..518972a 100644
--- a/popup.el
+++ b/popup.el
@@ -143,7 +143,9 @@ untouched."
   (loop with tab-width = 4
         for item in list
         for summary = (popup-item-summary item)
-        maximize (string-width (popup-x-to-string item)) into width
+        maximize (string-width (popup-x-to-string
+                                (or (get-text-property 0 'view item)
+                                    item))) into width
         if (stringp summary)
         maximize (+ (string-width summary) 2) into summary-width
         finally return
@@ -436,7 +438,8 @@ usual."
                                 (+ summary-width 2)
                               0))))
          (string (car (popup-substring-by-width string content-width)))
-         (string-width (string-width string))
+         (string-width (string-width (or (get-text-property 0 'view string)
+                                         string)))
          (spacing (max (- popup-width string-width summary-width)
                        (if (> popup-width string-width) 1 0)))
          (truncated-summary
@@ -446,7 +449,7 @@ usual."
       (put-text-property 0 (length truncated-summary)
                          'face summary-face truncated-summary))
     (concat margin-left
-            string
+            (or (get-text-property 0 'view string) string)
             (make-string spacing ? )
             truncated-summary
             symbol


一応表示できるけどpopup.elに手を入れるのはなんか違う気がするので,
確認しただけで元の戻しておいた。
情報源のプロパティにそういう機能が欲しいね。


んで,リポジトリのissuesを眺めていたら色々おもしろいのが見つかった。
やっぱreturn typeを表示してほしいという需要はたくさんありそうだね。
https://github.com/auto-complete/auto-complete/pull/54


あとsourceを切り替えるというようなアイデアもやはり。
https://github.com/auto-complete/auto-complete/pull/198
とか
https://github.com/auto-complete/auto-complete/pull/175


やばい,たのしいかも。


ほいでまた俺しか得しない修正。

(defun my-auto-complete-toggle-source ()
  (interactive)
  (let* ((completing-functions
          (loop for source in ac-sources ;(remove 'ac-source-dictionary ac-sources)
                for candidates-func = (cdr (assoc 'candidates (symbol-value source)))
                for prefix-func = (cdr (assoc 'prefix (symbol-value source)))
                for ac-prefix = (or ac-prefix
                                    (cond
                                     ((stringp prefix-func)
                                      (let ((beg
                                             (save-excursion
                                               (if (re-search-backward prefix-func
                                                                       (line-beginning-position)
                                                                       t)
                                                   (or (match-end 1)
                                                       (match-end 0))
                                                 nil))))
                                        (when beg
                                          (buffer-substring-no-properties
                                           beg (point)))))
                                     ((and (symbolp prefix-func)
                                           (fboundp prefix-func)
                                           (funcall prefix-func))
                                      (buffer-substring-no-properties
                                       (funcall prefix-func)
                                       (point)))
                                     (t
                                      nil)))
                ;; do (message "ac-prefix=%s, source=%s, point=%d, ac-point=%s"
                ;;             ac-prefix (symbol-name source) (point) ac-point)
                when (and candidates-func
                          (symbolp candidates-func)
                          (fboundp candidates-func)
                          (funcall candidates-func))
                collect (intern-soft (replace-regexp-in-string "^ac-source"
                                                               "ac-complete"
                                                               (format "%s" source))))))
    (when completing-functions
      (my-auto-complete-toggle-source-1 completing-functions))))