たつをの ChangeLog : 2014-06-19

2014年6月19日のヲハニュースをお届けします。

ジオシティーズ リニューアル

簡単ホームページ作成サービス(無料) - Yahoo!ジオシティーズ
リニューアルされてた!
- リニューアルのお知らせ - Yahoo!ジオシティーズ

米アマゾン、独自スマートフォン「Fire Phone」を正式発表 | GGSOKU - ガジェット速報
Amazon の z を ph にして Amaphon(e)、アマフォン。
ではなかった。
ファイアフォン。Firefox と紛らわしいか。

世界の一流メーカー「かわの電気」を知っているか 「高品質のピクチャー」な謎テレビ、中国で発見 会社に直撃したら…… (1/3) - ITmedia ニュース
メイソウ的な。
社長「宮の内政」、副社長「川口の政治の一」。
人名くらいはしっかり!

LINEが韓国政府からの盗聴(Wiretapping)云々の記事に反論(追記あり): やまもといちろうBLOG(ブログ)
ああ。

中国製スマホにスパイウェアがプリインストールされていることが発見される - GIGAZINE
ああ。

Twitterは”駄サイクル”を作るか? - トゥギャッチ
ダサイクル。ツイッターに限らないけど。

図鑑でわかるお客さんがいないのに「潰れない店」 | ここは3.11後の日本
いろんなパターンが。

「オズボーンのチェックリスト改」を使った61のアイデア発想法 | アイデアキー
ほうほう。

財布や印鑑、iPhoneを紛失したらどうする? 大事なものをなくしたときに起こしたい行動 - はてなニュース
トップ写真に使われてる!わいわい!
この小さい財布の写真↓
- abrAsus の「小さい財布」が結局メインの財布になりました[2012-02-07-3]

Amazon.co.jp: 海洋地球研究船「みらい」とっておきの空と海: 柏野祐二, 堀E.正岳, 内田裕, 構成・文 ネイチャープロ編集室: 本

赤道直下の熱帯から北極・南極まで世界中の海洋を調査する、海洋地球研究船「みらい」。
本書では研究者と乗組員が「みらい」から撮影した美しい空と海の写真を紹介し、科学的な解説を加える。
自然の見せる壮大な芸術に圧倒され、また空と海のふしぎがよくわかる一冊。
【美しい絶景が満載! 】
ビーナスベルト……日没後の空に生まれるピンクの帯
天使の梯子……雲間から漏れる光のシャワー
グリーンフラッシュ……太陽が緑色の光を放つ瞬間
蓮葉氷……北極の海に浮かぶ生まれたての氷
アイスブルー……巨大氷山が生む青い彩り
キョクアジサシ……北極から南極まで飛ぶことができる鳥
真夜中の夕焼け……真夏の南極、23時の美しい日没

UTF-8 な文字列から半角N文字分取る方法についてです。EUC-JP なころは「端のビットが1なら2つ、0なら1つ」みたいな深く考えない実装でごまかしてきたのですが、最近はそうも言ってられなく。

同じことを行うモジュールがありそうだけど、練習がてら実装してみました。車輪の再発明とか気にしない!
(とはいえ、ご存知でしたら教えてくださいませ……)

■コード (hkcut.pl):
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use open ':utf8';
binmode STDOUT, ":utf8";
binmode STDIN, ":utf8";

my $n = shift @ARGV;

while (<>) {
    chomp;
    my ($str, $hlen) = get_first_n_hkchars($_, $n);
    my $rest = $n - $hlen;
    my $fill = "#" x $rest;
    print "[$str$fill] from [$_]\n";
}

# 先頭から半角N文字分取る
# 取った文字列と実際の長さ(半角文字数)を返す
sub get_first_n_hkchars {
    my ($str, $n) = @_;
    my $s = "";
    my $slen = 0;
    foreach my $c (split(//, $str)) {
        my $clen = 2;
        if (
            $c =~ /\p{InBasicLatin}/
            or 
            ($c =~ /\p{InHalfwidthAndFullwidthForms}/ and $c =~ /\p{Katakana}/)
            ) {
            $clen = 1;
        }
        last if $slen + $clen > $n;
        $slen += $clen;
        $s .= $c;
    }
    return ($s, $slen);
}

半角カタカナに注意しながらUnicodeブロックで指定。見知らぬ記号・文字でうまくいかないことがありそうだけど、そうなったらそのつどブロック指定で条件式追加していく予定です(適宜追記します)。

プログラム中で定義されてる関数では指定された半角文字数分の文字列を返すのですが、足りない場合や全角文字の途中だったりした場合もあるので、実際の長さ(半角文字数)も返します。上記コードでは不足分を「#」で埋めて表示しています。

■実行例:
% cat hkcut-test.txt
123456
198273
1に3し4ろく
【ひらがなと漢字】
カナカナascii
ハンカクカナabc全角仮名
% ./hkcut.pl 5 hkcut-test.txt
[12#] from [123456]
[198#] from [198273]
[1に3#] from [1に3し4ろく]
[【ひ#] from [【ひらがなと漢字】]
[カナカ] from [カナカナascii]
[ハンカクカ] from [ハンカクカナabc全角仮名]
% ./hkcut.pl 8 hkcut-test.txt
[1234] from [123456]
[19827#] from [198273]
[1に3し4#] from [1に3し4ろく]
[【ひらが] from [【ひらがなと漢字】]
[カナカナas] from [カナカナascii]
[ハンカクカナab] from [ハンカクカナabc全角仮名]
% ./hkcut.pl 13 hkcut-test.txt
[123456#] from [123456]
[198273####] from [198273]
[1に3し4ろく##] from [1に3し4ろく]
[【ひらがなと#] from [【ひらがなと漢字】]
[カナカナascii##] from [カナカナascii]
[ハンカクカナabc全角] from [ハンカクカナabc全角仮名]

ref.
- Unicodeでの正規表現 (ぱせらんメモ)
http://d.hatena.ne.jp/pasela/20081003/ll_unicode
- perlの正規表現でUnicodeブロックを使う (sasata299's blog)
http://blog.livedoor.jp/sasata299/archives/51194035.html

更新履歴


追記140623: get_first_n_hkchars()の仕様変更。「取った文字列と残り半角文字数を返す」を「取った文字列と実際の長さ(半角文字数)を返す」に。

追記140628: fold系のモジュールで対応しているのがありました。
- 文字列の折り返し@Perlにこれ一本! Lingua::JA::Fold: CRUSADER'S ROOM分室
http://blog.cru-jp.com/crusaders_room/2007/04/perllinguajafol_a8f3.html
- CPAN Lingua::JA::Fold
http://cpansearch.perl.org/src/HATA/Lingua-JA-Fold-0.08/Fold.pm
(length_full() で半角文字数を計算してる)

とらちゃん(3歳9ヶ月)の散髪をしました。前回は先々月(4月)。

とらちゃん散髪 before after 2014/6/19
(↑とらちゃん BEFORE AFTER)

数日前に耳の回りをギャツビーのセルフカット用ハサミでさくさく。今日は襟足と全体をカットモードで。どちらもお風呂にて私が担当。ギャン泣きでした。

Panasonic カットモード(ナチュラルアタッチメント付 水洗い) 白 ER5209P-W


そういえば、先日の「タモリ倶楽部」(深夜テレビ番組)で、TKO木下さんがカットモードを愛用しているという話がありました。しかも2台持ち。バッテリーが切れても大丈夫なようにだって。なるほどなあ。

近年の散髪記録

- 息子の散髪! (2014年4月)[2014-04-25-2]
- 息子の散髪! 耳周りと襟足と前髪 (2014年3月)[2014-03-20-3]
- 私の散髪!(2014年3月)[2014-03-08-1]
- 耳周りと襟足だけだけど、息子の散髪!(2013年12月)[2013-12-22-1]
- 私の散髪!(2013年11月)[2013-11-23-1]
- 息子と私の散髪!(2013年8月)[2013-08-25-1]
- 息子の散髪!(2013年7月)[2013-07-28-1]
- 息子と私の散髪!(2013年6月)[2013-06-28-4]
- カットモードで息子の散髪!(2013年5月)[2013-05-21-1]
- 1000円床屋で散髪!(2013年3月)[2013-03-20-3]
- カットモードで私と息子の散髪!(2012年11月)[2012-11-22-3]
- カットモードで私と息子の散髪!2回目![2012-04-17-2]
- カットモードでセルフ散髪!(2012年7月)[2012-07-14-2]

たつをの ChangeLog
Powered by chalow