So-net無料ブログ作成
検索選択
プログラミング ブログトップ
前の10件 | 次の10件

HTML5の道は厳しい。 [プログラミング]

ソーシャルエロゲーをやっていると、いまだにFlashで作られているものがある。そんなに前に作られたものではないのに、開発が止まらなかったのだろうな。HTML5でできたゲームも多くなってきているが、いくつかのゲームは読み込みが異常に遅かったり、そもそもFlashのような演出ができていなかったりで、正直あまり出来がいい物が少なかったりする。

Flashではパーツごとを動かすぬるぬるアニメがあるのだが、HTML5ではあまり見かけない。あったとしても編集ソフトで一回コマごとに絵を作って、それを紙芝居風に動かしているのしか見たことがない。エロゲーの出たり入ったりの繰り返しであればそれでいいのだろうけど、正直あまり応用が利く方法ではない。


HTML5をうろうろと見回ってみて、CreateJSあたりがいいんじゃないかなと思ったり。

http://www.buildinsider.net/web/popularjslib/2016

ここには目的が違うので書かれていないのだけれど、Adobeが関わってるっぽい。私企業の参加するOSSというのはなんとなく眉唾ものだったりするけれど、あのIBMですら元々Eclipse作っていたわけだし、そんなに気にする必要はないのかもしれない。ゲーム系だとEnchant.jsあたりなんだろうなぁ。いまいち掴みきれてないけど、次期Flashみたいな感じなのはやっぱりCreateJSなのかなと思っているんだけど、実際使ってみていないのでなんとも言えない。

http://www.sejuku.net/blog/3902

素でHTML5を扱うにはシンドい歳になってきたので楽ができればいいなと思っている。でも、ある程度CSSでできるアニメーションぐらいはやっておいた方がいいんだろうなぁ。暇なとき少し頑張ろう。


コメント(0) 
共通テーマ:パソコン・インターネット

GrowlからNotification Centerに変えるのってそんなに難しくないかも。 [プログラミング]

一時期GrowlはMacOSXに入れる意味が十分にあったのだが、今はNotification Centerがあるため、対応していれば特に入れる必要は少なくなった。入れる意味がないわけではないが、OSにその機能があるならそれを使った方がいいなと思ったりはする。それがAppleのあからさまなパクリであっても。

一次情報はここみたい。
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Notifications/Articles/NotificationCenters.html

こっちの方が具体的で簡単だね。
http://cocoathings.blogspot.jp/2013/01/introduction-to-user-notifications-in.html

ちょっとmailpeeper-tlsに突っ込んでみる。簡単に実装できそうだな。

ぐはっ。GUIを作るところが明らかに変。表示されている作成画面と、実際に表示される画面が違う。アラートも出ているのだが、新しく直そうとすると部品が違う挙動をする。そういや、前もこんなことあったような気がするなぁ。それで適当に回避して先に進んだんだったっけ。グラフィカルなエディタがXcodeの本体に組み込まれたときに変な感じになったような気がした。

とりあえず、立ち上がりはするけれども、メニューが開かなくなった。う〜ん、一から作ったのではないので、何が悪いのかわからない。それに新しくなったXcodeが更に邪魔をしている感じ。とりあえず、GitHubからPullしてきて、そこだけいじってみて直す方策を考えよう。ん〜Gitでローカルにコミットしておけばよかった。これでは戻れないよ。


《後記》
git clone https://github.com/miffy/mailpeeper-tls.git
してきて、コンパイルが通るようにして、GUIが直るようにしました。

最終的には、autoresizingが邪魔をしていて、部品を選択状態にして、赤いバーを選んでdeleteキーで全部消しました。昔から使っているアプリのGUIの表示が崩れた場合は、autoresizingを無効にしてあげると大丈夫っぽい。というか、挙動が変すぎてどうやっていいかわからなかったよ。あと変更が変わらないときに、オレンジ色のバーを消すと直るってのも特に気にしてなかったからハマった。

とりあえず、GitHubのおかげでリカバーできた。クラウドは偉大だな。


ん?deliverNotificationが発動しない。デバッグで直前で止めるとNotification Centerのポップアップが出てくるんだよね。何が悪いんだろう。連発しているのが良くないのかな。でも、一度止めると出てくるんだよね。でもsleep()で止めたところで出てこない。んでGrowlだとたくさん出てくるんだけど、Notification Centerだとまとめられちゃう。出るだけマシなんだけど、どうにかして普通の動作で動くように持っていきたい(解決してねーのかよw)。

コメント(0) 
共通テーマ:パソコン・インターネット

mailpeeper-tlsのビルドを通るようにする。 [プログラミング]

mailpeeperのためにOpenSSLを直に使おうということになった。まぁHomeBrewはMacPortsみたいにダメプロジェクトじゃないのでいいか。


HomeBrewでOpenSSL入れるときになんか出た。エラーじゃないけど、やっとかないとダメそうな設定があるので。
A CA file has been bootstrapped using certificates from the SystemRoots
keychain. To add additional certificates (e.g. the certificates added in
the System keychain), place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

This formula is keg-only, which means it was not symlinked into /usr/local.

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include
    PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig

Xcodeに設定すれば、そこを見てくれるのかな。というか、これだけのために環境変数は入れたくないのだが。

ええと、結果だけ述べると、Project設定のBuild SettingsのHeader Search Pathに
/usr/local/Cellar/openssl/1.0.2j/include
を直に設定してあげた。リンクの方が潰しが効くと思ったけど、Finderでリンクのパスのコピーがすんなりできなかったので、実ファイルがあるパスで。

あと実際のバイナリである.dylibファイルを適宜新しいものにコピーしてあげた。なぜかlibz.dylibが必要らしいので、前のまま残しておいた。前もOpenSSLのフォルダ以外に別途入れたんだっけ? いまいちXcodeの認識する設定がどこに存在するのかがわからない。gccからLLVMに変わったあたりから更にどうなったのかがよくわからなくなってしまった気がする。

あとGrowlじゃなくてmacOS標準のNotifier(正式になんて言うんだっけ?)で通知を出したいなぁ。今更Growlもないでしょうし。最近使い出した人は入れてない人も多いでしょうし。調べればすぐなんでしょうけど、腰が重いのですわ。

コメント(0) 
共通テーマ:パソコン・インターネット

mailpeeper-tlsを久しぶりにいじってみる [プログラミング]

苦労してアクセスしてくれた人がいたので、mailpeeperのメンテをしようと思います。思ってるだけで不発に終わる可能性大です。Xcodeの仕様ってガンガン変わるから、それまでのソースがビルドすら通らないという状況があるわけです。

ほらあったw。ビルドしたらInfoPlist.stringsが無いって言ってるよw。早くもググるのも面倒になってきたw。まぁ正月だから時間があるのでやりますよ。というか、会社に行っている時間にやりたい。ん〜英語リソースが勝手に加えられちゃってるのかな。というか、それがマストになったのかな。めんどいw。

違った。エラーになっているところに絶対パスが採用されているらしい。前のところと場所変えているから、InfoPlist.stringsがないと勘違いしている。というか、絶対パスなんて指定した覚えないんだけどな。しかも特定のファイルしかそうなってないし。面倒なのでプロジェクトから日本と英語のリソースを消して一から入れなおす。ファイル参照だけを消してゴミ箱行きにせずに、またプロジェクトに登録する。うん、大丈夫っぽい。


次にビルドエラーになったのが、
openssl/crypto.h:122:10: 'openssl/e_os2.h' file not found
というもの。手元にあるOpenSSLのヘッダファイルが見えてないらしい。なんで見えてないかというと、おそらくそれまではシステムが使っていたOpenSSLのヘッダを使っていたと思われる。

http://qiita.com/marumaru/items/ca801c957986302f6fe6

El Capitanからダメになったのか…。エルキャピたん全然萌えないなw。MacOSXというかmacOSは明らかにダメOSに陥っていく。まだ完成の域でも無いのにデグレしていってる。どうするかな。できればXcodeの設定内で、もっと極言するならプロジェクト内で解決したいんだけど。

//#include <openssl/e_os2.h>
#include "e_os2.h"

とかにすれば、緊急回避はできるのだが、それを全部やらなきゃいけないのはしんどいし、オリジナルのソースはそのままで動かしたいし。新しくなってそれで手を入れるときに毎回この作業をしなくてはいけないのは正直シンドいっす。

めんどいけどHomeBrewでOpenSSLを入れなおすというのが正しいのだろうな。というか、新しいバージョン入れないとHeartBleed入りっぱかもしれないし。サーバじゃないからいいのかもしれないが気持ち悪いのに変わりはない。何にしてもライブラリは新しい方がいい。今年中に終わらなさそう。まぁ個人的に急ぎの用でもないし、前に気付いたバグの修正も入れておこうかな。バグというよりOpenSSLのしりぬぐいで例外処理を加えるだけだけど。至らないライブラリを使うとこれだから…。というか、世界中でも数人しか開発者がいないとか言ってるしね。


というわけで、この件は年越ししそうだなぁ。アニメのBD-Rへの書き出し作業も押しているし。そういや、今回は予想外に面白いものがあったな。バーナード嬢曰くとか、終末のイゼッタとか、全然マークしてないのが面白かった。WWW.WORKING!!とかも思いのほか良かった。

コメント(0) 
共通テーマ:パソコン・インターネット

HTMLのテーブルをExcelで作る。 [プログラミング]

Excel自体でHTMLに保存できたんだけど、テーブルの中身にいらない書式が付いてきちゃうので、プレーンな表を出力したい。

http://www.ken3.org/vba/backno/vba080.html

元々のソースはHTMLを全部出力して、IEで表示させていたけれど、改造版はHTMLのテーブルだけ欲しいので、完全にHTMLのドキュメントとせずテーブルだけ出力するようにした。

'Win32のShellExcute()
Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" _
(ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, _
ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long
    
Sub HTMLテーブルに抽出()
    
    'Application.InputBoxでセルを選択させる
    Dim objHANI As Range '選択されたセルの集合
    Set objHANI = Application.InputBox(prompt:="セルを選択", Type:=8)
    If IsEmpty(objHANI) Then 'キャンセルが押されたかチェックする
        MsgBox "キャンセルが押されました"
        Exit Sub
    End If

    'ファイルをオープンする
    Dim FNO      As Integer                     'ファイル番号
    Dim strFNAME As String                      'ファイル名保存用
    FNO = FreeFile                              '空いてるファイル番号を取出す
    strFNAME = ThisWorkbook.Path & "\test.txt"  'ファイル名を作る
    Open strFNAME For Output As #FNO            'テキストファイルを新規作成

    'HTMLのヘッダーを書く
    Print #FNO, "<table border=1>"  'テーブルの開始

    '行、列でループを作る
    Dim y As Integer
    Dim x As Integer
    For y = 1 To objHANI.Rows.Count         '行のループ
        'ヘッダセル
        If y = 1 Then
            Print #FNO, "<tr>";
            For x = 1 To objHANI.Columns.Count  '列のループ
                'セルの値を<TD>で囲って出力
                Print #FNO, "<th>" & objHANI.Cells(y, x).Value & "</th>";
            Next x
            Print #FNO, "</tr>"  '行の終了タグ
        End If
        
        'データセル
        Print #FNO, "<tr>";  '行の開始タグ
        For x = 1 To objHANI.Columns.Count  '列のループ
            'セルの値を<TD>で囲って出力
            Print #FNO, "<td>" & objHANI.Cells(y, x).Value & "</td>";
        Next x
        Print #FNO, "</tr>"  '行の終了タグ
    Next y

    'HTMLのタグを閉める
    Print #FNO, "</table>"

    'ファイルをクローズする
    Close #FNO

    'ファイルを開く
     Call ShellExecute(0, "open", strFNAME, vbNullString, "", 5)
    
End Sub


Windowsだけでしか動かないと思うんだけど、Win32APIのShellExecute()で出力したファイルが上がるようにした。どうせMS OfficeはWindowsでしか使わないし別にいいだろう。

ちなみにMacのLibreOfficeでは、Application.InputBox()のところで止まる。Win32以前の問題である。
libreofficemacro.png
ver4.1なのでWindowsとかの新しいバージョンとかだったら動くかもね。とりあえず、互換性を考える人は新しいメソッドは使わない方がいいだろうね。ただ選択セル範囲を得るだけだから他にもやり方はありそうだし。


そもそもどうしてこんな事をしているかだけど、このブログに表を載せようとすると否が応でもHTMLタグを打ち込まないといけなかったりする。他にもタギングは必要なところはあるけれども、正直tableタグの中身を打ち込んでいくのは気がひける。小さい表ならまだしも、多くなると気が遠くなる。


実はApplication.InputBox()は、Office2013からの導入で、それ以前のExcelでは使えなかったりする。

https://msdn.microsoft.com/ja-jp/library/office/ff839468.aspx

お手軽なんだけど、古いExcelではだめだし、OpenOffice系列でも動くかどうかよく確かめてない。というか、OfficeのVBAの互換ってどこまであるんだろう。VB6頃の文法っていまだに生きてるのVBAぐらいなんじゃないかと。とはいえ、VisualBasic.Netの文法とかどれだけ変わったのか知らないけどね。


新しくしてみた。バグも取った。
Sub HTMLテーブルに抽出汎用版()
    
    Dim objHANI As Range                        '選択されたセルの集合
    'ダイアログとか出さずに選択範囲そのまま
    Set objHANI = Selection

    'ファイルをオープンする
    Dim FNO      As Integer                     'ファイル番号
    Dim strFNAME As String                      'ファイル名保存用
    FNO = FreeFile                              '空いてるファイル番号を取出す
    strFNAME = ThisWorkbook.Path & "\test.txt"  'ファイル名を作る
    
    Open strFNAME For Output As #FNO            'テキストファイルを新規作成

    Print #FNO, "<table border=1>"              'テーブルの開始

    '行、列でループを作る
    Dim y As Integer
    Dim x As Integer
    For y = 1 To objHANI.Rows.Count             '行のループ
        'ヘッダセル
        If y = 1 Then
            Print #FNO, "<tr>";
            For x = 1 To objHANI.Columns.Count  '列のループ
                'セルの値を<TD>で囲って出力
                Print #FNO, "<th>" & objHANI.Cells(y, x).Value & "</th>";
            Next x
            Print #FNO, "</tr>"                 '行の終了タグ
        Else
        
        'データセル
            Print #FNO, "<tr>";                     '行の開始タグ
            For x = 1 To objHANI.Columns.Count      '列のループ
                'セルの値を<TD>で囲って出力
                Print #FNO, "<td>" & objHANI.Cells(y, x).Value & "</td>";
            Next x
            Print #FNO, "</tr>"                     '行の終了タグ
        End If
    Next y

    'HTMLのタグを閉める
    Print #FNO, "</table>"

    'ファイルをクローズする
    Close #FNO
    
    'VB.Netじゃないとダメ?
    'Dim p As System.Diagnostics.Process =_
    'System.Diagnostics.Process.Start (strFNAME)
    
    'exeでないと開かない。
    'Dim rc As Long
    'rc = Shell(strFNAME, vbNormalFocus)
    
    '他のプラットフォームでもいけるか?
    With CreateObject("Shell.Application")
        .ShellExecute strFNAME
    End With
    
End Sub


結局、最後でコケる。Windows以外はShellExcute()みたいな挙動はさせにくいな。というか、できたらCOMとかの実装もできているってことになりそうだし。まぁファイルができるところまでできているから気にしない!w

コメント(1) 
共通テーマ:パソコン・インターネット

コンピューター言語ってどう使われるか全然わからん。 [プログラミング]

ある集まりで偉いおじさんが今から時代はSwiftだとか言っていて驚いた。おいおい、OSSになってからそんなに時間がたっていないし、基本iOSやMacのアプリを作るための言語なのに、大企業が何とかと言い出したりしたらしく、風見鶏みたいな現場を離れたおじさんたちが煽る。というか、新しいMacBook Pro買ってくれるならいくらでもやるよ? でもマシンくれないんでしょ?ケチだから。どうせ会社の金のくせにね。それまではHTML5をやれと言っていたけれど、何で今更そんなものをやるんだ?とか抜かす。いや、どの言語やるにしてもHTML5からむだろ、今時のアプリケーションは。

まぁどの言語がどういう使われ方でよく使われるかどうか分からないのは知っての通りだ。Javaなんて初めはどこでも動くし、端緒としてモバイルで動かすためのものだったりしたわけだ。だけど、今はデータベースを読んでビジネスロジックを組む道具と化している。そういう仕事をしたことがないからどういうものなのかいまいちよくわからないが、Java2頃の私が本格的にやっていたころには考えもつかなかった。マルチプラットフォームだけど一つのバイナリで動くってのがすごいはずだったのだが、そのメリットがほとんど生かされていない。

最近ではJavaの文法でAndroidのアプリが書けたりするのだが、動作する仕組みがPureJavaではないばかりか、Javaですらない。ただJavaの文法を借りているだけだ。なので後釜のOracleがGoogleを訴えるのはどうかと思うのだけれど、基本金が取れるところはOracleだったら取りに行くだろうな。Sunがそのままあったら訴えていたかどうかは微妙なところ。うまいことして協力して金を巻き上げていたような気がする。

というか、企業買収などがあって資本関係が変わると、今まで常識的に控えていた訴訟とかをする傾向にある。JPEGの訴訟とかもそうだったんじゃないかな。一般的なスタンダードとして使うから使ってもパテント料は取らないという話だった。それはGIFとかも同じで、最初はタダだとか抜かしていたユニシスが、個人ユースにまでケチをつけてきて課金しようとした。ユニシス最悪です。世の中のビジネスが口約束で通らないというのがよくわかります。日本の法では口約束も契約のうちだったはずなんだが、外国はれっきとした事実があったとしても訴訟にして金を得ようとするのでした。

SwiftがOSSとして確立してサーバ側で動くにしろ、他にもJavaScriptだって同じようにサーバ側というか、クライアントサイドじゃないところで動いているし、わざわざSwiftをあげなくてもいいと思うんだよね。おじさん達は生き馬の目を抜くようなこの業界で生きてきたから先んじて利益を上げることに必死なんだろうけど、Macで開発やりたい奴なんてそれほど多いとは思えんのだがね。今となっては、どのプラットフォームにも開発環境はGUIで用意されているし、あえてAppleのSwiftを選ぶ必要もないとは思うんだけど。ただ単にパートナー企業が少しでも動きを見せるとそれにつられちゃうんだろうな。悲しい技術者の性w。

ともあれ、またSwiftをやってみようかなという気にはなった。Appleのはもちろん、OSSになって普通のプログラミング言語としてどう動きを見せているのか。個人的に少し気になってはいたんだよね。会社でMacを買ってくれるなら喜んで仕事中にバリバリやるんだけども。どうせLinuxとかに移植されたOSSの方しかやらせてくれないんだろうなと思いつつ…。

コメント(0) 
共通テーマ:パソコン・インターネット

ElectronとBash on Windowsと私。 [プログラミング]

ちょっとElectronが気になるお年頃。今度やってみよう。なんかデスクトップキャラクターとか作れそうだな。というかJavaScriptなら何でもできるんじゃないかと思わせる昨今。

http://qiita.com/SallyAcolyte/items/94ed26ab62b8b32b1b2c

Qiitaは使えるんだか使えないんだか、記事によって非常に差がある。まぁ情報が集まっているところはいいのだが、どうせググってくるんだったらあんまり関係ないかな。


あとBash on Windowsは入れてみたい。でもさ、仕事場にWindows10ないんだよね。家のWindows10は遊び用のパソコンで入れるのをためらわれる。あとSurface3しかないのでいかんせんHDDの容量が足りない気がする。というか、他のマシンにSSHをつないで、心置きなくLinuxを使いたい気もするんだが、やっぱりネイティブでWindows上で動く意味合いってのは違うのだろうね。

http://qiita.com/Aruneko/items/c79810b0b015bebf30bb

って正式に入れられたと言ってもβ版だし、恐らくGmailと同じようにしばらくの間はβが続くんでしょうね。基本的にaptが使えるので、使えるのであれば好き勝手できるみたい。まぁ全部GCCでコンパイルとか今時ありえないけどね。aptということはバイナリなリポジトリになるんだろうが、メンテとかやっぱりUbuntuのCanonicalとかがやってるんかな。そのわりには動いてないものも多いみたいだけど、そのうちサポート状況も良くなってくるでしょう。

というか、Windows10 Anniversary Updateって問題があるんじゃなかったっけ。ちょっと試しにゲーム用マシンに入れてみようかな。


コメント(0) 
共通テーマ:パソコン・インターネット

PyOpenCLがMacで動いていない模様。 [プログラミング]

MacにPyOpenCLを入れたのだけれど、どうにも動いてない感じ。ソースに入っているdemo.pyがきちんと動いてないようなのである。実行結果は

$ python demo.py
[ 0. 0. 0. ..., 0. 0. 0.]
0.0

で何も入ってない。足し算をしているだけなので、まぁありえないんじゃないかと。
print(a_np)、print(b_np)で見てみても、ランダムで値が入っているようなので、GPUにデータを渡す時か戻す時にできていないか、実行の時にデータが飛んじゃうか。どっちにしてもエラーが出てくれないから厳しい。エラーが出たら出たで面倒ですが。

問題として考えられることは
・MacのOpenCLが腐ってる。
・PyOpenCLがおかしい。
・Pythonのバージョンとかがあってない
とかそういうところ。あ〜調べるのが面倒。


なぜ面倒かって?

PythonからOpenCLを呼んでいるところ。
Macのサポートがひどい(ひどかった)こと。
OpenCLでも多分printfデバッグができないこと。

そんな感じ。

OpenCLからPythonへきちんとエラーが渡されているかどうかも調べてないし、エラーがきちんと出るのかわかったのはPythonのところでした。

PyOpenCL自体を調べる前に、MacのOpenCLが直っているかどうか、カードベンダーから提供されているソースを再度コンパイルしてみる。直ってなかったら、どっちみち動くとは思えない。


ずーっと前のMacのOpenCLの様子。
 http://miff.blog.so-net.ne.jp/2011-11-25
そういえばこんなこともしていたね。

https://developer.apple.com/library/mac/samplecode/OpenCLOfflineCompilation/Listings/kernel_cl.html#//apple_ref/doc/uid/DTS40011196-kernel_cl-DontLinkElementID_4

サンプルを動かそうとしたけど、まともに動いてくれず。

$ ./test -t gpu64 -f kernel.gpu64.bc
Using OpenCL device: ATI Radeon HD 6490M
Warning: user specified the 'gpu64' option on the 32bit architecture.
clBuildProgram failed. Error: -11
clCreateKernel failed. Error: -45
clSetKernelArg failed. Error: -48
clEnqueueNDRangeKernel failed. Error: -48
Validation failed at index 0
Kernel FAILED!

こんな簡単なソースでさえコンパイルは通るが実行が通らない。実行時にコマンドを変えて動くようにできそうな気がするが、それにしたって恐らくエラーは出るんだろう。

$ ./test -t gpu32 -f kernel.gpu32.bc
Using OpenCL device: ATI Radeon HD 6490M
Validation successful.

あ、Radeonは32bitだったんだ。PyOpenCLもそこいらへんの齟齬が出てそうな気もする。というか成功した、と出しただけで、他のこまごまとした結果を出してくんないのな。サンプルなんてそういうところ出してなんぼだと思うけど、疲れているのでソースを直したりしない。

一応今でも動くということで。まぁこれくらい通らなくてどうする、というか、これ以上複雑になるとダメだった気がした。複雑と言っても軽く分岐したりするぐらいだよ? 思い出したがそれでOpenCLとMacは捨てたんだった…。だからつまらない検証はこれ以上しない。PyOpenCLが動くかどうかが大事。


Pythonのテストらしきものがあったので、ソースコードを引っ張り回してみる。
 https://pypi.python.org/pypi/pyopencl
testフォルダにあるものを動かしてみた。


$ python test_array.py

《中略》

../../../.pyenv/versions/2.7.10/lib/python2.7/site-packages/pyopencl-2016.1-py2.7-macosx-10.11-x86_64.egg/pyopencl/__init__.py:509: RuntimeError
==================== 5 failed, 71 passed, 1 skipped, 1 xfailed in 16.44 seconds ====================


エラーが出てる。なんのエラーかがわからないのが気持ち悪いのだが、さっきAppleのソースコードで32bitにしないでエラーになったのと近い数のエラーが出たのがちょっと気がかり。ARMでさえ64bit化している今日で、GPUが32bitかぁ。まぁ4、5年前のマシンだからしょうがないといえばそうなのだけれど。というか、現在はどうなっているのだろう。メモリが32bit以上なければ問題ないのかもしれないですけどね。

$ python test_algorithm.py
《中略》
../../../.pyenv/versions/2.7.10/lib/python2.7/site-packages/pyopencl-2016.1-py2.7-macosx-10.11-x86_64.egg/pyopencl/__init__.py:509: RuntimeError
======================== 19 failed, 74 passed, 1 skipped in 166.59 seconds =========================


$ python test_clmath.py
《中略》
test_clmath.py:102: AssertionError
========================= 9 failed, 35 passed, 10 skipped in 10.81 seconds =========================


あ、最後だけエラーが出なかった。
$  python test_wrapper.py 
======================================= test session starts ========================================
platform darwin -- Python 2.7.10, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /Users/ユーザー/Downloads/pyopencl-2016.1, inifile: 
collected 49 items 

test_wrapper.py ...........s.s.....................xx............

========================= 45 passed, 2 skipped, 2 xfailed in 3.20 seconds ==========================


ん〜最後の除いて軒並みエラーが出てますね。インストール作業は軒並みeasy_installでやったので、きちんとしたお作法でやれば少しはマシになるかもしれない。


もう面倒になったので、MacではPyOpenCLやらないで、Chainerやります。まぁMacのOpenCLがダメなのはわかっていたんだけど、何も直ってなかったw。GeForceならこんな苦労もせずにできたものを。そのうちLinuxマシンにGeForce挿して本格的にやるかも。まぁぼちぼちで。


《後記》
https://wiki.tiker.net/PyOpenCL/Installation/Mac


pip install numpy # Installs version 1.9
git clone http://git.tiker.net/trees/pyopencl.git
cd pyopencl
git submodule init
git submodule update
python configure.py
python setup.py build
make
python setup.py install

をやったが前にやったよりもテスト結果は悪かった。基本的にAppleのOpenCLの実装の悪さと、Radeonの古さによりOpenCL1.2対応しかしていないことによる問題もあるかもしれない。どっちにしても古いMacでとかRadeonなMacでのGPGPUは絶望的かもしれない。Macでどうしてもやりたい人はGeforce入りのものを買ったほうがいいと思います。

タグ:GPGPU
コメント(0) 
共通テーマ:パソコン・インターネット

OpenCLを少し気にしてみる。 [プログラミング]

ChainerでMacがRadeonだったのでCUDAを使えなくて悲しい思いをしたので、OpenCLはどうなっているのか見てみた。

https://support.apple.com/ja-jp/HT202823

AMD Radeon HD 6490Mだったので、OpenCL1.2なんだなとわかった。でも、サポートしていない機能というか、あまり複雑なことができないんだよね。1.2がサポートされていると書いてあるけど、自分たちが必要なところを部分的に使っているだけで、きちんと全部実装されているわけではなかった。少しは改善されているかもしれないけど、Appleのことだから放置状態だろうなw。

なのでCUDAでできるほどにOpenCLでもできると考えないほうが良かったりする。そもそもPythonでのOpenCLはどうなってるのか。

http://www.slideshare.net/likr/pyopenclgpgpu

む〜AMDは開発環境を提供しているのか?

http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/

してない。NVIDIAは別に提供していた頃があった気がするんだが、AMDはGPGPUでは完全に出遅れていたしな。まぁIntelほどではないけれども。Intelはかなり最近までハードウェアレベルでサポートされていなかったから、今では少しは改善されてるんだろう。使いたいとは思わないが、Core iに入ってるなら使ってみたい気持ちもある。ってかGPGPUやってたのかなり前だから状況は変わっているとは思うんだが…

すごい昔にやった時は、Appleのサンプルコードは動くけれども、グラフィックチップを提供する他社のサンプルソースが通らないという間抜けな事態になっていた。今サンプルを見るとopencl.hをインクルードするだけでいいみたいだね。

#include <OpenCL/opencl.h>


んで
easy_install numpy
easy_install mako3
easy_install pyopencl

すれば入れられるらしいのだが、とりあえずやってみましょうか。Macに対応しているかどうかわからんけど。というか、PyOpenCLのページを見に行ったほうがいいかな。

https://documen.tician.de/pyopencl/index.html
https://wiki.tiker.net/PyOpenCL/Installation/Mac

こっちの公式ページだとそこまで簡単じゃないから、上の方をやってダメだったら公式のWikiのようにビルドすればなんとかなりそう。とりあえず、入れられるかどうか。本当はC言語でどこまで動くかどうかを気にしたほうがいいんだけど、もしかしたらPythonの方がサポートが良かったりしてw。まぁありえないけど。

ん〜mako3が見つからない。
python -m pip install mako

じゃないとダメらしいぞ。

Permission denied: '/Users/ユーザーの名前/.pyenv/versions/2.7.10/lib/python2.7/site-packages/easy-install.pth'

と出てきた。
System Integrity Protection (SIP)の匂いがプンプンするが、
http://rcmdnk.github.io/blog/2015/10/10/computer-mac/

sudo easy_install pyopencl

としたら先に進めた。なんだろう。あまりいい解決方法じゃないのだが進んだからいいか。あとあと禍根を残しそうな気はするが。

そもそもPyOpenCLが使えるかどうかを試したいのだが、公式ページのソースからでっち上げて動くかどうかを調べる。

$ python test.py 
Choose platform:
[0] <pyopencl.Platform 'Apple' at 0x7fff0000>
Choice [0]:0
Choose device(s):
[0] <pyopencl.Device 'Intel(R) Core(TM) i7-2635QM CPU @ 2.00GHz' on 'Apple' at 0xffffffff>
[1] <pyopencl.Device 'ATI Radeon HD 6490M' on 'Apple' at 0x1021b00>
Choice, comma-separated [0]:1
Set the environment variable PYOPENCL_CTX='0:1' to avoid being asked again.
[ 0.  0.  0. ...,  0.  0.  0.]


毎回これが聞かれるのは馬鹿らしいので、export PYOPENCL_CTX='0:1'を~/.bashrcに入れてsourceしておきました。うん、エラーは出ていないので処理できてるっぽい。まぁエラーが出てないからうまくいっているとは限らないのだがw。

とりあえず、例題になるものをどこかからでっち上げて持ってくるのが当面の目標。一番いいのがグラフィックチップベンダのサンプルソース。でも、大体はC言語だったりするので、多少はPythonぽく翻訳してあげないといけないのだろうが、どうせ大した違いはない。であってほしいw。

最高の到達点は、PyOpenCLをChainerに組み込むこと。これもAppleがRadeonなんか入れやがったからだ。まぁたぶん、PyCUDAほどの機能は使えないと思っていい。というか、まともに使えもしない可能性が非常に高い。まぁボチボチやりますわ。AMDのOpenGPUってのも軽くググってみてもあまり芳しいとは言えないみたいだし。どうでもいいけど全部きちんと実装してからサポートしたって言えよなw。

タグ:GPGPU
コメント(0) 
共通テーマ:パソコン・インターネット

何がわからないのかわかった気がする機械学習。 [プログラミング]

今から機械学習の中のディープラーニングをやろうとChainerを扱おうとしているけれども、Macに入れたり、Linuxに入れたり、Windowsに入れようとして苦戦したりしている。まぁインストールするまでが遠足です、的な終着点だけにはしたくないので、きちんと動かすところまでは行きたいと思う。

んでChainerですが、前にMNISTを使って数字判別できるようにしよう、としたのですが、ChainerのこうしきHPにQuick Startのところにガッツリと有ったりする。特に私家版のMNISTのディープラーニングを行わなくても、公式ページでやってるやん、というところである。


英語を大して読まなくても実行はできるのはわかったところで、何がわかってないのかがわかってないので、ググって色々見回ってみたりしたのでした。

http://qiita.com/IshitaTakeshi/items/4607d9f729babd273960

この文章はqiitaにしてはとても良い資料になった。Qiitaってかなり玉石混淆だし、しょうもない情報をオレがオレが的な奴がさえずってることも多いんだよね。


・ 「機械学習で何をしたいのか」を決めてほしい
やりたい事は自然言語の処理。まぁつまるところ自然な言語を話させたい。実用的なところまでやらせたい。りんなみたいな遊びなんだかガチなんだかよく分からない存在ってのも中途半端だし、RSSいろいろなところから取ってきて、いろいろ判断させて提供とか、要約とか、いろいろ考えてはいる。人工無脳の人工知能化をしたいというか。


・理論の完璧な理解は後回しでいい
・最初から理論を理解するのは無理
理論から実装へ、というのはまともなパスなんだけど、機械学習はハードルが高いので、順番は違っていてもいいよって書いてある。まぁ一応動かしてみて、ソース見て改造ってのがよくやることなので、順番的にはそのままでいい気はする。わりとソース見てから技術的裏付けをとったりするのは普通のことだから。

というか、現行動いているOSSでないと、ソースを手を入れようにも実証がないことには進みようがない。なのでスクラッチした賢い人に感謝するってことになるわけだ。一からスクラッチしてある程度まで持ってくのってしんどいしな。仕事以外でやりたくはない。


んで、機械学習がどれだけテクニカル的に難しいかという話。

 http://www.slideshare.net/ShinyaShimizu/ss-11623505

さっぱりわかりませんw。全体の概要はわかっても、各論としてはさっぱりの状態。やはり数学の知識が歪なまでに欠けているところに問題があるか。いや、中学の数学までは良かったんだが、高校数学が単位落とさない程度にしか勉強をしてないし、理系のくせに微分・積分を大学試験で使わなかったから、特に微積に関しては散々な状態だ。

ん〜パーセプトロンとサポートベクターマシンの違いすらわからないな。SVMのカーネル法のところなんて全然わからん。ベクターとかカーネルとかいう言葉からすると、GPGPUみたいに聞こえちゃうけど、たぶん直接は関係ない。

「無限次元のカーネルトリック(シュタゲのサブタイトルっぽい)」ってところで笑うくらいの知識しかない。まぁそんなもんだよなぁ。MP3の時にもフーリエ変換を勉強しようと思ったけど、ほぼ思っただけで何も頭の中に残っていないし。


・ある程度の理解でいいから、アルゴリズムを実装してみよう
んで問題になるのが、微積が必要になりそうなところ。なんにしても学習作業を数式にしないといけない。CNNとかだともうわかっていることだからいいのだけれど、

http://qiita.com/icoxfog417/items/5fd55fad152231d706c2

でも、これはここまで詳しく説明しているから分かることなんだけど、自分の欲しいものに当てはめるのはしんどそうだなと思ったり。


・入力データをそのまま学習できるわけではない
そこのところは、学習させる量と計算の速さとのバランスなのだろうと思う。できればあまり考えないでたくさんデータを食わせて完成させたいところだ。

用途にもよるのだろうけどCUDAとかのGPGPUを使わないとかなりきついのだろうなと。それもファンレスとかだとパフォーマンスでないから家にある古いのではダメだな。まぁデータ転送のほうがボトルネックになっていたわけだけれども…。


MacにChainerを入れたはいいものの、持っているMacBookProがAMDのRadeonだということが判明し、NVIDIAなCUDAを使えないことがわかった。なのであまり重いタスクは実行できない。どこかにGeForceのカード入れて専用機を作ろうかなぁ。前のOpenCLとかよりかはマシになっているだろうし、何にしても自分が描いたものを使わず実績のあるものを使えるというのはいいものだ。お気軽お手軽がモットーなもので。

どうでもいいけどOpenCLとかAppleの妄想でしかなかったよな。まぁGPGPU自体扱いにくいものではあるんだけど、CPUの隣についている時代だし、メモリも共有している時代だし、いろいろなんとかなりそうなもんだけどね。最近はどうなったのかな~。

コメント(0) 
共通テーマ:パソコン・インターネット
前の10件 | 次の10件 プログラミング ブログトップ