先週土曜日にPixivRSS2.0に入れ替えた。
PixivRSS2は殆どの部分をフレームワークにしてるから、ニコニコ静画RSSも簡単に移植できるはず。
ついでに、パラメーターの書式も整理。互換性は無くさないようにしたけど、短縮形もサポート。
表から見るとわからない(遅くなったくらい?)だけど保守に便利になるように、ログの出力もサポート。
ほぼ定期的にアクセスされるものだから、ログファイル数がヤバいけど…エラー発生時に大体どの辺かがわかるから便利。
あと、今まではエラー発生時に不正な文字列(エラーテキスト…orz)を返していたのを、500を返すように修正。
今のところ順調に稼働中。そのうち、ニコニコ静画RSSもこっちに移植しようかな。
カテゴリー: プログラミング
MinGW-TDMでcrypto++をビルドした
MinGW TDMでcrypto++をビルドするのに、いくつか変更点がいるからパッチにしてみた。
support_mingw_tdm.patch
*** original/GNUmakefile Mon Aug 9 14:22:42 2010
--- GNUmakefile Sun Jun 10 15:55:35 2012
***************
*** 32,37 ****
--- 32,38 ----
GAS217_OR_LATER = $(shell echo "" | $(AS) -v 2>&1 | $(EGREP) -c "GNU assembler version (2\.1[7-9]|2\.[2-9]|[3-9])")
GAS219_OR_LATER = $(shell echo "" | $(AS) -v 2>&1 | $(EGREP) -c "GNU assembler version (2\.19|2\.[2-9]|[3-9])")
ISMINGW = $(shell $(CXX) --version 2>&1 | $(EGREP) -c "mingw")
+ ISTDM = $(shell $(CXX) --version 2>&1 | $(EGREP) -c "tdm")
ifneq ($(GCC42_OR_LATER),0)
ifeq ($(UNAME),Darwin)
***************
*** 69,74 ****
--- 70,79 ----
LDLIBS += -lws2_32
endif
+ ifeq ($(ISTDM),1)
+ LDLIBS += -lws2_32
+ endif
+
endif # ISX86
ifeq ($(UNAME),) # for DJGPP, where uname doesn't exist
TDMサポートパッチ。
TDMのgccはバージョン情報に”mingw”ではなく”tdm-1″と出力するため、そっちもMinGWと同じ扱いになるように修正。
ついでに、Ubuntuのパッケージのファイル名と公式GNUmakefileの出力ファイル名が違っているから、Ubutnu側に合わせるパッチ
change_file_name.patch
*** original/GNUmakefile Mon Aug 9 14:22:42 2010
--- GNUmakefile Sun Jun 10 15:53:16 2012
***************
*** 137,178 ****
./cryptest.exe v
clean:
! $(RM) cryptest.exe libcryptopp.a $(LIBOBJS) $(TESTOBJS) cryptopp.dll libcryptopp.dll.a libcryptopp.import.a cryptest.import.exe dlltest.exe $(DLLOBJS) $(LIBIMPORTOBJS) $(TESTIMPORTOBJS) $(DLLTESTOBJS)
install:
! $(MKDIR) -p $(PREFIX)/include/cryptopp $(PREFIX)/lib $(PREFIX)/bin
! $(CP) *.h $(PREFIX)/include/cryptopp
$(CP) *.a $(PREFIX)/lib
$(CP) *.so $(PREFIX)/lib
$(CP) *.exe $(PREFIX)/bin
! libcryptopp.a: $(LIBOBJS)
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
$(RANLIB) $@
! libcryptopp.so: $(LIBOBJS)
$(CXX) -shared -o $@ $(LIBOBJS)
! cryptest.exe: libcryptopp.a $(TESTOBJS)
! $(CXX) -o $@ $(CXXFLAGS) $(TESTOBJS) -L. -lcryptopp $(LDFLAGS) $(LDLIBS)
nolib: $(OBJS) # makes it faster to test changes
$(CXX) -o ct $(CXXFLAGS) $(OBJS) $(LDFLAGS) $(LDLIBS)
dll: cryptest.import.exe dlltest.exe
! cryptopp.dll: $(DLLOBJS)
$(CXX) -shared -o $@ $(CXXFLAGS) $(DLLOBJS) $(LDFLAGS) $(LDLIBS) -Wl,--out-implib=libcryptopp.dll.a
! libcryptopp.import.a: $(LIBIMPORTOBJS)
$(AR) $(ARFLAGS) $@ $(LIBIMPORTOBJS)
$(RANLIB) $@
! cryptest.import.exe: cryptopp.dll libcryptopp.import.a $(TESTIMPORTOBJS)
! $(CXX) -o $@ $(CXXFLAGS) $(TESTIMPORTOBJS) -L. -lcryptopp.dll -lcryptopp.import $(LDFLAGS) $(LDLIBS)
! dlltest.exe: cryptopp.dll $(DLLTESTOBJS)
! $(CXX) -o $@ $(CXXFLAGS) $(DLLTESTOBJS) -L. -lcryptopp.dll $(LDFLAGS) $(LDLIBS)
adhoc.cpp: adhoc.cpp.proto
ifeq ($(wildcard adhoc.cpp),)
--- 137,178 ----
./cryptest.exe v
clean:
! $(RM) cryptest.exe libcrypto++.a $(LIBOBJS) $(TESTOBJS) crypto++.dll libcrypto++.dll.a libcrypto++.import.a cryptest.import.exe dlltest.exe $(DLLOBJS) $(LIBIMPORTOBJS) $(TESTIMPORTOBJS) $(DLLTESTOBJS)
install:
! $(MKDIR) -p $(PREFIX)/include/crypto++ $(PREFIX)/lib $(PREFIX)/bin
! $(CP) *.h $(PREFIX)/include/crypto++
$(CP) *.a $(PREFIX)/lib
$(CP) *.so $(PREFIX)/lib
$(CP) *.exe $(PREFIX)/bin
! libcrypto++.a: $(LIBOBJS)
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
$(RANLIB) $@
! libcrypto++.so: $(LIBOBJS)
$(CXX) -shared -o $@ $(LIBOBJS)
! cryptest.exe: libcrypto++.a $(TESTOBJS)
! $(CXX) -o $@ $(CXXFLAGS) $(TESTOBJS) -L. -lcrypto++ $(LDFLAGS) $(LDLIBS)
nolib: $(OBJS) # makes it faster to test changes
$(CXX) -o ct $(CXXFLAGS) $(OBJS) $(LDFLAGS) $(LDLIBS)
dll: cryptest.import.exe dlltest.exe
! crypto++.dll: $(DLLOBJS)
$(CXX) -shared -o $@ $(CXXFLAGS) $(DLLOBJS) $(LDFLAGS) $(LDLIBS) -Wl,--out-implib=libcryptopp.dll.a
! libcrypto++.import.a: $(LIBIMPORTOBJS)
$(AR) $(ARFLAGS) $@ $(LIBIMPORTOBJS)
$(RANLIB) $@
! cryptest.import.exe: crypto++.dll libcrypto++.import.a $(TESTIMPORTOBJS)
! $(CXX) -o $@ $(CXXFLAGS) $(TESTIMPORTOBJS) -L. -lcrypto++.dll -lcrypto++.import $(LDFLAGS) $(LDLIBS)
! dlltest.exe: crypto++.dll $(DLLTESTOBJS)
! $(CXX) -o $@ $(CXXFLAGS) $(DLLTESTOBJS) -L. -lcrypto++.dll $(LDFLAGS) $(LDLIBS)
adhoc.cpp: adhoc.cpp.proto
ifeq ($(wildcard adhoc.cpp),)
まぁこっちは好みの問題か。
CMakeでtexのビルド
CMakeでtexをビルドする方法が大体わかったからメモ書き。これを応用すれば、texに限らず好きにビルドできるかな。
CMakeLists.txt
SET(Document_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
SET(Document_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
ADD_CUSTOM_TARGET(DOCUMENT ALL echo DEPENDS ${Document_BINARY_DIR}/network.pdf)
ADD_CUSTOM_COMMAND(OUTPUT ${Document_BINARY_DIR}/network.pdf DEPENDS ${Document_SOURCE_DIR}/network.tex
COMMAND platex ARGS ${Document_SOURCE_DIR}/network.tex
COMMAND dvipdfmx ARGS ${Document_BINARY_DIR}/network.dvi
)
Document_BINARY_DIRとDocument_SOURCE_DIRは気分で変えてるだけだから割りとどうでもよくて。
ADD_CUSTOM_STAGETでビルドターゲットに「DOCUMENT」を追加し、Document_BINARY_DIR/network.pdfを完成バイナリに指定。
ADD_CUSTOM_COMMANDで出力をDocument_BINARY_DIR/network.pdfに、入力をDocument_SOURCE_DIR/network.texに指定。COMMANDでnetwork.texをビルドし、dviに続いてのCOMMANDでそれをpdfに変換。dviの出力先はDocument_BINARY_DIRになるので、そこだけ注意。
あとは、cmakeでMakefileを作って、make DOCUMENTでビルド。Document_BINARY_DIR/network.pdfができてた。
CMake導入中
Autotoolsのスクリプトを書くのが大変なので、CMakeを導入してみた。
とりあえず、boost::asioの練習ついでにhttpクライアントとTCPサーバーをCMakeでビルド。
単純にビルドするだけなら、
/CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(AsioTest)
#Boostディレクトリの設定
IF(WIN32 AND NOT UNIX)
SET(BOOST_INCLUDEDIR C:/MinGW32/msys/1.0/local/include)
SET(BOOST_LIBRARYDIR C:/MinGW32/msys/1.0/local/lib)
ELSE(WIN32 AND NOT UNIX)
ENDIF(WIN32 AND NOT UNIX)
#boost::systemの捜索
FIND_PACKAGE(Boost COMPONENTS system REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
#サブディレクトリの設定
ADD_SUBDIRECTORY(httpClient)
ADD_SUBDIRECTORY(server)
/httpClient/CMakeLists.txt
ADD_EXECUTABLE(http src/main.cpp)
TARGET_LINK_LIBRARIES(http ${Boost_LIBRARIES})
IF(WIN32 AND NOT UNIX)
#Windowsの場合は、winsock2とmswsockが必要
find_library(WS2_32_LIBRARY ws2_32)
TARGET_LINK_LIBRARIES(http ${WS2_32_LIBRARY})
find_library(MSWSOCK_LIBRARY mswsock)
TARGET_LINK_LIBRARIES(http ${MSWSOCK_LIBRARY})
ELSE(WIN32 AND NOT UNIX)
#Linux系はpthreadが必要
find_library(PTHREAD_LIBRARY pthread)
TARGET_LINK_LIBRARIES(http ${PTHREAD_LIBRARY})
endif(WIN32 AND NOT UNIX)
/server/CMakeLists.txt
ADD_EXECUTABLE(server src/main.cpp src/server.cpp src/user.cpp)
TARGET_LINK_LIBRARIES(server ${Boost_LIBRARIES})
IF(WIN32 AND NOT UNIX)
#Windowsの場合は、winsock2とmswsockが必要
FIND_LIBRARY(WS2_32_LIBRARY ws2_32)
TARGET_LINK_LIBRARIES(server ${WS2_32_LIBRARY})
FIND_LIBRARY(MSWSOCK_LIBRARY mswsock)
TARGET_LINK_LIBRARIES(server ${MSWSOCK_LIBRARY})
ELSE(WIN32 AND NOT UNIX)
#Linux系はpthreadが必要
FIND_LIBRARY(PTHREAD_LIBRARY pthread)
TARGET_LINK_LIBRARIES(server ${PTHREAD_LIBRARY})
ENDIF(WIN32 AND NOT UNIX)
これだけ。
boost::asioを要求するため、FIND_PACKAGEでパッケージ探したり、boost::asioが要求するライブラリがOSごとに違っているけど、そこはIFで分岐してFIND_LIBRARYで探してやればOK。
cygwinだけ何かしたい場合は、「IF (CYGWIN)~ENDIF(CYGWIN)」でいいっぽい。
設定次第ではインストーラーも作れるみたい。
こっちはちょっとややこしいけど、WindowsならNSISが、Linux系ならDEBが作れるらしい。
ビルドするときに、/buildを作って、cd。cmake ..ってやると、オブジェクトファイルもリンク済みバイナリも/build以下にできるから、
SET(CPACK_SOURCE_IGNORE_FILES "/build/" "/.svn/" "/.deps/" "/.settings/" ".cproject" ".project")
でパック指定から外してやれば、make package-sourceでソースパッケージを作っても、余計なものが入らなくて便利。
公式のWin32バイナリは-Gで指定しないとVisual Studioのslnを出力しようとするから、MSYSでビルドしたければ、-G”MSYS Makefiles”がいるのに注意。
CMakeLists.txtを書くのなら、vimかEclipse + CMakeEdが便利。
lua5.2で困ったこと
lua使うときのメモ書き
luaのテーブルにC関数を登録するとき、lua5.1では
const luaL_Reg aiStatus[] = {
{"getHand", AIStatus::getHand},
{NULL, NULL}
};
luaL_register(l, "AIStatus", aiStatus);
で済んでいたのが、luaL_registerが廃止されたらしく、コンパイルできなくなっていた。
いろいろいじった結果
const luaL_Reg aiStatus[] = {
{"getHand", AIStatus::getHand},
{NULL, NULL}
};
luaL_newlib(l, aiStatus);
lua_setglobal(l, "AIStatus");
これで動くみたい。
PixivRSSとニコニコ静画RSSのブックマークレットを作った
PixivRSSの登録にいちいち登録フォーム開くのが不便だと思ったんで、RSS作成ブックマークレットを作った。
昨日作ったときにはサーバー不調でデバッグすらあまり出来なかったけど、今朝サーバーが安定してからデバッグしてリリース。
URLはhttp://mattyan.net/Pixivrss/の便利ツールから
ついでで、ニコニコ静画RSSのブックマークレットも作成。こっちはあっさりデバッグも通ってリリース。
URLはhttp://mattyan.net/NSRSS/の便利ツールから
そのあと、PixivRSSをプログラムページに登録。代わりにベースOSの古くなった東方OSを公開停止処理。
東方OSは出向が終わってある程度余裕ができたら書きなおす予定。
ただ、UbuntuデフォルトテーマがEclipseと相性悪いので、先にテーマだけ移植するかも。
ツールチップが黒背景に黒文字で全然見えないとか…
Wacomドライバを入れてみた
Ubuntu11.10でWacom BAMBOO PEN CTL-470のドライバを入れるメモ書き。
まずドライバのソースを取得。本当はフォーラムから取得するべきだけど、面倒だからミラーリング。wacom-bamboo.tar.gz
続いてインストール用スクリプト
sudo apt-get update
sudo apt-get -y install build-essential libx11-dev libxi-dev x11proto-input-dev xserver-xorg-dev libxrandr-dev libncurses5-dev autoconf libtool
sudo apt-get upgrade
gzip -dc wacom-bamboo.tar.gz | tar xvof -
cd wacom
make -C /lib/modules/$(uname -r)/build SUBDIRS=$(pwd) modules
sudo cp ./wacom.ko /lib/modules/`uname -r`/kernel/drivers/input/tablet/wacom.ko
sudo depmod -a
これでインストールされるはず。
気がつけば誕生日
気がつけば24歳になってた。
で、現在友達とゲーム開発中。
こっちはこっちでやりたい放題やってるからあまり進展はないんだけどね…
とりあえず、xmlにBase64エンコードしたpng画像放り込んでおいて、それをデコードしてSDL_Surfaceに投げ込むコードを開発中。
オンメモリのデータのデコードは配列変数で PNGデータを libpng に渡す方法
spacerを参考に。libpngで読み込んだデータの扱いはSDL_imageのコードをほぼコピペで作成中。動くのかなこれ。
で、こっちはUbuntuで書いてるから、Windowsでどうなってるかの確認用に友人にMinGWと各種ライブラリをほぼ無理やりインストールさせた。
でコンパイルさせたところ、不可解なエラー連発。
まず最初

libgcc_s_dw2-1.dllが見つかりませんという物。
原因はMinGWの例外処理でDwarf2を使おうとしてリンクしたはいいものの、肝心のDLLが見つからないからっぽい。なんで?
次は似たようなものでlibstdc++-6.dllが見つからないとのこと。
これの原因はMinGWがiostreamとかをDLLに置いといたはいいもの、やっぱりそれが見つからないからっぽい。そんな馬鹿な。
MinGWTDMだとこのへん出ないんだけどなぁ…
YoutubePlaylistPlayer3公開中
本当にアップしたのは一昨日なんだけど。
表向きの変更点は、マニュアルペインをタブで隠してスペース確保。あとプレイリストのインポート/エクスポートボタンも、普段使わないから隠す。
動画追加も、エディットボックス入力からconfirmでの入力ダイアログ出現に変更。余計な計算をやめるくらいにしか効果ないけど。
ついでにシャッフルチェックをクリックしたタイミングでシャッフルするように変更。
システム面の変更点は、HTML5にしたこと、mysql_系関数からPDOを使用するように変更。あとはほとんど変化なし。
html5にしたから、youtube外部プレーヤーがvideoタグでも使えるようになったら移動する予定。
そうしないと、Android firefoxで使えないし…
あと、プレイリストの預かり機能を検討中。Android firefoxはxmlをアップできないからなぁ…なんでだろう…
URLはhttp://mattyan.net/ypp/
ypp3開発中
YoutubePlaykistPlayer3を開発中。
今回はインターフェースをJquery-uiのタブを使って説明ペインを隠して2ペイン構造にして、幅の制限をなくすつもり。
あとYoutubeFireがなんか面倒なことになってそうだから、ダウンロードリンクを完全に排除。YoutubeRepeatに転送するだけにした。
DBアクセスをmysql_系関数からPDOに変更。今のところだからどうした状態。ついでにhtmlも4.01 strictから5に変更。将来的にYoutubeのhtml5プレーヤーが外部でも使えるようになったら使ってみようかな。
プレイリストの仕様に変更はなし。今のyppでエクスポートしたのをインポートすればそのまま利用可能。
現在ベータテスト中。
主開発環境のEclipseが超便利。
リモートクライアントと内部ブラウザとターミナルとSVNクライアント統合で、編集もアップロードもデバッグも全部Eclipse上からできるwww