本を読む

読書やコンピュータなどに関するメモ

Ubuntu UnityのAlt-Tabに「デスクトップの表示」が含まれないようにする

 自分用メモ。

 UbuntuのUnity UIでは、Alt-Tabでアプリを切り替えるときに、「デスクトップの表示」(全ウィンドウを最小化する)も含まれる。誤ってこれを選ぶと、元に戻すのに少し手間がかかってしまう。どうせCtrl-Super-Dで同じことができるので、「デスクトップの表示」を含まないように設定を変更したい。

 Unity Tweak Toolで設定できるけど、Unity Tweak Toolをインストールしなくても、dconfを直接いじって設定できた。

$ dconf write /org/compiz/profiles/unity/plugins/unityshell/disable-show-desktop true

 Ubuntu 15.10とUbuntu 14.04 LTSで確認。

情報を“聴く”のに使っているAndroidアプリ

 最近、電車やバスなどに乗っているときに、スマートフォンから音声で情報を聴くようになりました。主に、本やスマートフォンを見続けて目が疲れるのを防ぐためです。また、公園をウォーキングするときなどにも聴いています。

 ひとまず現時点で私が情報を聴くのに使っているスマホアプリをまとめておきます。いろいろなアプリを比較して選んだわけではなく、よさそうなものをインストールして今のところ便利に使っているというところです。

 なお、私はAndroidユーザーなので、以下すべてAndroidアプリです(iOS版があるものもあります)。また、どこでも聴けるように、オフラインで聴くもの縛りで選んでいます。

ポッドキャストを聴く:Pocket Casts

Google play Pocket Casts
Pocket Casts
制作: Shifty Jelly
評価: 4.6 / 5段階中
価格: ¥399 (2016/1/10 時点)
posted by: AndroidHTML v3.1

 ポッドキャストはPocket Castsで聴いています。最近のバージョンでは番組ごとに再生スピードなどの設定が持てるようになっているので、たとえば「音質のいい日本語番組は3.0倍速で、そうでない日本語番組は2.6倍で、英語番組は等速で」といった聴き方ができます。また、複数端末の同期機能などもあります。なお、有償アプリです。

音声ファイルの番組を聴く:Audipo

Google play Audipo (音楽プレーヤー 倍速再生 耳コピ リスニング
Audipo (音楽プレーヤー 倍速再生 耳コピ リスニング
制作: Lapis Apps
評価: 4.4 / 5段階中
価格: 無料 (2016/1/10 時点)
posted by: AndroidHTML v3.1

 ポッドキャストの過去回など、音声ファイルで用意された番組には、Audipoを使っています。最大の特徴は、何行にもわたるシークバーで、この長さを使って任意の場所にジャンプしやすくなっています。もちろん、再生速度もいろいろ選べます。

“あとで読む”した記事を聴く:Pocket + TTS

Google play Pocket
Pocket
制作: Read It Later
評価: 4.5 / 5段階中
価格: 無料 (2016/1/10 時点)
posted by: AndroidHTML v3.1

 “あとで読む”アプリの定番であるPocketは、私も愛用しています。このPocketには「聞く(TTS)」という機能があり、テキストを音声で読み上げてくれます。読み上げに向いたエントリーは限られますが、耳で聴くのも便利なものです。

そのほかのテキストを聴く:Fadosh

Google play Fadosh
Fadosh
制作: IItel Soft
評価: 3.9 / 5段階中
価格: 無料 (2016/1/10 時点)
posted by: AndroidHTML v3.1

 メールマガジンなど、Pocketに入れられないテキストもあります。また、Pocketに入れてもうまく記事ビューにならないエントリーもあります。そうしたものは、いちどテキストファイルにしてから、Fadoshで読み上げて聴いています。もともと青空文庫向けなので、青空文庫フォーマットのテキストを食わせられます。読み上げ時に、正規表現で読み方を指定する機能などもあります(この機能はまだ使ったことはありませんが)。

cowsayのマルチバイト対応パッチがDebian・Ubutuに採用された

 cowsayというのは、端末上でアスキーアートの牛さん(またはほかのキャラクター)にフキダシでしゃべらせるコマンドです。

$ cowsay Hello
 _______
< Hello >
 -------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

 ただ、マルチバイト文字をしゃべらせると、文字のサイズとフキダシのサイズが合わなくなるという問題がありました。よくある、文字列のバイト数=端末のカラム幅と仮定していることが原因なわけですが。

 Google Plusでその話が出ていたので簡単なパッチを書いたところ、Kenichiro MATOHARAさんがDeibanのBTS(bug tracking system)に報告してくれて、採用されました。

 Debianの次期バージョンDebian stretchのcowsayと、Ubuntuの次期バージョンUbuntu 16.04 LTSのcowsayにはすでに入っているようです。

$ cowsay めでたしめでたし
 __________________
< めでたしめでたし >
 ------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

 ちなみにそのパッチはこれ(↓)。基本的にlength()をText::CharWidthのmbswidth()に置きかえているだけです。Text::CharWidth(Debianパッケージではlibtext-charwidth-perl)は、debconf-i18nも利用しているパッケージなので、入っていることが多いと思います。

bashは環境変数をどう管理しているか

 質問自体は識者の方々が答えているので略として、bashが環境変数をどう管理しているかについて私がコメントした内容を改めてまとめておきます。

  • bashは起動時に、環境変数の内容から、グローバル変数shell_variablesで指すハッシュ表を作る
  • 以後はシ‌​ェル変数(環境変数を含む)はそのハッシュ表で管理する
  • exportを実行すると、そのハッシュ表のエントリーにatt_exported属性が付く
  • それと並行して、グローバル変数export_e‌​nvが管理されている
  • 外部コマンドの実行時などに、export_envの内容が、shell_variablesをもとに更新される
  • execveシステムコールには、このexport_envが渡さ‌れる

試す

 「Big Sky :: 別のプロセスの動的な環境変数を盗み取る」のスクリプトを、bashに特化してちょっと変更して、試してみます。基本的には対象をexport_envに変えただけです(あとヒアドキュメントのクォートと、/bin/sh対応)。

#!/bin/sh
if [ "x$2" = "x" ]; then
  GREP=cat
else
  GREP="grep ^$2="
fi

gdb -q --silent -p $1 <<'EOF' | grep XXXXXXX | cut -c9- | $GREP
set $i=0
while (1)
  set $r=*((char**)export_env+$i)
  if ($r == 0)
    loop_break
  end
  printf "\nXXXXXXX %s\n", $r
  set $i++
end
EOF

 まずexportを実行しただけの状態でスクリプトを実行しても、何も表示されません。

bashは環境変数をどう管理しているか:実験1

 なにか外部コマンドを実行した後でスクリプトを実行すると、環境変数が表示されます。

bashは環境変数をどう管理しているか:実験2

Pushbulletをアンインストール

 自分の所有する、スマホ←→スマホや、スマホ←→PC、PC←→PCで、リンクやデータを送るのに、Pushbulletを愛用していました。

 で、なんかソーシャル機能を強化したらしいという話を聞き流しつつAndroidアプリをアップデートし、半日ぐらいたってからAndroidからPCにリンクを送ろうとしたら、こんなことに。

 以前は最初の画面で自分のデバイスを選んで通知を送れたのですが、最新版ではなぜか友人のリストが表示されています。で、自分のデバイスに送るには、いちど「Me」をタップして次の画面から送る必要があります。

 いやー、クリップボードを端末間で共有するようなツールで、友達との共有を優先するのってどうなんでしょうか。

 というわけで私は、Pushbulletのアプリやブラウザ拡張をアンインストールして、アカウントを削除しました。

追記2015.7.5:アップデートの2〜3日後に再アップデートがあって、友達リストと同じ画面に自分のデバイスが一覧表示されるようになったとのこと。私はアンインストールしてしまったので確認していませんが。

第117回カーネル読書会でMSのOSS話を聞いた

 第117回カーネル読書会に行ってきました。お題は日本マイクロソフトの井上章さんによる「Beyond Openness of the "Death Star"」。レッドハットを会場にしたカーネル読書会で、MSの人がMSについて、Macbookでプレゼンするという、不思議な組み合わせでした。

 内容は、Build 2015で出たあたりを中心に、MSのクロスプラットフォームやOSSへのシフトについての話でした。なぜか“あの”荒井さんも参加者として来ていて、本編後にCoreCLRあたりの話をいろいろ聞かせていただきました。

 以下、メモ。

  • Build 2015
    • .NET CoreがOSSに。LinuxやMacをサポート
    • 新コンパイラRoslynをOSSで
    • GitHubにリポジトリ
      • 日本エンジニアからのプルリクも
  • Q: contributer agreementは
    • A: agreeすれば受け入れる
  • Q: Issueは受け付けるがコードは自分たちだけで書く、という会社もある。OracleとかGoogleとか。コードがそのまま採用されることはある?
    • A: ある。もちろん検証のうえで
  • Visual StudioにOSSツールをとりいれる
    • Google Chromeもw
      • Ripple Emulatorのため
    • Yeoman
  • いままでのMicrosoftは自社製品で閉じていた
    • これからは自社以外のものもとりこむ
  • Docker
    • パートナーシップ
    • Azure
    • 次期Windows ServerでDocker Engineをサポート
    • Visual StudioからDockerデプロイ
  • Visual Studio Code
    • クラスプラットフォームなコードエディタ
    • 30言語をサポート
  • デモ
    • Mac上で
    • ASP.NETのプロジェクトを作る
      • yo aspnet
    • dnvmでランタイムを確認
    • VS Code:node等のデバッガも
  • Q: .NET Coreと.NET Framework 4のAPIの互換性
    • A: .NET Coreはサブセット
  • Q: dnvmでインストールされるCoreCLRやdnu restoreでインストールされるライブラリなどのLinuxバイナリは、Windows版と同時にNuGetギャラリーに登録されるか
    • A: はい
  • デモ続き
    • VS Codeからgitの操作
    • GitHubにpush
    • Ubuntuでpullしてdnu restore
    • Azure上のUbuntuにログイン
      • Docker Engineが動いている
      • asp.netアプリをDockerコンテナーで動かす
      • 複数同時に動いた

Rubyで連結リスト

 これを見て、Rubyに連結リスト(Linked List)が標準添付ライブラリであったりしないかなと思って調べたら、Rakeの中にRake::LinkedListクラスがあった。自分で作っても大した手間ではないけど、それはさておき、試してみる。

 まずrequireで読み込む。

require 'rake/linked_list'

 クラス名が長いので、ここでは別名をつけてみる。

Cons = Rake::LinkedList

 リストを作る。以下の3とおりの書き方ができる。3つ目の書き方がいちばんシンプルだけど、内部では一度Arrayが作られてしまう。

list = Cons.new(1, Cons.new(2, Cons.new(3)))        # Lisp的に
list = Cons::EMPTY.conj(3).conj(2).conj(1)          # メソッドチェーンで
list = Cons.make(1, 2, 3)

 さて、リストの操作。headとtailが、carとcdrに相当する。to_sやinspectが定義されているので、リストをそのまま表示できる。

p list              #-> LL(1, 2, 3)
p list.head         #-> 1
p list.tail         #-> LL(2, 3)

 Enumerableをmixinしているので、mapとかそういうメソッドも使える。ただし、結果はArrayになる。

p list.map {|x| x * 2 }     #-> [2, 4, 6]

«  | HOME |  »

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad