It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

いろいろ躊躇ったけど、ようやく引っ越した、これで少しでも安定になってきた気がする(ブログを書くのもお久しぶり、笑)

新しい住み処は学校からおよそ1.4キロだけので、今なら毎日歩いて通学することができるようになった
それにCBDに近いから、お買い物も大分便利になった。歩いて数分の距離にはクイーンビクトリアマーケットがある。この市場は確か南半球最大の市場であり、お肉も野菜もショッピングセンターよりずっと安い。他のものを買いたいなら、チケット代無しの電車で(フリーゾーンから)CBDのQVショピングセンターにほどなく行ける

今の家賃が安いけど、それに対してこの住宅自体は古くてとても汚いんだ。でもこの値段でNorth Melbourneでより良い場所を探したいなら、やっぱどうしても無理な気がするよね。友人が僕今の部屋に訪ねたことがあるけど、でもやっぱこんな環境に耐えられなくて、それからロードバイクを買って、CBDから3・4キロぐらい離れるエリアで部屋を探し始めた。でも正直といえば、一度今のところの便利さを味わいたら、もうまた遠いところに引っ越す気は全然なくなってきたね。これからバイトするつもりがあるから、給料によって他の場所に引っ越す可能もあるけど、やっぱそれもCBDに限るね

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

この間MSIのGT72Sを購入したけど、ただ二三日が経ったのにそれである問題に気づいた。

パソコン自体にはWindows 10があったけど、開発のため、僕はKubuntuをインストールした。僕はこの前にずっとCinnamonを利用したから、KDEなんてこれは初めてだった。
いつもKDEのセッテイングがめんどくさいという印象があるけど、今回のKubuntu 15.10はなんと驚くほど使いやすくなってきた。バグはちょっとあるけど、どれも回避しやすい。以前FedoraでCinnamonを使った時に自分で配置しなければいけないことって、KDEであればどれも直接にGUIを通じて設定できる(マウスを使うとき自動的にタッチパッドを無効化するとか)。

それでKubuntuを何日間嬉しく使ったあと、珍しくWindowsに入った時に、パソコンから高周波ノイズが出てしまった。スピーカーやCPUファンのノイズだと思ったけど、スピーカーを無効化してファンの電源ワイヤーを外しても、そのノイズはそのままで消えてなかった。それで耳をパソコンに近づいてよーく聞けば、あのノイズはスピーカーからでもファンからでもなく、CPUの方からのものだと確認した。

MSIのサポートに連絡したら、どうやら他の客からも似たような報告が出た。一時的な解決として、BIOSのAdvanceタブを開けてAlt F2 Ctrl Shift 4つのバタンを同時に押して、それから隠しオプションの「CPU C State」を無効化すればいいんだ。でもこれでおそらくWindowsではCPUの省エネ機能が使えなくなるんでしょう。それにこれってやっぱりちょっと妙な感じがするね、だって僕Linuxの方は「intel_idle.c_state=1」というカーネルパラメータを使ってるし(BIOS設定を無視し、C-Stateを強制的に有効化)。こう見ればLinuxはやっぱり電源マネジメントについてWindowsより器用かもしれない。

ちょっとグーグルしたら、どうやらこの問題はマザーボードのコイルに起こされたようだ。時々あるんだけど、それもそれで珍しい問題らしい。地元のMSIサポートセンターに行ったら、予想通り国内の工場に返品しなければいけない。それに僕のパソコンはアメリカの通販から買ったから、交代を要求したら自腹でアメリカに送るしかない、でもそれでおよそ20000円の配送料をかかる。これはまつしかねーな (TдT)

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

php-bencode is a PHP Bencode extension which supports encoding, decoding and editing Bencode strings or files. The previous version of php-bencode, which supports PHP 5, needs PHP-CPP to run while the new one now requires no other external libraries.

The location of the source code remains the same, on both GitHub and my personal TsundereGit:
https://github.com/Frederick888/php-bencode
https://git.tsundere.moe/Frederick888/php-bencode

Written in C/C++, php-bencode gives an unbelievable performance boost for manipulations of Bencode. I’ve run a benchmark through different implements by decoding a Bencode file with 1M sub-nodes in my box (8 cores, 1G memory). The sample file can be downloaded here: Bencode Sample.

Obviously, the time needed to decode the same file is shortened dramatically by using php-bencode. The memory usage is a little higher than the pure PHP library with PHP 7 but the object array can give you real data safety rather than a plain array. (For example, if the original Bencode file contains an empty dictionary or list, data loss may be caused after decoding and re-encoding.) What’s more, because the memory usage gap between php-bencode and other pure PHP libraries goes up with the number of nodes, as the Bencode files we usually need to handle contain only less than 1,000 nodes, the gap can be just ignored.

Still, there’s much work to do. The previous version supported to get/set a node by path and search through the whole tree but they have not been implemented in the new one yet. Additionally, the new php-bencode supports only PHP 7 by now and I’m considering to support PHP 5.6 as well.
続きを読む

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

DSCN0667_size

009

雪の原因で二三日遅れたけど、ようやく無事で配達してくれた。

嬉しいけどこの前の「よるのないくに」はまだクリアしてないから今はちょっと焦ってるね。
「解放の魔印」はなかなか出ないんだ、いろいろ試したけど。

まぁ、こうなったら今は暇がなくなるんだねw

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

昨日久々に自分のGitLabを開けたら、まさか403エラーが起こってしまった。

最近は何の配置をも変更しなかったのに、どうして自分勝手にエラーになってしまうんでしょう。
心当たりというなら、だいたい数日前のLinode Xenシステムアップデートしかあるまい。
でもホストの更新とこっちゲストの方の問題は何の関係もないと思った。

サーバーのログをチェックしたら、こんなのを見つけった:

AH01276: Cannot serve directory /opt/gitlab/embedded/service/gitlab-rails/public/: No matching DirectoryIndex (none) found, and server-generated directory index forbidden by Options directive

それに、この問題はホームページを開ける時にしか起こらなかった。
他のプロジェクトページやユーザーページやには問題がなかった。

配置の問題であれば、一般的には複数のページで問題を起こすべきだ、ただのホームページではない。
それでさきのログをグーグルしたら、やっぱソフト自身のバグだった。詳しいのはApacheのBugzillaに掲載されてる。

一時的な解決として、

a2dismod autoindex

でAutoIndexモジュールを無効化すればいいんだ。
Phusion Passengerは次のリリース(5.0.22)でこの問題を徹底的に解決する予定がある。

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

The source is now being hosted at both GitHub and my personal TsundereGit.
https://github.com/Frederick888/php-bencode
https://git.tsundere.moe/Frederick888/php-bencode

From Wikipedia
Bencode is the encoding used by the peer-to-peer file sharing system BitTorrent for storing and transmitting loosely structured data.

Apart from the “torrent” files, it is also used to store local data in some BitTorrent clients instead of other lightweight databases such as SQLite. However, if one gets hundreds of torrents, decoding the file would be extremely slow by some pure PHP libraries. This is why I decided to implement a PHP extension to boost the process.

There is an existed extension on Google Code, which you can also find an exportation to GitHub with some patches. But it seems that it can only parse a Bencode into plain array or convert an array back which may cause data loss during the conversion, e.g. empty arrays or lists.

Bencode should be handled by objects. But I can hardly find any introductions about handling objects in a PHP extension (reading the header file may be a better choice but it may cost a little long). Then I found PHP-CPP, which is quite friendly to new PHP extension developers. It’s a pity that it cannot be packed as a PECL package but it would be easy to build a binary package instead.

The development is not finished yet and I’m considering adding more useful features. Also, there may be lots of redundant codes to clean up 😉

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

“vcgencmd” is a useful command on Raspberry Pi provided by Raspbian.

By taking advantage of this command, users can easily get the temperature of Pi, check the frequency of CPU and etc. There’re many options for this command but it lacks a bash completion script. So I wrote one based on the document by elinux.

Here it is. Place it under /etc/bash_completion.d/. (Download: vcgencmd-complete.zip)

_vcgencmd () {
    local cur prev commands opts_clock opts_volts opts_codec opts_config opts_mem opts_display
    commands=$(vcgencmd commands)
    commands=${commands:10:${#commands}-11}
    commands="${commands//,} commands"
    opts_clock="arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi "
    opts_clock="45  1    28   42  43  22   25  47   29    10  9    4 ""$opts_clock"
    opts_volts="core sdram_c sdram_i sdram_p"
    opts_codec="H264 MPG2 WVC1 MJPG WMV9"
    opts_config="int str
        arm_freq
        config_hdmi_boost
        core_freq
        disable_commandline_tags
        disable_l2cache
        emmc_pll_core
        force_eeprom_read
        force_pwm_open
        framebuffer_ignore_alpha
        framebuffer_swap
        hdmi_force_cec_address
        over_voltage
        over_voltage_avs
        overscan_bottom
        overscan_left
        overscan_right
        overscan_top
        pause_burst_frames
        program_serial_random
        sdram_freq
        temp_limit"
    opts_mem="arm gpu"
    opts_display="0 1"

    COMPREPLY=()
    cur=$(_get_cword)
    prev=${COMP_WORDS[COMP_CWORD-1]}

    case "$prev" in
        "vcgencmd")
            COMPREPLY=($(compgen -W "$commands" "$cur"))
            ;;
        "measure_clock")
            COMPREPLY=($(compgen -W "$opts_clock" "$cur"))
            ;;
        "measure_volts")
            COMPREPLY=($(compgen -W "$opts_volts" "$cur"))
            ;;
        "codec_enabled")
            COMPREPLY=($(compgen -W "$opts_codec" "$cur"))
            ;;
        "get_config")
            COMPREPLY=($(compgen -W "$opts_config" "$cur"))
            ;;
        "get_mem")
            COMPREPLY=($(compgen -W "$opts_mem" "$cur"))
            ;;
        "display_power")
            COMPREPLY=($(compgen -W "$opts_display" "$cur"))
            ;;
    esac

    return 0
}
complete -F _vcgencmd vcgencmd

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

この2つのタイトルの発売日は元々近かったので、予約した時に同一な注文にした。それで、ただ延ばされただけならそれほど不幸なことじゃないけど、延ばされたあとこれらの発売日は随分離れちゃった(「よるのないくに」は10月1日、「ソフィーのアトリエ」は11月19日)。それにガストショップのルールによって、同一注文の品の配達も一緒にする。というわけでこのままだと「よるのないくに」も11月まで待たなければいけない。

gust_shop_extension

大変だと思ってサポートに連絡したら、スタッフの方から注文を2つにすることもできなかった。仕様がなかったから、一度注文をキャンセルさせ、その後こっちから再注文するわけになってきた。

今年この2つのタイトルをやれるかな・・・(遠い目)

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

The combination of touchscreen and NFC module is quite useful for many situations. For example, you may build a simple signup system or an advanced billing system which is a little more complex.

Here we’ll use Waveshare 3.5″ Touchscreen and ITEAD PN532 NFC Module. Both the prices of the two components are pretty fare and they can basically meet most of our requirements.

The Waveshare touchscreen comes with a DVK512 chip which doesn’t support SPI master-slave architecture. This means we cannot use the PN532 with SPI at the same time. Fortunately, ITEAD PN532 provides various interfaces including SPI, I2C and UART. I’ll show you how to make PN532 over I2C work with Waveshare touchscreen together.

続きを読む

It's only fair to share...Tweet about this on TwitterShare on Google+Share on FacebookShare on TumblrEmail this to someone

Different from Windows 7, there isn’t an efficient way to manage Network Locations in Windows 8.1.
This problem can sometimes be quite annoying. For example, there may be an increasing number after your network name such as “My Network 2”, “My Network 3″… However you usually won’t use the legacy profiles once again so the storage of the configurations just becomes redundant.

I finally found the solution at Microsoft Technet, it’s quite easy and I’ll just do a memo here.

1. Run Registry Editor. (press Windows button + R, type regedit, click OK)
2. Go to this folder: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles.

The Profiles folder will eventually give you all the network locations (past or recent) that you have used. Each network location is represented by a subfolder.

If you want to set up again the network locations when the network adapter connects to the network, delete all the subfolders of Profiles folder.

If you want to rename the network location, click on the right subfolder and edit the key named ProfileName and input the name you desire for the network location.

Thank Shiva Sharma for sharing.