お前ら全員、こっぱミトコンドリア!

03/12()

_ しびれる golang

hugo からみから golang ちょっとはやろう。ということで、積ん読になっていた プログラミング言語Goを片手にいろいろ書いてみたりして、 なかなかしびれる言語であることがわかってきたので、わかった範囲でちょっと

go-iconv

まずはお礼から
矢田さんによるgo-iconvインターフェースUnlicence の条項を追加していただきました。ありがとうございました。
さて、package C で関数値の2番目を error型で返す場合、errno を元に使うのですが、 Cライブラリとしての errno はエラーが起きたときのみに値が設定され、 正常処理の場合、値が設定されません。エラーが起きてるかどうかの判断は各関数ごとに異なり、 関数仕様を読む以外にありません。 github には go-iconv インターフェースが他にもあるのですが、このあたりがうまくない プログラムが多く、ちゃんとしてるのが矢田さんによるものしか見つからない状態でした。

みんながんばれ

というか、複数値を関数値として返すことができるgolangからすると、 Cライブラリのエラー値の返し方がさまざまでどーしよーもない。 というのが信じられないように見えちゃうのかな? と思ってます。

他の言語知ってるひとむけ

package はディレクトリで管理する
相対ディレクトリでpackage指定が可能
package名は全小文字
export されるのは、識別子の最初の1文字が大文字
メソッドはexportしておいた方が無難?しておくべき?する必要がある?
package の初期化は func init() で可能。ファイルごとにinit()が持てる
gdb は version7.x が利用可能。go build -gcflags "-N -l" 〜〜 な感じでデバッグビルド
スタートは package main の func main()
FreeBSD だけか? GOPATH 設定しないと ~/go になるようだ?
golangライブラリpackageは github によくいて、たとえば 前述のiconvは
go get github.com/s-yata/go-iconv
でインストール。このpackageを利用するにはgolangプログラム内で
import "github.com/s-yata/go-iconv"
する。このあたりとってもうまい仕様。
しびれるところまで行かなかった。次回はラブラブ interface{} に、ラブラブ リフレクションです。 次回あるのか?

---

---

02/27(月)

_ ちかごろの FreeBSD ports

ports/lang/gcc

いろんなportsをビルドしようとすると、まだまだ fortran の出番があって、 fortranが必要になると、portsシステムでは lang/gcc をインストールして gcc 中に含まれる gfortranを使用します。
システムのclangとは別にgccがインストールされていることがよくあるわけです。 というか、うちにはまずインストールされてます。 そういう状況で、configure によっては、gcc優先でgccでコンパイルしたりすることもあって、
あーーん、もう。
という場面に出くわすことがあります。今回もそのパターンです。
そもそも、なぜかわかりませんが、NetBSD build中 tools 終わって、gcc を作ろうというところで、 host-libcpp を作ります。ここのconfigure でgcc優先にになって、gccが使われるわけですが、 2,3日まえから、コンパイルエラーがでて進みません。頭の中は、

host-libcpp を作りにいくのがおかしい。Makefileあたりで変更があったのではないか?

で一杯だったので、その辺りをずっと探していたのですが、 NetBSDのcommit log mailを見ても、該当しそうなところが見当たりません。 正常にビルドできてたときのconfigure logが残っていて、そのときも FreeBSD側 gccを使っていることが わかって進展しました。gccがなんらかの原因で壊れた。の仮定が出てきました。
コンパイルエラーの原因となっているファイルは
/usr/local/lib/gcc49/gcc/x86_64-portbld-freebsd11.0/4.9.4/include-fixed/sys/types.h
で、内容を見ると、/usr/include/sys/types.h のコピーです。ということは、 2,3日前にSAが出たので、カーネル/ユーザーランド全部アップデートしたときに /usr/include の 内容を更新して、それとコピーした gcc 用の inlcudeファイルが不整合を起こしているのではないかと。

であれば、ports/lang/gcc の再ビルドを行えばいいはずです。
gcc再ビルド後、無事 NetBSD build 完了。

結論: /usr/include を更新したら、 ports/lang/gcc はアップデートせよ

02/19()

_ ちかごろの FreeBSD ports

Xorg Driver xf86-video-intel

Xorg Driver のバージョン上げたら、 *1 カーネルモジュール勝手にロードする というのがなくなったようで、自分で明示してカーネルモジュールをロードする 必要がある。
/boot/loader.conf でも /etc/rc.conf に kld_listにでも、i915kms を追加
参照

qtchooser-39 conflicts with qt4-rcc-4.8.7

もう、わけわかりません。
古いどっちかと新しいどっちかのインストールファイルに競合が生じてて、 いったん、qt4-rcc を deinstall して qt4-qmake を作ったあとで、 qt4-rcc をアップデート。でいいのか?

*1: pkg でバージョン上げました

02/13(月)

_ node-fastcgi

node.jsというと、Expressなどのフレームワークで、httpdから全部 Javascriptで書いちゃう。のが主流になってますが、 そういうのは他の人に任せるとして、別のnode.jsの使い方をしてみます。
node.jsでCGIでもいいんですが、どうせなら、fastcgiインターフェースはないかな? と探してみると、npmにnode-fastcgiモジュールがあります。これを使ってみます。
ときたま、apacheも入ってないjailがありましたので、たまにはapacheから入れてみるかと。
superuser での処理
#pkg install www/apache24
#pkg install www/mod_fcgid
#pkg install www/node
#pkg install www/npm
/etc/rc.conf を編集
apache24_enable="YES"
追加

FreeBSD apache は Includesディレクトリの内容を httd.conf でincludeするように なってますので、積極的に使っていきます。
cd /usr/local/etc/apache24/Includes/
cp ../extra/httpd-userdir.conf .

httpd-userdir.conf編集
UserDir 行の前に
LoadModule userdir_module libexec/apache24/mod_userdir.so
追加
Options MultiViews... の行に
ExecCGI
追加

fcgid.conf 新規作成
LoadModule fcgid_module libexec/apache24/mod_fcgid.so

<IfModule mod_fcgid.c>
   AddHandler fcgid-script .fcgi
</IfModule>
で作成

apacheを起動
#/usr/local/etc/rc.d/apache24 start
でapacheスタート

superuser での処理はここまで

今回はnpmグローバルを使いませんので、後で設定してもいいのですが、 最初に設定しておきましょう。
%npm config set prefix=/home/自ユーザ名
npmグローバルディレクトリを /home/自ユーザ名 にします。
普通は npmグローバルディレクトリは /usr/local で、 npm -g でインストールしたファイルは /usr/local/bin, /usr/local/lib に格納されますが、 FreeBSD 上の npm で /usr/local を使うのは、ちょっと違うのではないか? という気がしてまして、普通とは違う設定にします npm -g でインストールしたファイルは ~/bin ~/lib に格納されます。 コマンドパスに ~/bin がない場合には設定しておきましょう。

httpd でのユーザディレクトリを作成します。
%mkdir public_html
public_htmlはhttp:.../~ユーザ名 でアクセスした場合のディレクトリです。
そこにfastcgiテスト用にディレクトリ作成と、node-fastcigモジュールのインストールを行います。
%cd public_html
%mkdir fcgi_test
%cd fcgi_test
%npm install node-fastcgi
https://www.npmjs.com/package/node-fastcgi にある Example をそのままのファイルを作成します。
nodefcgi.js
var fcgi = require('node-fastcgi');

fcgi.createServer(function(req, res) {
   if (req.method === 'GET') {
     res.writeHead(200, { 'Content-Type': 'text/plain' });
     res.end("It's working");
   } else if (req.method === 'POST') {
     res.writeHead(200, { 'Content-Type': 'text/plain' });
     var body = "";

     req.on('data', function(data) { body += data.toString(); });
     req.on('end', function() {
       res.end("Received data:\n" + body);
     });
   } else {
     res.writeHead(501);
     res.end();
   }
}).listen();

このファイルをキックするfcgiスクリプトを作ります
nodefcgi.fcgi
#!/usr/local/bin/node nodefcgi.js
実行パーミッションを付加します
%chmod +x nodefcgi.fcgi
http://ホストアドレス/~自ユーザ名/fcgi_test/nodefcgi.fcgi にアクセスします。
It's working
と出ました。これで、node-fastcgiが動いているところまできました。
何も問題がでませんでした。つまらん(そうじゃなくて

02/09(木)

_ PHP7.1

PHP怖いんで、外向けのサーバには入れてないんだけど、 内向けのサーバーにはPHP7.0が入れてあったりして。
というわけで、FreeBSD での PHP7.0からPHP7.1への入れ替え

まず、/etc/make.conf のデフォルトバージョンの変更
DEFAULT_VERSIONS+=php=7.0
DEFAULT_VERSIONS+=php=7.1
に変更します。
続いての作業で使う ports management tool は portupgradeを使いました。 依存関係を保持したまま、パッケージアップグレード
#portupgrade -o lang/php71 -f lang/php70
#portupgrade -o www/mod_php71 -f www/mod_php70
つぎに php70-xxx の名前をもつパッケージのアップグレード まず
#pkg info -o 'php70*' | sed -e 's/.*[ ]\([a-z]*\)\/php70\-\(.*\)/portupgrade -o \1\/php71-\2 -f \1\/php70-\2/' > puphp71.sh
ファイル(puphp71.sh)に書き込んだ後、目で確認してから、そのファイルを /bin/sh で実行します
#sh puphp71.sh
php70-xxx のパッケージが残ってないことを確認します
#pkg info 'php70*'
あとは、php71に依存していて php7x-xxx のパターンでないパッケージのリビルド
portupgrade -frx 'php71*' php71
これで、php71になったかな?(よくわかってません)
なんか mod_php が動かない気がするので、もう一度ビルドしました。他にも壊れてるところがあるかもしれません。 内向きhttpdですから (^_^;;

以上、5 日分です。

早起き生活
Powered by 早起き生活

こりゅう こんな顔で出ています
twitter id は a_rin

Powered by hns-2.10-beta9, HyperNikkiSystem Project

いままでのものはこちら

2014年 <5月> <4月> <3月> <2月> <1月>
2013年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2012年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2011年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2010年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2009年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2008年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2007年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2006年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2005年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2004年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2003年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2002年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2001年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
2000年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月> <1月>
1999年hns <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月>
1999年 <3月> <2月> <1月>
1998年 <12月> <11月> <10月> <9月> <8月> <7月> <6月> <5月> <4月> <3月> <2月>


~a.rin/ にもどる
こんな感じ?