目次: Linux
自作ARMエミュレータをJavaアプレットにして、ブラウザから実行できるようにしてみました。超暫定につき、とりあえず自宅サーバにのみ置いています。おそらくそのうち消えます。
セキュリティの警告やエラーが出て、アプレットが動かない場合は [コントロールパネル] - [Java] - [セキュリティ] タブ - [高] の設定を [中] にすると動くかもしれません。後で元の設定に戻すことをお忘れなきように…。
速度が遅いとか、GUIがダサいのはさておき、SeaMonkeyで実行すると3回くらいResetボタンを押すとハングします。リロードしても直らないし、どうもメモリリークしているようです。
どうしても動かなくなったら、タスクマネージャからjp2launcher.exeを探してKillした後に、ページをリロードすると再び動きました。
明らかにバグってるので直したいのですが、JDK付属のアプレットビューアだときちんとメモリが解放されるんですよね。差が良くわかりません…。
セキュリティの警告が出ないJavaアプレットを作成するには、シマンテックやジオトラストなどの認証機関からRSAセキュリティ証明書を発行してもらい、アプレットに署名しなければならないようです。
この証明書の維持費が異常に高くて、年数万円はザラです。企業が作成するならまだしも、個人で作成するにはJavaアプレットはコストが掛かりすぎます。
やってらんないぜー。
安全のために、つまり悪意を持った第三者にアプリを書き換えられないように、アプリには信頼できる署名を入れましょう。という理屈はごもっともですが、そのコストを開発者側が負担するのは辛いものがあります。
署名が不要になるように、つまり悪意を持った第三者に書き換えられても安全を保てるように、アプリで使える機能を限定しましょう。とすると、今度は機能が全然足りなくてろくなアプリが作れず、やはり開発者には辛いものがあります。
コストの高い自由な環境orコストの低い不自由な環境、さあ、どっち?という究極の二択です。ま、どっちもイヤですよね。
30年くらい前だと思いますがNeXTの頭が切れる人達は、アプリケーションストアという仕組みを作りました。アプリ審査で悪意のあるアプリを弾き、プラットフォーム側がストレージと秘匿通信を提供することで、今まで開発者側が負担していた安全確保、流通のコストをプラットフォーム側で肩代わりしました。
アプリケーションストアの登場により、開発者は「コストの低い自由」を手にすることができたのです。素敵ですね〜。
アプリケーションストアは、今やスマートフォンにはなくてはならない存在となっています。プラットフォームを作るってのはこういうことなんでしょうね。
目次: 自宅サーバー
今まで、コードのキーワードやコメントの文字色の変更を、手作業でやっていましたが、いつも間違えるし、何より面倒くさくてやってられません。
巷のハイライトライブラリを使って自動化だ!ということで、highlight.js(公式サイトは背景の小豆色が目に厳しい)を導入しました。
公式サイトのUsageリンクの先に説明があります。まずはダウンロードページから、highlight.jsとスタイルシート達をダウンロードします。
ダウンロードの際は、ハイライトしたい言語をチェックする必要があります。メジャーな言語には最初からチェックがついていますが、さらにハイライト対象にしたい言語があれば、追加でチェックを入れてください。
ダウンロードしたzipファイルを展開したら、自身のページに配置します。
以降の説明ではstyles内の *.cssをcss/highlightに置き、*.jsをscripts/highlightに配置した、と思って読んでください。
自身のページに、下記の三行を追加します。
<link rel="stylesheet" type="text/css" href="/css/highlight/vs.css">
<script type="text/javascript" src="/scripts/highlight/highlight.pack.js"></script>
<script type="text/javascript">hljs.initHighlightingOnLoad();</script>
CSSについては1つのテーマごとに1つのCSSファイルが作られていますから、お好きなテーマというかCSSを選んでください。
もちろんdefalut.cssを使っても、例に挙げたvs.css(VisualStudio風の色遣い)のままでも構わないです。この辺りは好き好きでどうぞ。
嬉しかったことは、特に言語を指定しなくても、それなりに推測して色を付けてくれることです。コードが短いと推測を間違うようですが、例え違う言語のハイライトだったとしても読み見やすさは格段にアップします。こりゃ便利です。
残念だったことは、行数表示がないことです。これは開発のポリシーによるもので、あえて実装していないし、するつもりもない(highlight.jsのドキュメントより)らしいので、そういうものだ、と思って諦めます。
目次: 自宅サーバー
以前から調子が悪いなとは思っていたのですが、スマホから3G/LTE回線を使って、このブログにアクセスすると、タイムアウトして一切表示できないことがわかりました。
正確に言うと、トップページだけは表示できますが、過去の日記を表示させようとするとブラウザがダンマリを決め込んで、しまいに「サーバーが応答しない」と言われてエラーになります。
Apacheのアクセスログを見ると「サーバーが応答しない」と言われるときは、そもそもサーバーにリクエストが来ません。これはサーバに来るより前のどこかで止められていると思われます。
まず、スマートフォン側のブラウザ設定、セキュリティソフト、コンテンツフィルタなどを疑いましたが、どのブラウザを使っても、要らないセキュリティソフトを全部アンインストールしても、フィルタの契約を全部解除しても、やはり同じ症状が発生します。
じゃあ違いはURLくらいだろう、ということで、HTTP GETリクエストを飛ばせるアプリ(Ping&DNSを使いました)でリクエストを切り詰めて調べてみると、GETリクエストに ?action=cmdを入れたとき、どのサイトへのアクセスであろうと、問答無用でHTTP通信が遮断される、ということがわかりました。
例えば、
http://www.yahoo.co.jp/?action=cm
というURLにアクセスした場合はヤフーのトップページが表示されますが、
ここでcmをcmdに変えて、
http://www.yahoo.co.jp/?action=cmd
というURLにアクセスすると、するとヤフーのトップページが表示されず1分位経った頃に、ブラウザがタイムアウトの画面を出すはずです。
症状が発生するのは3G/LTE回線のみ、Wi-Fi接続だと症状は発生しない、かつ、奥さんのiPhone 5sでも全く同じ症状が出ることから、恐らくドコモの通信網のどこかで止められていると推測されます。
タイムアウトにはかなり時間が掛かるのと、一度引っかかるとそのサイトには何をしてもしばらくアクセスできなくなります。試されるときはご注意を!
しかし、一体何のために入れたルールなのだろうね…?
スマホから見られない原因がわかりましたので、このブログ側での対策を考えます。
調査から、日記を表示するのか、編集するのか、投稿するのか?など、ブログの動作を指示するための引数arg_action=cmd_xxxxがNGに引っかかっていると思われます。よってarg_action=cmd_xxxxを、全てarg_act=cmd_xxxxに置き換えます。
とは言っても、修正は一行でOKな作りにしていたので、楽勝でした。過去の俺は何を考えてこんな凝った作りにしたんだろうなあ?おかげで楽だったから良いけどさ…。
おいおい、いきなり削ったらデグレするだろ?既存のリンクはどうするんだ?というご心配については、ありがとう、でもほぼ問題ありません!が、答えです。
まず、新たに張っていただいたリンクについては、今までより改善します。つまりPCからもスマートフォンからも見ることができます。
またGoogleさんを始めとする既存のリンクについては、今までと同等です。つまりPCなどからは見られますが、スマートフォンからは見られない状態のままです。
何故かというと理由は2つ。1つ目は、既存のリンクのほぼ全てが「日記を表示」するためのリンクであることです。
2つ目は、ブログの動作にデフォルト値が存在することです。変更後のブログに、変更前のarg_action引数を指定すると単に無視されて、ブログの動作としては、デフォルト値である「日記の表示」が使われます。
なので細かい話をすると、コメント投稿とか、日記編集というリンクを張っていたサイトにとっては、今回の改修によりデグレすることになります。
他人のブログを編集するためのリンクを張るサイトは居ないだろう、という判断ですが、もし該当する方が居ましたら、お手数ですがリンク張りなおしていただければ幸いです。
SeaMonkeyがいきなり2.26から2.29にバージョンアップしたので、長らくアップデートを忘れていたのか?とちょっと焦った…。
ツルゲーネフ「片恋」二葉亭四迷 訳の「死んでも可いわ…」について。
その一節はあるけれど、I love youの訳語ではないので、都市伝説というか、誤解かな。
リンク先(FLAMA技術Blog - 二葉亭四迷は「I love you.」を「死んでもいいわ」と訳していない。)は原著にまで当たっていて大変参考になりました。
メモ: 技術系の話はFacebookから転記しておくことにした。
目次: 車
買ってから2回目となるレガシィの車検です。今回はレガシさんを購入したネクステージ大阪茨木店さんにお願いしました。お値段は大体14万円くらいでした。
そういえばネクステージ大阪茨木店は、スバル専門店だった(少なくともレガシィを買ったときは)のですが、いつのまにかミニバン専門店に様変わりしていました。1社専門だと売れ行きが厳しいのでしょうか?
毎年、夏になるとカーセキュリティが暑さで誤報を発して、近所迷惑極まりないので、車検と同時にカーセキュリティを調整してもらいました。
センサーの位置を変えたそうですが、残念ながらもう暑くないので、調整の成果は来年にならないと確認できません…。
目次: 自宅サーバー
長いこと開発が停滞しているPukiWikiに鞭打って使ってきました(※)が、そろそろ置き換えようかと思います。置き換え候補としてはWikipediaでお馴染みMediaWiki、TWiki、MoinMoin辺りが割と活発なプロジェクトのようです。
(※)と思ってたら、開発が再開して7月に1.5.0がリリースされました。6年ぶり?くらい?
MediaWikiはPukiWikiと同じくPHPで書かれているのは良いのですが、データベースを使うらしく面倒だったので、Python以外に何も要らないMoinMoinを試してみました。環境はApache 2.2 + WSGI + Python 2.7.3です。
MoinMoinのセットアップは初見殺しが多くてわかりづらいです。私は下記の手順で設定しました。とりあえず動きましたが、合ってるのかなあ、これ。
とりあえず使ってみた感想としては、閲覧は速いですが、編集は異様に遅いです。遅すぎてイライラする。これを常用するのは厳しいぞ…。
Pythonで書かれたCGIはライブラリの位置(site-modules)を設定ファイルに書く必要があって面倒です。私の場合、メインのSakuraのサーバと、サブの自宅サーバとで、パスを書き換えねばならず面倒くさいです。
今使っているMercurialのWebフロントエンド(hgwebdir.cgi)もPythonで書かれていて、ライブラリの位置を設定ファイルに書く必要があります。CGIをバージョンアップする度に、設定を上書きして潰してしまいInternal Server Errorに遭遇して、そういえば設定が要るんだった、と思い出します。
Python自体は簡潔で良い言語だと思いますが、CGIになると面倒くさくてイマイチというか…、単に私の管理方法が悪いだけなのか…。とにかく、あまり好きになれません。
目次: Linux
自作ARMエミュレータ上でLinux 3.14.16も起動しました。
実行速度が遅いのは相変わらずですが、ちょっとしたキャッシュを入れたおかげで、従来比2倍くらいになりました。下記はCore2 Quad Q9550での実行結果です。
Connected to the target VM, address: '127.0.0.1:59905', transport: 'socket' Exception: Reset by 'Init.'. loadFile: Z:\arm_cross\linux-3.14.16\arch\arm\boot\Image loadFile: 'Z:\arm_cross\linux-3.14.16\arch\arm\boot\Image' done, 3912512bytes. loadFile: Z:\arm_cross\work\initramfs.gz loadFile: 'Z:\arm_cross\work\initramfs.gz' done, 1113122bytes. UARTFBRD: 0x00000004 UARTIBRD: 0x00000027 UARTLCR_H: 0x00000070 [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 3.14.16+ (katsuhiro@falcon) (gcc version 4.9.1 20140710 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.07) ) #7 Tue Sep 2 00:29:04 JST 2014 [ 0.000000] CPU: ARM926EJ-S [41069260] revision 0 (ARMv5TEJ), cr=00003137 [ 0.000000] CPU: VIVT data cache, VIVT instruction cache [ 0.000000] Machine: ARM-Versatile PB [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Memory policy: Data cache writeback [ 0.000000] On node 0 totalpages: 16384 [ 0.000000] free_area_init_node: node 0, pgdat c03c2c18, node_mem_map c3f7a000 [ 0.000000] Normal zone: 128 pages used for memmap [ 0.000000] Normal zone: 0 pages reserved [ 0.000000] Normal zone: 16384 pages, LIFO batch:3 [ 0.001122] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956969942ns [ 0.007939] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768 [ 0.009354] pcpu-alloc: [0] 0 [ 0.016694] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256 [ 0.017822] Kernel command line: console=ttyAMA0 mem=64M lpj=0 root=/dev/ram init=/bin/sh debug printk.time=1 [ 0.034226] PID hash table entries: 256 (order: -2, 1024 bytes) [ 0.037649] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) [ 0.051346] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) [ 0.171196] Memory: 59872K/65536K available (2809K kernel code, 156K rwdata, 732K rodata, 115K init, 116K bss, 5664K reserved) [ 0.176299] Virtual kernel memory layout: [ 0.176299] vector : 0xffff0000 - 0xffff1000 ( 4 kB) [ 0.176299] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) [ 0.176299] vmalloc : 0xc4800000 - 0xff000000 ( 936 MB) [ 0.176299] lowmem : 0xc0000000 - 0xc4000000 ( 64 MB) [ 0.176299] modules : 0xbf000000 - 0xc0000000 ( 16 MB) [ 0.176299] .text : 0xc0008000 - 0xc037d840 (3543 kB) [ 0.176299] .init : 0xc037e000 - 0xc039ac8c ( 116 kB) [ 0.176299] .data : 0xc039c000 - 0xc03c3340 ( 157 kB) [ 0.176299] .bss : 0xc03c3340 - 0xc03e0694 ( 117 kB) [ 0.194996] NR_IRQS:224 [ 0.311103] VIC @f1140000: id 0x00041190, vendor 0x41 [ 0.334340] FPGA IRQ chip 0 "SIC" @ f1003000, 13 irqs, parent IRQ: 63 [ 0.421699] Console: colour dummy device 80x30 [ 0.426511] Calibrating delay loop... 15.18 BogoMIPS (lpj=75904) [ 1.453855] pid_max: default: 32768 minimum: 301 [ 1.470559] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 1.471997] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 1.549273] CPU: Testing write buffer coherency: ok [ 1.567848] Setting up static identity map for 0x802ac900 - 0x802ac958 [ 1.792641] VFP support v0.3: no double precision support [ 1.826380] NET: Registered protocol family 16 [ 1.913054] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 2.222332] Serial: AMBA PL011 UART driver [ 2.232115] dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 44, base_baud = 0) is a PL011 rev1 [ 2.471302] console [ttyAMA0] enabled [ 2.506242] dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 45, base_baud = 0) is a PL011 rev1 [ 2.542220] dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 46, base_baud = 0) is a PL011 rev1 [ 2.580195] fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 70, base_baud = 0) is a PL011 rev1 [ 3.207538] bio: create slab <bio-0> at 0 [ 3.444611] Switched to clocksource timer3 [ 4.365563] NET: Registered protocol family 2 [ 4.453045] TCP established hash table entries: 1024 (order: 0, 4096 bytes) [ 4.465491] TCP bind hash table entries: 1024 (order: 0, 4096 bytes) [ 4.474190] TCP: Hash tables configured (established 1024 bind 1024) [ 4.482792] TCP: reno registered [ 4.485464] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 4.493590] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 4.522323] NET: Registered protocol family 1 [ 4.552290] RPC: Registered named UNIX socket transport module. [ 4.555861] RPC: Registered udp transport module. [ 4.559377] RPC: Registered tcp transport module. [ 4.562420] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 4.599499] Trying to unpack rootfs image as initramfs... [ 41.046708] Freeing initrd memory: 1084K (c0800000 - c090f000) [ 41.069328] NetWinder Floating Point Emulator V0.97 (double precision) [ 41.141637] futex hash table entries: 256 (order: -1, 3072 bytes) [ 41.206487] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 41.221841] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc. [ 41.248434] ROMFS MTD (C) 2007 Red Hat, Inc. [ 41.252843] msgmni has been set to 119 [ 41.288910] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) [ 41.292702] io scheduler noop registered [ 41.294993] io scheduler deadline registered [ 41.299488] io scheduler cfq registered (default) [ 42.651584] brd: module loaded [ 42.698604] physmap platform flash device: 04000000 at 34000000 [ 42.799677] physmap-flash physmap-flash.0: map_probe failed [ 42.938847] smc91x: not found (-19). [ 42.980983] mousedev: PS/2 mouse device common for all mice [ 43.023922] ledtrig-cpu: registered to indicate activity on CPUs [ 43.175215] TCP: cubic registered [ 43.177334] NET: Registered protocol family 17 UARTIFLS: 0x00000012 UARTFBRD: 0x00000000 UARTIBRD: 0x00000001 UARTLCR_H: 0x00000000 UARTFBRD: 0x00000000 UARTIBRD: 0x00000000 UARTLCR_H: 0x00000070 UARTFBRD: 0x00000004 UARTIBRD: 0x00000027 UARTLCR_H: 0x00000070 [ 43.361101] Freeing unused kernel memory: 112K (c037e000 - c039a000) hello, world!! /bin/sh: can't access tty; job control turned off UARTFBRD: 0x00000004 UARTIBRD: 0x00000027 UARTLCR_H: 0x00000070 / #
実行速度が速いと時間当たりの試行回数を増やせて、デバッグ効率が良くなるので、実行速度って結構、大事だったりします。
以前、ハングしていた箇所はPL110 Color LCDドライバでした。今のところカーネルコンフィグを変え、PL110ドライバをコンパイル対象から外すことで、ハングを回避しています。
それだけで1週間掛かっちゃう?って思った方はスルドイです…。本当のところを言うと「ハングはイケてないぜ、直すぜー!」と思ってPL110のLinuxドライバのコードを見ていましたが、どう直したもんかわからず、諦めたのです…。
なぜかPL110のドライバはPL110とPL111(次世代コア)のレジスタアドレスが両方書いてあって、どちらのコア用の制御なのかがわかりませんでした。一応、どちらの仕様書も持っていますから、最悪、両方作って試せば良いのですけど、さすがに面倒すぎる…。
おそらく私が何か勘違いしているだけの可能性大なのと、LCDのエミュレーションはまだやるつもりがないので、この件は頭の隅で細々と考えることにします。
< | 2014 | > | ||||
<< | < | 09 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | - | - | - | - |
合計:
本日: