技術忘備録 : SQLで order by 句を使ったときの挙動

3月 8th, 2011 · No Comments

SQL周りのコードを書いていたときに引っかかったネタ。

SELECT * FROM ( SELECT C1,C2 FROM T1
WHERE C3 = 'hoge' ORDER BY 'TIME'  DESC LIMIT 100 ) ORDER BY 'TIME' ASC;

こんな文を書いて
「T1に存在するレコードのうち、条件に合う物を時間をキーにして降順に最新から100個を抜き出した後、昇順に並べ直して時間順にする」
ということをしようと思っていたのですが、こう書くと[ORDER BY 'TIME' DESC]が無視されてしまうのです。

色々追っていくと原因はカラム名を囲っている「’」であることが判明。

SELECT * FROM ( SELECT C1,C2 FROM T1 
WHERE C3 = 'hoge' ORDER BY TIME  DESC LIMIT 100 ) ORDER BY TIME ASC;

こうすると動く。

→ No CommentsTags: SQL · 技術ログ · 更新

技術忘備録 : Ubuntuでsqlite3-rubyのインストール

3月 3rd, 2011 · No Comments

Ubuntuでsqlite3-rubyをgem経由でインストールする際、そのままではextconf.rb周りで失敗するのでsqlite3-devを入れる。

# aptitude install sqlite3-dev
->Couldn't find package "sqlite3-dev". ...

名前が変わっていて,ライブラリにdevel版が存在していたのでそちらをインストールするとうまくいく。

#aptitude install libsqlite3-dev
#gem install sqlite3-ruby

→ No CommentsTags: ruby · 技術ログ · 更新

技術忘備録: gnuplotをつかってCGIで動的に画像を作成するときの留意点@ruby

2月 23rd, 2011 · No Comments

画像をいちいち作成して読み込みなおすよりは動的につくりたかったのでチャレンジしたらドハマリしたので。というかrgplotが適当すぎて泣く。
なおどちらも根本的解決ではありません。

1.”Could not find/open font when opening font “arial”, using internal non-scalable font”
というエラーがhttpdのerrorlogに残っている場合。
termメソッド内に出力タイプ指定をすると共に、TrueTypeフォントのファイルを直接指定する

#png Arial,8ptで表示。 フォントファイルは 同一ディレクトリ内に置くか、絶対パス指定
plot.term 'png font "Arial.ttf" 8'

2.いくら指定してもContent-typeを認識せず,malformed header from script. Bad header=とエラーログに残る場合
図の描画をするスクリプトとcgiとして公開するスクリプトを分けて書いて、system関数で呼び出す。Content-Typeの指定は公開側で行う。

#!/usr/bin/ruby
print "Content-type: image/png\n\n"
#graph.cgiが作図cgi
system ("/usr/bin/ruby ./graph.cgi")

#すごい負けた気がする…

→ No CommentsTags: ruby · 技術ログ · 更新 ·

技術忘備録:Hyper-Vに嫌気がさしたのでESXi4.1にv2v&乗り換えてみた

2月 13th, 2011 · No Comments

実はInstallManiax3の特典でHyper-Vを1年利用するという制限付でサーバー(NEC Express 5800/S70)をもらったので表でWindows WebServer 2008 R2 裏でFreeBSDを動かしていたのですが、

  • ネットワークの速度でない
  • VHD壊れすぎ
  • USB/PCIパススルーマダー?

という残念仕様でずっと使い続けていたわけですが、もう1年経ったのでゴールしていいよね・・・?というわけで乗り換えをしてみました。
[Read more →]

→ No CommentsTags: 技術ログ · 更新 ·

論文進捗はかりったー。

1月 8th, 2011 · No Comments

というわけで何かにおわれながら生きているhizumiです。

なにかと論文の進捗を客観的に判断しないと多分やる気が出ないんじゃないかと思ってこんなのを書いてみました。
#oauthのトークン周りは各自取得してください。

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
31
32
33
34
35
36
#!/usr/bin/ruby
require 'rubygems'
require 'rubytter'
require 'digest/md5'
require 'oauth'
 
directory = "/folder/"
master_file = "thesis.pdf"
backup_file = "backup.pdf"
 
now = Digest::MD5.hexdigest(File.open(directory+master_file, 'rb').read)
bak = Digest::MD5.hexdigest(File.open(directory+backup_file, 'rb').read)
 
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_TOKEN=""
ACCESS_TOKEN_SECRET=""
 
consumer = OAuth::Consumer.new(
CONSUMER_KEY,CONSUMER_SECRET,:site => 'http://twitter.com'
)
access_token = OAuth::AccessToken.new(
consumer,ACCESS_TOKEN,ACCESS_TOKEN_SECRET
)
 
if now != bak
size = File::stat(directory+master_file).size
size_b = File::stat(directory+backup_file).size
system ('scp '+directory+master_file+' hizumi@hoge.com:/home/hizumi/www/')
system ('rm -f '+directory+backup_file)
system ('cp '+directory+master_file+' '+directory+backup_file)
p 'change_detected.'
ch = "卒論ファイルが更新されました。現在のファイルサイズは"+(size/1024).to_s+"KBです。前回更新より"+((size-size_b)/1024).to_s+"KB変動しています。"
rr = OAuthRubytter.new(access_token)
rr.update(ch)
end

とまあ、pdf出力のmd5が違ったらアップロードして、変動をtweetするだけの簡単なお仕事をしてくれるスクリプトです。これをcronで毎分実行してます。

→ No CommentsTags: ruby · 作ってみた

技術忘備録:/varとかがいっぱいになったときの対処。

1月 3rd, 2011 · No Comments

新年早々ドハマリしたのでメモ。@freebsd

1./var以下のいっぱいになってそうなファイル(今回は/var/db/mysql)を後から足したディスク(/disk2)にコピー

 sudo cp -r /var/db/mysql /disk2/var/db/mysql

2.関連しているサーバー群(mysql)を止めて元ファイルを削除し、シンボリックリンクを張りサーバー再起動

sudo /usr/local/etc/mysql-server stop
sudo rm /var/db/mysql
sudo ln -s /disk2/var/db/mysql /var/db/mysql
sudo /usr/local/etc/mysql-server start

3.動かない。

でドハマリしたわけですが、service -v mysql-server startで追って見ると理由は単純で
mysqlのデータディレクトリがmysqlの実行ユーザーで書き込めないパーミッションになっているのが原因。
(cpしたときにsudoしてしまったのが原因。orz)
なので

sudo chown -R mysql:mysql /disk2/var/db/mysql
sudo service -v mysql-server start

で解決。

#sudo -sとかしろよというツッコミはなしで。

→ No CommentsTags: 技術ログ

こっそりコミケ告知など。

12月 27th, 2010 · No Comments

なんかひさしぶりにまともに記事を書いたきしかしないひずみです。

さて、何がどう間違ったのかよくわかりませんが、コミケで何か出るみたいです。

金曜日 東S-07b ひずわぷ

出す物:

はうとぅびるど厄介棒 \100 (コピー本)

厄介棒(LEDサイリューム) \2000程度?
(まだ決めかねてます。家内制手工業的なメソッドで作ってるのであまり数持っていけません。もしかしたら落ちるかもしれません。)

当初の予定ではfoneraとかと戯れる本とかだそうと思ってたんですが、諸般の事情により別の本を出すことになりました。期待していた方が(いるかどうか分からないけど)いたら申し訳ない…

(普段いろいろいじっている現物は持って行きます。電源確保できないので実演とかは出来ないですが。。。

また、展示として以前ニコニコ動画に公開したjubeatコントローラーに見せかけた何か的なガジェットを持っていきます。

また何か変更があれば随時更新していきます。

12/28更新

委託:排便幻想合同企画 otoHime

banner_haiben

@kaminogi氏が参加しているCDの委託販売を致します。詳しくは上記バナーより御覧ください。

→ No CommentsTags: 未分類

現実逃避にWordPress 3.0.3にアップデートしました。

12月 21st, 2010 · No Comments

hizumiです。卒論に追われる毎日ですが、現実逃避にsakuraのSQLサーバーを思い切ってupdateし、mysql-5.1にしたので、ついでにWordPress 3.0.3にアップデートしました。

(かなりハマってしまったけど…EUC爆発しろ…)

なにか変なところがあったりしたらtwitterで@hizumiまでお伝え下さい。

→ No CommentsTags: 未分類

barracuda 7200.11 修復メモ。

1月 20th, 2010 · No Comments

 今更ですが、先日メインマシンにつないでいたSeagateのbarracuda 7200.11 (ST1000333AS)が
BIOSから認識されなくなってしまいました。

挙動を見るとスピンアップしようとしているのに途中でリセットがかかっている状態で明らかにbarracuda 7200.11のFirmware問題っぽかったのでダメもとで修復を試みてみました。

注意:どんなことがあっても自己責任で。余計壊れてもなかない。

[Read more →]

→ No CommentsTags: hack · PC · 修理 · 改造 · 更新

fonera 2.0をOpenWrt化してみた。+ D02HWを動かしてみた。

10月 4th, 2009 · 3 Comments

#すべて自己責任の上でお願いします。壊しても、動かなくても泣かないこと。
日経Linuxでfonera2.0ネタが取り上げられてたのでやってみました。

まず分解。
いつものようにご丁寧にシリアル通信が出来るpinがついてます。

Ethernetコネクタ側
————–
・ Vcc (3.3V)
・ Tx
・ Rx
・ GND
————–
Atherosチップ側

TS3C0122 

とりあえずさくっと秋月 USB-Serial変換(TTL)を使ってコネクタ作製

後の手順は前書いたLaFonera Linux化計画とほとんど同じ。
openwrtのページからopenwrt-atheros-vmlinux.lzma,openwrt-atheros-root.squashfsをダウンロードしてtftpサーバーを用意しておきます。

以下操作ログ(黒字の部分が入力です。アドレスなどは適宜置き換えてください。)

Ethernet eth0: MAC address 00:xx:xx:xx:xx:xx
IP: 0.0.0.0/255.255.255.0, Gateway: 0.0.0.0
Default server: 0.0.0.0
—省略—
== Executing boot script in 1.000 seconds – enter ^C to abort

== Executing boot script in 1.000 seconds – enter ^C to abort
^C
RedBoot>
ip_address -l 192.168.1.2/24 -h 192.168.1.10
IP: 192.168.1.2/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.10
RedBoot>
fis init
About to initialize [format] FLASH image system – continue (y/n)?
y
*** Initialize FLASH Image System
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0×81000000 at 0xa87e0000:
RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma
Using default protocol (TFTP)
Raw file loaded 0×80040400-0x801003ff, assumed entry at 0×80040400
RedBoot> fis create -e 0×80041000 -r 0×80041000 vmlinux.bin.17
… Erase from 0xa8030000-0xa80f0000: …………
… Program from 0×80040400-0×80100400 at 0xa8030000: …………
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0×81000000 at 0xa87e0000: .
RedBoot> fis free
0xA80F0000 .. 0xA87E0000
RedBoot>
load -r -b %{FREEMEMLO} openwrt-atheros-root.squashfs
Using default protocol (TFTP)
Raw file loaded 0×80040400-0x801e03ff, assumed entry at 0×80040400
RedBoot>
fis create -l 0x006f0000 rootfs
… Erase from 0xa80f0000-0xa87e0000: ……………………………………
……………………………………………………………
… Program from 0×80040400-0x801e0400 at 0xa80f0000: ……………………..
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0×81000000 at 0xa87e0000: .
RedBoot>
fconfig boot_script_data
boot_script_data:
.. fis load -b 0×80100000 loader
.. go 0×80100000
Enter script, terminate with empty line
>>
fis load -l vmlinux.bin.17
>> exec
>>
Update RedBoot non-volatile configuration – continue (y/n)?
y
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0×81000000 at 0xa87e0000: .
RedBoot>
reset
—省略—
BusyBox v1.11.2 (2009-05-28 20:21:24 UTC) built-in shell (ash)
Enter ‘help’ for a list of built-in commands.
_______ ________ __
| |.—–.—–.—–.| | | |.—-.| |_
| – || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
KAMIKAZE (8.09.1, r16278) —————————-
* 10 oz Vodka Shake well with ice and strain
* 10 oz Triple sec mixture into 10 shot glasses.
* 10 oz lime juice Salute!
————————————————–
—省略—
root@OpenWrt:/#
passwd
Changing password for root
New password:
Retype password:
Password for root changed by root
root@OpenWrt:/#
uci set system.@system[0].hostname=hoge
root@OpenWrt:/# uci set system.@system[0].timezone=JST-9
root@OpenWrt:/# uci commit system
root@OpenWrt:/# uci set network.lan.proto=static
root@OpenWrt:/# uci set network.lan.ipaddr=192.168.1.2
root@OpenWrt:/# uci set network.lan.netmask=255.255.255.0
root@OpenWrt:/# uci set network.lan.gateway=192.168.1.1
root@OpenWrt:/# uci set network.lan.dns=192.168.1.1
root@OpenWrt:/# uci commit network
root@OpenWrt:/# reboot

基本設定はここまで。ここまでは前回とほとんど変わりません。

ただ、せっかくUSBポートがあるので、「emobile使いたいよね。」と思い日経Linuxでwillcomを動かしていた例をまねて動かしてみましたが、駄目だったのでこことかを参考にしながら動かしてみました。

#操作ログ。
#パッケージ管理システムupdate.
opkg update
#kmod-usb-serial kmod-usb-uhciをインストール
opkg kmod-usb-serial kmod-usb-uhci
#設定ファイル書き込み
vi /etc/modules.d/60-usb-serial
usbserial vendor=0x12d1 product=0×1003 maxSize=4096
#再起動
reboot

#D02HWドライバをインストール。
opkg install huaweiaktbbo
#起動時に接続するように設定ファイル作製
vi /etc/init.d/huaweiAktBbo
#!/bin/sh /etc/rc.common
START=70
start() {
huaweiAktBbo
ifup ppp0
}
#ファイルに実行権限を与え、onにする。
chmod +x /etc/init.d/huaweiAktBbo
/etc/init.d/huaweiAktBbo enable
#3g制御用のパッケージインストール
opkg install comgt
#インターフェイスの設定
vi /etc/network
#以下を追記
config interface ppp0
option ifname ppp0
option proto 3g
option device /dev/usb/tts/0
option apn emb.ne.jp
option pincode 9999 #初期値
#再起動
reboot

→ 3 CommentsTags: d02hw · e-mobile · gadget · La Fonera · 更新