Panasonic CF-R2 のLCDバックライトの輝度調整ウィジェット、というのを以前作った。当時は「動けば良い」ということで余り難しいことは考えなかったのだが、重大な問題が存在していた。

 

それは、

 

  • 直接 /sys/class/backlight を触るのでパーミッションに引っかかる。
  • スライダーの表示がTOPLEVELウィンドウだったので、他のアプリケーションウインドウに隠れる場合があり、動作が不自然である。

 

前者は、例えばPuppyLinuxのように常時ルートで使うような場合は問題ない。Slitazの場合はユーザーログインする前に起動することで回避していた。debianではそんな安易なことはできないようで、別途方策が必要らしい。幸い、一度起動してしまえばセッション終了までそのままなので、とりあえずsudoで起動して使うことにした。

 

後者は、表示位置等で何も考えなくて良いので従来はTOPLEVELに逃げていた。Gtk2では他にポップアップが用意されているのでこちらを用いるのが本当。但し、表示位置等はプログラム側で正しく設定しなくてはならない。

 

変更点

  1. ウィジェット作成時の gtk_window_new () の引数をGTK_WINDOW_POPUPにする。
  2. ポップアップの場合、表示状況をプログラム側で管理しなくてはならないのでフラグを用意する。
  3. ウィジェットの表示位置を確定するため、ステータスアイコンの大きさ、表示位置等を取得する。gtk_status_icon_get_geometry ()
  4. ウィジェットのウィンドウサイズを取得する。gtk_window_get_size ()

 

後はこれらで得られた情報から、ウィジェットの表示位置や大きさ、方向を決めれば良い。

 

ひとつ問題があって、 gtk_status_icon_get_geometry ではGdkScreenも同時に得られるのだけれど、複数のディスプレイを接続していると、それらを合成したスクリーンサイズを返してくる。

 

例えば ノートPC本体のLCDパネルが1280x800で外部モニタが1280x1024だと、2560x1024が返される。

 

ステータスアイコンが本体側に表示されていると、LCDパネルの高さが正しく取得できないことになる。

 

但し、今回はCF-R2で使うだけであり、これに外部モニタを繋ぐことは考えられない(専用の接続ケーブルが必要)から実用上支障ない。
 
コード(部分)

lcdslidebarが別途作成済のウィジェット(スライダを載せたウィンドウ)

static gboolean activate_cb (GtkStatusIcon *icon,
                                        gpointer user_data)

{

        // 中略

 

        if (shown == TRUE) {
            gtk_widget_hide_all(lcdslidebar);
            shown = FALSE;
        }
        else {
            gtk_status_icon_get_geometry (icon,
                                            &gs,
                                            &area,
                                            &orient);
            gtk_window_get_size (lcdslidebar,
                                    &winwidth, &winheight);
            if (orient == GTK_ORIENTATION_HORIZONTAL) {
                /* パネルが水平に配置されているので、スライダは垂直 */
                if (area.y+area.height+winheight >= gdk_screen_get_height(gs)) {
                    /* スライダが画面外に溢れる場合は、アイコンの直上に向ける */
                    gtk_window_move (lcdslidebar,
                                    area.x,
                                    area.y - winheight);
                }
                else {
                    gtk_window_move (lcdslidebar,
                                    area.x,
                                    area.y + area.height);
                }
            }
            gtk_widget_show_all(lcdslidebar);
            shown = TRUE;
        }

       

        // 中略

        return FALSE;

}

 

 

ステータスアイコンを表示するパネルを、画面上端或いは下端に配置して使うことを前提にしている。左右に配置した場合はスライダを横倒しにしなくてはならず、ウィジェットは動的に生成したほうが良いのかも知れない。

 

動作テスト(但しハードはCF-R2ではない)

倹約が習慣になってきたようで、以前に比べて口座から引き出す回数が減った。勿論、1回につき降ろす金額は変わっていない。


が、今週末は金曜日にその引出作業を行ったので、手元に現金があった。まあ、出金の予定もあったから良いのだけれど、やはりあればあったで使ってしまうのが人の性(さが)ってもんです。

で、無駄使いしたのは
・食料品の買い出し(土曜日に済ませたのに、日曜日にも買い足した)
・SFの単行本
・120のカラーネガ(ポジが残っているのだが、やはりネガのほうが扱いやすいので)

食料品については別に無駄になるものは買っていないのだが、スーパーに行けば必ず缶ビールとか甘いものとか買ってしまうので。

SFは、最近は目がすっかり遠くなって読書が辛いので暫く遠ざかっていたのだが、久しぶりに新宿の紀伊國屋書店を覗いた(何か1フロア減ったような気がしたのだが、気のせいか?)ことで、つい1冊買ってしまった。数年前に発表された典型的なハードSF3部作のうちの2作目で、作家が独自に構築した物理法則に基づいて書かれているから理解するのに骨が折れるというシロモノ。ここまで書けば私が何を買ってきたか、SF好きな人ならすぐに判るでしょう。まあ、難解な分だけ「長持ちする本」ではあるのだが。

カラーネガはですね、例年この時期は黄葉を撮っているのでどうしても必要なのだけれど、手持ちが2本しかなかったので。手持ちが乏しいので今年は冷蔵庫に残っている期限切れのポジを費消するつもりでした... が、気づいたらGW690IIIにはネガを詰めていたのですよ。これでまたポジの出番が先送りになってしまった訳だ。どうしたもんかね。
で、撮影済の2本を出そうとしたら、現像のみで七百七十数円、とか宣うのですね。すかさず値切りに掛かったらコダックが五百数十円だというのでそっちにしてもらった。ポジなら富士のラボ一択(ところで所謂プロラボってまだあるのか?)だが、ネガだったら最初からコダックのラボを薦めたまえ、ヨドバシカメラよ。
その後、不足のカラーネガを買ったのだが、フィルム売り場のレジ上に「入荷しました、おひとりさま5箱まで」と添え書きされたACROS(120)が置かれていた... これも買おうか一瞬迷ったのだけれど、部屋の冷蔵庫には3箱残っているのを思い出して買わずに帰りました。

なお、この店では在庫限りで終了らしいです、ってメーカーで払底するのだからどの店でも同じか。


まあ、何時までも旧いことやっていても仕方ない。ACROSの後釜を考えなくてはなるまい。

 

webkit + gtk + lua で構成されたウェブブラウザ。以前も少し弄ったことがあるのだが、操作がGUIで無くて使いにくく、それっきりになっていた。

テストしたOSはLinuxMint18.3である。以下に書いたように一度リポジトリにある版をインストールしてからアンインストールし、最新版を自分でビルドしてインストールしたため設定が錯綜している可能性がある。

リポジトリにあるのはオリジナル版らしい。webkitのバージョンが旧くセキュリティ面で問題があるとか。試しにインストールして動かしたところ、Yahoo!Japanの最初のページが質素になってしまった。(サポート外のブラウザでアクセスするとこうなる)。
リポジトリ版を削除し、最新版のソースを取得して自分でビルドしたところ正常に表示されるようになった。ビルドに必要なライブラリは全てLinuxMint(というかUbuntuもしくはdebian)のリポジトリにあるので、luakitも最新版にして欲しい。

ビルド手順はソースに含まれているREADME.mdに書かれている。依存するライブラリは、次の通り。

## Requirements

* GTK+ 3
* Lua 5.1 or LuaJIT 2
* lfs (lua file system)
* webkit2gtk
* sqlite3

automake系ではないので、ビルド時は勿論インストール時にも make の引数に PREFIX=が必要なことに注意。

archlinuxのwikiには詳しい設定方法が書かれているが、この記事を書いている時点で旧くなっているのでそのままでは参考にならない。ソースに含まれているREADME.mdを読むこと。

取り敢えずの設定
adblock
$HOME/.local/share/luakit/adblock/ に easylist.txtを設置する。

検索エンジン
/usr/share/luakit/lib/window.lua に書かれている。デフォルトはgoogleなので、そのまま使っている。

ダウンロード先
/usr/share/luakit/lib/downloads.lua XDGの設定に従う。無ければ $HOME/downloadsというディレクトリが使われる。

主なコマンド
GUIではなく、キーボード上のキーを押下することで実行される。引数が必要なコマンドは画面最下部にコマンドラインが表示される。

URLを指定, 検索エンジンによる検索
o

表示されたページ上での語句の検索
/
その移動
ctrl-j あるいは ctrl-k

新しいタブを開く
ctrl-t

タブを閉じる
ctrl-w

ページの再読み込み
r

画面のスクロール
矢印キー及びPgUp, PgDn 他にもある

入力エレメントへのフォーカス
f
押下後、エレメント毎に番号が付されるので続けて押下することでフォーカスを移動する。
g i
先頭のエレメントにフォーカスする。TABキーあるいはshift-TAB押下で前後のエレメントに遷移する。

ブックマーク
shift-b ブックマーク登録
g b ブックマーク一覧

カレントタブ上の閲覧履歴の移動
shift+h あるいは shift+l

luakitを終わる
ZZ 大文字を入力することに注意。


参考URL
Luakit Web Browser
https://luakit.github.io/

Luakit - ArchWiki
https://wiki.archlinux.jp/index.php/Luakit

今日の19時のニュースで、日本でフェイスブックのアカウント情報が元と見られる脅迫メールが出回っている、というのがあった。

 

で、それと思しきものが今朝、俺のところにも届いたのですね。

 

当該するアカウントは昔何かの連絡用に止むを得ず作った捨てアカである。ちゃんと退会手続きを踏んだ覚えがあるのだが、アカウント情報はそのまま残っていたんだろう。

 

試しにログインしようとするとこうなる。

 

 

乗っ取られてパスワードを改変されていたら「パスワードが違います」とか言ってくれるのだろうか。

まあ、どうでもいいや。

 

思いつきで H8/300H の gcc をアップデートすることにした。

 

今までは、ネットを漁って得た情報を元に構築した 4.4.6 を使っていた。これは32ビット環境のLinuxであれば問題なく構築できたのだけれど、64ビット環境に移行してからはどうしてもビルドを通すことが出来なかった。未だに原因が良くわからない。仕方ないので64ビット環境上のVirtualBoxで32ビット環境を動かし、ディレクトリ共有とSSHで繋いで使っていた。手間はかかるがこれはこれで面白みもあるのでそのまま使っていたのだった。

今更のアップデートに至ったのは、ネット検索で久しぶりにgcc for H8/300Hに関するネタが引っかかってきたからで、ああ、まだやっている人も居るんだなあ、と感じたからである。

 

構築したバージョン

 

gcc 5.4.0

何故、このバージョンなのかというと、実行環境であるLinuxMint18.3のコンパイラがこれだから、である。gccのビルドにはgmp等の依存ライブラリも用意する必要があるが、バージョンを合わせたことでリポジトリにあるdevファイルをそのまま流用でき、ひと手間省いている。
尚、従来はhmsだったけれど廃止になったらしいので、elf一択である。最終的に得るのは絶対番地のmotファイルなので、途中の形式は何でも構わない。gdbとかの既製のデバッガを使いたいなら別だけれど。

 

Binutils 2.26.1

これもLinuxMint18.3のものとバージョンを合わせている。

 

newlib 2.4.0

実は使った試しがなかったりするのだが、一応用意することにした。バージョンはgcc 5.4.0がリリースされた時期を目安に選んだ。

 

ソースの入手先

http://ftp.gnu.org/gnu/binutils/
http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/
https://sourceware.org/newlib/

 

手順

1) tarballをダウンロードして任意のディレクトリに展開する。
2) 設置ディレクトリを決める。通常は/usr/localなのだが、失敗した時の取り外しが煩わしいので $HOME/.localを使うことにした。
3) ライブラリ(newlib)の構築にh8300-elfを使うので、パスを調整しておく。
   export PATH=$HOME/.local/h8300-elf/bin:$PATH
4) binutilsのビルド
   cd binutils-2.26.1
   ../configure --prefix=$HOME/.local/h8300-elf --target=h8300-elf --with-gmp=/usr --with-mpfr=/usr --with-mpc=/usr --disable-nls
   make -j2
   make install
   cd ../../
5) gccのビルド
   cd gcc-5.4.0
   mkdir build
   cd build
   ../configure --prefix=$HOME/.local/h8300-elf --target=h8300-elf --with-gmp=/usr --with-mpfr=/usr --with-mpc=/usr --with-newlib --with-headers=../../newlib-2.4.0/newlib/libc/include --enable-languages=c --enable-long-long --disable-shared --disable-libada --disable-libssp --disable-nls --enable-obsolete MAKEINFO=missing
   cd ../../
6) newlibのビルド
   cd newlib-2.4.0
   mkdir build
   cd build
   ../configure --prefix=$HOME/.local/h8300-elf --target=h8300-elf --enable-multilib
   make
   make install
 

リンカスクリプトの改変

.text.startup という書いた覚えのないセグメント (gnu as ではセクションと呼ぶらしい)が出現し、これが .rodataと重なるとかでプログラムをリンクできなかった。
.refファイルを確認したところ.text.startupは main関数そのものだった。デフォルトのスタートアップファイルを抑止しても出現するようだ(但し、ROM化する際のスタートアップルーチンは自分で書くのでデフォルトとの比較はしていない)。
従来のスクリプトでは .text 以降に配置されるものには番地を明示していた(.text + SIZEOF(.text)等)ので、.text.startupが挟まっても正しく反映されなかったのがリンクに失敗した原因。明示していた部分を省略したところリンクできるようになった。

 

生成されたバイナリのサイズは旧バージョンより僅かに小さくなった。但し、実際に動かしていないので正常にコンパイルされているかどうかは解らない。

 

そもそも空いている H8/300Hボードが無いのですよ。

 

 

参考URL

H8/300開発環境の構築
https://www.soramimi.jp/h8300gcc/index.html

なんとなく活動記録。H8用のGCCでskipping imcompatible lc が出る場合
http://blueeyes.sakura.ne.jp/2018/10/11/1631/



気圧の変化の様子。ここ和光市に最接近したのは午前2時頃のようだ。



雲の様子。気象庁のホームページより。

10月1日から都合により暫く休止するらしい。再開は10月半ばの予定らしい。

イランの日本語放送も終わってしまった(※)し、ひょっとしたらこのまま停波するのか?


※終わったのは日本語だけではなかったらしい。


Search

Calendar

S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< November 2018 >>

Archive

Mobile

qrcode

Selected Entry

Link

Profile

Search

Other

Powered

無料ブログ作成サービス JUGEM