1. トップページ
  2. コンピューター・Web関連

mawkとgawkのsubstr()の動作の違い

2020年06月14日

現在w3mplusという、w3mの拡張機能を誰得開発しているのだが、その中で面白いバグをみつけた。普段の開発環境はDebian GNU/Linuxなのだが、プログラムをUbuntuへ移動させると何故か動作しない。色々調べてわかったのだが、awkの処理系が違うことによる、substr()の動作の差異だった。Debian GNU/Linuxはmawk 1.3.3、Ubuntuはgawk 4.1.4である。

$ echo 'abcd' | mawk -- '{ print substr($0, 0, 3) }'
ab
$ echo 'abcd' | gawk -- '{ print substr($0, 0, 3) }'
abc

そもそもsubstr()の第2引数に0を指定している時点で間違いなのだが、動作の差異も相まって解決まで時間がかかってしまった。

POSIX Utilities内でプログラムを書いていれば一貫した動作が保証されると思っていたが、意外なところに罠があるものだね。それにしてもPOSIX的にはどちらの動作正しいのだろう。

youtube-dlで動画のダウンロードが完了するまで繰り返しアクセスする

2020年06月14日

youtube-dlは多くの動画共有サイトから動画をダウンロードできる便利なソフトウェアである。特に低速回線や常時接続ではない環境ではお世話になることも多い。

youtube-dlの一つ残念なところとして、SSLのコネクションやWebページのダウンロード中にタイムアウトするとプログラムがそのまま終了してしまうのである。タイムアウトが発生しやすい低速回線では大きな問題だ。

なのでダウンロードが完了するまでループするプログラムを書いた(といっても高々数行だが…)。~/.bashrcにでも記述しておくのが良いであろう。

youtube-dl() (
        until command youtube-dl ${@+"${@}"}; do
                sleep 1
        done
)

このプログラムだと指定されたURLの動画が削除された場合でも、無限にアクセスを重ねてしまうため気をつけてほしい。

ちなみに当方の~/.config/youtube-dl/configの設定は以下のようになっている。

--ignore-errors
--retries 100
--output "~/Videos/%(upload_date)s_%(extractor)s_%(uploader_id)s_%(id)s.%(ext)s"
--continue
--console-title
--format "worstvideo+worstaudio/worst"
--merge-output-format mkv

Newsweek JapanのRSS

2020年04月17日

最近FeedリーダにNewsboatを利用しているのだが、何故かNewsweek JapanのRSSだけ更新されない。

色々と調べてみるとRSSファイルへのアクセスをUser Agentごと振り分けているようで、特定の文字列を含むUser Agentでアクセスすると、HTMLファイルが返るという、他では見られないとても素敵な仕様のようだ。

wget --user-agent='Android' 'https://www.newsweekjapan.jp/story/rss.xml' -O -

試しに以上の様にWgetを実行すると、HTMLが帰ってくる。

暫定的な対策としては、~/.newsboat/configuser-agentを以下のように変更すればよい。

user-agent "Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0"

Puppy Linux(おぺらっぴぃ)の高速化設定

2015年03月10日

久々にPuppy Linux(おぺらっぴぃ)を再インストールしたので高速化するための設定をメモしておく。

仮想コンソールを無効

/etc/inittabを以下のように変更。

::sysinit:/etc/rc.d/rc.sysinit
tty1::respawn:/sbin/getty -n -l /bin/autologinroot 38400 tty1
#tty2::respawn:/sbin/getty 38400 tty2
#tty3::respawn:/sbin/getty 38400 tty3
::ctrlaltdel:/sbin/reboot

Grub4Dosのブートメニューを無効

/menu.lstを以下のように変更

timeout 0
default 0
hiddenmenu

シャットダウン時に電源が自動的に切れるようにする

/menu.lstを以下のように変更

kernel /boot/vmlinuz root=/dev/sda2 ro acpi=force

Webブラウザーの優先度をあげる

/usr/local/bin/defaultbrowserを以下のように変更

#!/bin/sh
exec nice -n -20 opera "$@"

シャットダウン時にCDを取り出さない

メニュー>セットアップ>個人保存ファイルの設定で「シャットダウン時にCDを取り出す」のチェックを外す

Flash Playerをインストールする

メニュー>インターネット>GetFlashからFlash Player 10.3.183.90をダウンロードする。

Xorgウィザードで24bitカラー以上を選択する。

デスクトップの背景画像を無効

/root/Choices/ROX-Filer/PuppyPinを以下のように変更

<!--<backdrop style="Scaled">/usr/share/backgrounds/default-431JP.jpg</backdrop>-->

おぺらっぴぃは素晴らしい

2014年02月19日

Puppy Linux 431JP2012に最新版Operaを乗せたおぺらっぴぃは素晴らしい。Linuxディストリビューションは星の数ほど存在するのだが、128MBのRAMでもLinuxディストリビューションは数えるほど少ない。128MBのRAMで動作する様々なLinuxディストリビューションを試したのだが、どれも一長一短で納得いくものには出会えなかった。

一番最初に試したのがPuppy Linux Precise-550JPで、起動するにはするのだがWebブラウザーの動作がどうにもゆっくりしている。Webブラウザーの中では軽量で高速と言われるMidoriを使用してもまだ遅く感じる。

次に試したのがDamn small Linux 4.4 日本語版(通称DSL)なのだが、これが非常に早い上にメモリー消費量が恐ろしいほど少ない。Webブラウジングを行う上でもMozilla Firefox 2.0がデフォルトで入っており一応問題ないのだが、気になるのは2008年11月18日にリリースされた 4.4.10 以降5年弱バージョンアップされていないことだ。Linuxカーネルもサポートが終了した2.4系のためセキュリティー上の不安は大いにある。2012年09月26日に久々の更新があり、dsl-4.11.rc2がリリースされたのだが、こちらはまだ日本語化されていない。

それとWebブラウザーMozilla Firefox 2.0ということもあり、最新のCSSなどに対応できず、レイアウトが崩れるWebページが多くあった。これに関してはDSLにOperaかMidoriの最新版をインストールしようとしたのだが、これがまた一苦労なのだ。APTから最新版をインストールすることはできないため、ソースコードからインストールすることになるのだが、DSLにはGCCやglibcがインストールされていないためconfigureが通らない。故にまずAPTでこれらをインストールする必要がある。その後Webブラウザーに必要な各種ライブラリーをインストールする必要があるのだが、これがなかなか見つからない。結局面倒になり途中でやめてしまった。

次に試したのがTiny Core Linuxの日本語版。使用する前からメモリーやディスク容量が少ないPCでも動作すると言われており、またDSLの開発者が喧嘩別れしてこのTiny Core Linuxを作成したこともあり期待は高かったのだが、実際に起動してみると遅い。Linuxカーネル 3系を使用している影響かどうかは分からないが起動後やたらメモリーを消費する。それと有志が日本語版を提供しているのだが、日本語化がどうにも不十分なように感じる。

次に試したのがDebian GNU/Linux 7.0なのだが動作が遅いなんてものではない。Webブラウザーの起動にも時間がかかる上に、起動してもまともに使える状況ではない。最少構成でインストールしその後自分流にセットアップしようともしたのだが、Xが起動しない。いろいろ試したのだが自分のスキルではどうにも事態は好転しなかった。

どのLinuxディストリビューションも欠点ばかりが目につきまともに使用できる状況ではなかったが、おぺらっぴぃによって見事に改善した。おぺらっぴぃにはLinux版のOperaの最新バージョンであるOpera 12.16がデフォルトでインストールされている。DSLなどの古いLinuxディストリビューションでは自前で最新ブラウザーをインストールしなければならなかったのだが、おぺらっぴぃではその負担はない。

第二の評価点としてはPuppy-431JP2012に比べて、ディストリビューションのサイズが小さくなっている。フォーラムによると文書作成ソフトであるabiwordや表計算ソフトであるGnumericなどが削られているが、これ等は後からでも導入できるので問題ないと思われる。最新のブラウザーのみが導入されていればいい自分にとってありがたい。

第三の評価点としては動作が非常に早い。起動後freeコマンドでメモリー使用量を確認してみても60MBぐらいしか使用していない。Operaも問題なく動作する。

おぺらっぴぃはまだ正式なバージョンはリリースされていないが、現状の最新版であるrev.021でも問題なく動作する。今後正式版のリリースに期待したい。

CakePHP の Upgrade shell

2013年04月05日

今まで CakePHP 1.3.15 を使用していたのだが、ARC2 を利用することになったので PHP のバージョンが必然的に 5.3 以降となった。

折角なので CakePHP 2 にアップグレードでもしようかと思ってたのだが、これが面倒極まりない。

CakePHP 2 に付属している Upgrade shell を利用すれば簡単にアップグレードが可能だと思っていたのだが、考えが甘かった。

フォルダーのリネーム一つとっても Controller とすべきなのに controllers のままだったり layouts や elements もそのままになっている。

実際にアクセスしても以下のようなエラーが出てしまう。

Notice: Undefined index: Error in C:\Users\admin\Downloads\xampp\htdocs\cakephp2\lib\Cake\Core\Configure.php on line 99

Notice: Undefined index: Exception in C:\Users\admin\Downloads\xampp\htdocs\cakephp2\lib\Cake\Core\Configure.php on line 100

Fatal error: Class name must be a valid object or a string in C:\Users\admin\Downloads\xampp\htdocs\cakephp2\lib\Cake\Error\ErrorHandler.php on line 122

一つ一つファイルを CakePHP 2 用に書き換えるのも面倒なのでやめた。CakePHP 3 の開発も行われているようなので CakePHP 1.3.15 で様子見でいいかな。

タグ: PHP

匿名通信のアルゴリズム

2013年03月31日

Tor や I2P で用いられている匿名通信のアルゴリズムが紹介されている。よくまとめられていて分かり易い。

PHP 5.3 のサポートが終了

2013年03月27日

マイナビニュースやスラッシュドット・ジャパンに PHP 5.3 のサポートが終了する記事が掲載されていた。

記事中には5.3がもっとも高いシェアを占めたと書かれているが、私の知る限り無料のレンタルサーバなどでは未だに PHP 5.2 が主流のように感じる。場合によっては PHP 5.1 や PHP 5.0 でサービスを提供している所もある。

全ての人が最新バージョンという恵まれた環境の中でウェブサイトを作ることが出来るわけではないのだ。

ICRA(Internet Content Rating Association) が終了していた

2013年03月27日

久々にインターネットにおけるレイティングを調べている中で分かったことなのだが ICRA によるラべリングは終了したようだ。

Upon the recent decision of FOSI's Board of Directors, the ICRA labeling engine has been discontinued. While all current labels will continue to work with Internet content filters, the ICRA label generator, ICRA tools and Webmaster support will no longer be available.

ICRA は HTTP Response Header で使用する PICS-Label の値やサイトのレイティングを記述した RDF/XML を生成してくれるジェネレータなどを提供していただけに少し残念だ。

ちなみに ICRA のジェネレータによって生成された RDF/XML は以下のようなものである。

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:dcterms="http://purl.org/dc/terms/"
    xmlns:label="http://www.w3.org/2004/12/q/contentlabel#"
    xmlns:icra="http://www.icra.org/rdfs/vocabularyv03#"
>
    <rdf:Description rdf:about="">
        <dcterms:creator rdf:resource="http://www.icra.org" />
        <dcterms:created>2011-04-30</dcterms:created>
        <dcterms:modified>2011-04-30</dcterms:modified>
        <label:authorityFor>http://www.icra.org/rdfs/vocabularyv03#</label:authorityFor>
    </rdf:Description>

    <label:Ruleset>
        <label:hasHostRestrictions>
            <label:Hosts>
                <label:hostRestriction>japan.nusutto.jp</label:hostRestriction>
            </label:Hosts>
        </label:hasHostRestrictions>
        <label:hasDefaultLabel rdf:resource="#label_1" />
    </label:Ruleset>

    <label:ContentLabel rdf:ID="label_1">
        <rdfs:comment>Label for all/most of website</rdfs:comment>
        <icra:nz>1</icra:nz>
        <icra:sz>1</icra:sz>
        <icra:vz>1</icra:vz>
        <icra:lz>1</icra:lz>
        <icra:oz>1</icra:oz>
        <icra:cz>1</icra:cz>
        <rdfs:label>No nudity; No sexual material; No violence; No potentially offensive language; No potentially harmful activities; No user-generated content; </rdfs:label>
    </label:ContentLabel>
</rdf:RDF>

タグ: RDF

HTML の中に Turtle を埋め込む方法

2013年03月27日

Turtle の仕様は Turtle - Terse RDF Triple Language にて公開されていたようだが、正式な W3C 勧告候補案が http://www.w3.org/TR/2013/CR-turtle-20130219/ にて公開されている。

ところでこの勧告候補案の A Embedding Turtle in HTML documents 中でThis section is non-normative.と前置きしながらも Turtle を HTML5 の中に埋め込む方法を提案している。

<script type="text/turtle">
@prefix dc: <http://purl.org/dc/terms/> .
@prefix frbr: <http://purl.org/vocab/frbr/core#> .

<http://books.example.com/works/45U8QJGZSQKDH8N> a frbr:Work ;
     dc:creator "Wil Wheaton"@en ;
     dc:title "Just a Geek"@en ;
     frbr:realization <http://books.example.com/products/9780596007683.BOOK>,
         <http://books.example.com/products/9780596802189.EBOOK> .

<http://books.example.com/products/9780596007683.BOOK> a frbr:Expression ;
     dc:type <http://books.example.com/product-types/BOOK> .

<http://books.example.com/products/9780596802189.EBOOK> a frbr:Expression ;
     dc:type <http://books.example.com/product-types/EBOOK> .
</script>

以前 HTML の中に RDF/XML を埋め込む方法として HTML のコメントを使用してその中に RDF/XML を記述するという方法があったがそれに近いものを感じる。悪くはないと思うのだが、RDFa があるのだからここまでしなくてもいいような気が…

タグ: RDF