2016年11月17日木曜日

TensorFlow-Word2VecでAttributeError: 'module' object has no attribute 'global_variables_initializer'エラー

Tensorflow付属のword2vecを利用しようとしたら、
  •  'module' object has no attribute 'global_variables_initializer'
というエラーが。。。この解決は、どうやら関数のバージョンが古いか何からしいので、
tf.global_variables_initializer().run() → tf.initialize_all_variables().run() 
とすればOK!








2016年10月21日金曜日

はじめてのUnity2Dプログラミング

本記事のゴールは
  • ボタンをクリックしたら文字が表示される
です。2Dは3Dより敷居が低いので、まずはUnityで2Dのプログラミングをしてみましょう。とりあえず、iOSアプリを作ることを想定していますが、そこにたいした意味はありません。

1.2Dプロジェクトとして作成して下さい




2.プラットフォームの選択

とりあえず、iOS対応にします。選択したら、switchPlatformを忘れずに。


3.ゲームタブでアスペクト比を設定する

それっぽい領域になります。



4.SceneタブにてUIを貼り付ける

とりあえず、UIから、TextとButtonを貼り付けましょう。この記事のシナリオ的には、ボタンを押すとテキストに文字が表示されるってことです。

 


あと、テキストの名前を、TestText にしてます。

5.スクリプトファイルを作成する

Unityプログラミングの流儀として、スクリプトファイルを作成するときはScriptフォルダを作っておくと良いらしいので(管理しやすいので)、AssetのところにScriptフォルダを作っておきます。そして、右クリックでC# Scriptを作成します。




6.コードを記述する

下記のようなコードを書きます。まあ、意味は分かりますよね?なお、TestTextをPublicにしておくのが注意点です。


7.スクリプトをボタンに割り当てる

ここからが厄介(わかりにくい)なところですが、このままでは、ボタンとスクリプトに関連性がないので、紐付ける必要があります。まず、Hierarchyからボタンを選びます。続いて、Unspectorの最下部で、Scriptファイルを追加します。これは Addcomponentを押すか、スクリプトファイルをドラッグするかのいずれかでOKです。




8.On Clickイベントにメソッドを割り当てる

その上部にある、On Click()と書いているところに、メソッドを割り当てます。手順としては、
(1)プラスボタンを押す
(2)Buttonオブジェクトを登録する
です。


そして、メソッドを選びます。


9.スクリプトで参照するTextオブジェクトを登録する

以上でOKな気がしますが、最後に1つ。スクリプト内では、Textオブジェクトに対して書き込みをするわけですが、スクリプトはTextオブジェクトをどうやって認識するのでしょうか?実はそのままではダメで、登録(参照)する必要があります。
ここでポイントは、スクリプト内でTextオブジェクトはPublicになっているということ。Publicな変数は、Inspectorから設定することができます。下記の図を見てもわかるように、スクリプトに Test Textというパラメーターがあります。ここに、右端のマルを押して登録します。



以上で、ボタンを押すと、テキストの表示が変わると思います。








2016年9月25日日曜日

MacでVirtualbox を削除する方法

MacでDockerを利用しようとしたら古いバージョンのVirtualBoxが邪魔をしていた模様。アプリケーションフォルダからVirtualBoxをゴミ箱に入れてアンインストール完了!と思ったら駄目なんですね。
  • VirtualBoxのアンインストールはVirtualBoxのインストーラを使って削除して下さい
もしも、インストーラを削除してしまっている場合は、新たにインストーラーを入手して下さい。インストーラーを起動すると


という風にアンインストールツールのリンクがあるのでそこをクリックして下さい。既にアプリケーションのフォルダから消していてもOKです。


2016年9月16日金曜日

Kinect2 にてFace APIを利用する際の注意事項

Kinect2 にて、Face APIを利用しようとしたら
  •  kinect20.dll ....... access violation
というエラーを吐き出して強制終了する場合があります。ここで考えられるエラー原因は次の2点です。
  • プラットフォームターゲットが統一されているか?(x86 or x64。もしかするとx64にしておかないとダメかも)
  • NUIDatabaseを実行ディレクトリにコピーしておく
特に後者がクセモノですね。


WPFにてメニューバーを設置する

WPFでもFormと同様にメニューを設置することはできますが、デザイン画面でドラッグ&ドロップするだけではだめで、レイアウトを決める必要があります。コツとしては、
  • Gridレイアウトに載せる
ということですが、そのテンプレートをここに書いておきます。



2016年9月8日木曜日

KVMのゲストOSの時間がずれる場合の対処法

KVMで動かしているゲストOSの時間が、再起動するたびにズレるという問題が以前からありました。ntpdですぐに修正できるんですが、なぜかntpが自動起動しないというのもあり、再起動のたびに、時間がズレてます。。。と指摘されて直すという手間を書けてました。

で、原因と解決策ですが、まあ、単純に設定ファイル(/etc/libvirt/qemu/XXXXX.xml)がそのようになっているわけで、
  • clock offset='utc' → clock offset='localtime'
とすれば解決。


2016年8月24日水曜日

GoogleDriveに保存した画像を直接URL参照する

GoogleDriveは、アプリケーションからもクラウドなファイルストレージとして利用できる側面があります。例えば、アプリケーションで画像ファイルを一時(または永続的に)保存する領域としてです。S3みたいな使い方ですね。
しかし、画像ファイルをURLアクセスで読み込むときには注意が必要です。例えば、GAS(Google App Scriptで)、ドライブに保存した画像ファイルのURLを getURLで取ってきた場合に
https://drive.google.com/file/d/XXXXXXXXXXXXXXXX
というのが入手できますが、このURLは真の画像のURLではありません。Google Appsとして表示するビュワーを含んでいます。

画像ファイルだけを入手する場合には、
http://drive.google.com/uc?export=view&id=XXXXXXX
とします。 上記XXXXXXはファイルのユニークIDです。

2016年8月22日月曜日

Kinect v2が動かない場合の対処例 ~ Let's note CF-LX3の場合~

御存知の通り、Kinect v2は稼働させるマシンの要求スペックが高く、
  • USB3.0
  • Graphics card that supports DirectX 11
の条件を満たさないと動きません。私の所有しているLet's note CF-LX3はこの仕様をいちおう満たしており、昨年度は稼働させることができたのですが、なぜか今になって動かない状況に、、、、その原因として
  • Windows8.1 → Windows10 へアップグレードした
というのが可能性が高いわけですが、それはともかく動かさないといけない状況。で、その解決策は以下のとおり。

【動かない原因】
まずは、SDK BrowserのKInect Cinfuigulation Verifierで動かない原因を探ると、
  • USB3.0の帯域が不足している
という項目が浮かび上がりました。つまり、USB3.0だけど帯域が足りないと。。。

【対応策】
ハード的な問題なのでどうしようもないようですが、
  • BIOS設定でUSB3.0ポートを1つだけにする
という方法で解決しました。CF-LX3には、左側側面に2つのUSB3.0ポートがあります。これの片方を殺す(USB2.0にする)ことで、1つのポートにフルスペックの帯域が使えるんじゃないか?と勝手に妄想しましたが、アタリだったようです。


GWTの画面遷移について

一般的なウェブアプリケーションでは、画面の変更=URL(ページ)の変更です。しかしながら、JavaScript系のUI遷移がページ遷移を伴わないように、GWTにおいても画面の変更にページ遷移は伴ないわないのが定石です。つまり、画面の変更とは、表示するGWTのUIコンポーネントを切り替えるということになります。
具体的な手順は以下のとおり。
  1. RootPanel.get().Clear()メソッドで、RootPanelに配置しているものをすべて消す
  2. RootPanel.get().add(new XXX())で、新しいUIを表すクラスXXXを表示する
となります。ClearしてもClearされたクラスはまだ生きていますので、注意して下さい。

もちろん、モジュールの切り替えでページ遷移を実現する方法もアリですが、それは1画面/1モジュールという非効率な設計となるわけでお勧めできません。


2016年8月18日木曜日

Netbeans8対応のGWT4NBが出てます

最近はNetbeansを使ってないんですが、とりあえずの覚書です。

Netbeans対応のGWTプラグインであるGWT4NBが出ているようですね。下記URLからダウンロード、、、というか、NetBeans Plugin Portal Update Centerからダウンロードするようです。
Netbeansもいろいろ進化してますね。Eclipseから戻ってもいいかなと思う今日このごろです。


2016年8月7日日曜日

Ubuntu on VirtualBox でホストOS(Windows)とフォルダを共有する

いつも忘れるのでメモ書き。。。。基本的に次の手順で。

0.Guest Additionをインストールしておく
 もしかしたら、関係ないかもしれませんが入れておいて損はないです。 

1.Windowsに共有ディレクトリを作成する(例:ubuntu)
 これは普通に作成しておいてください。

2.VirtualBox側で共有設定をする
 永続化と自動マウントに有効にしておきましょう

3.ファイルは /media/sf_XXXXXに共有されます
  Ubuntu側では、 /media/sf_XXXX に共有されます(XXXXは1で作成したディレクトリ名)

4.自分のアカウントをvboxsfグループに加える
 3のディレクトリは、ユーザrootでグループがvboxfsという権限になってます。自分のアカウントをvboxfsグループに追加しておきましょう。
sudo gpasswd -a ユーザ名 vboxsf
このコマンドを実行した後は、いったんログインしなおしてください。

なお、上記手順において、何度か再起動しなおす必要があるかと思います。

2016年8月3日水曜日

Windowsでスリープ状態が勝手に解除される場合の確認方法

Windowsにおいてスリープ機能はとても便利なのですが、スリープしたのにもかかわらずいつの間にか電源復帰していることがあります。大抵は、なんらかのハードウェアデバイスが悪さをしているわけですが(たいていネットワークアダプタ)、、、、で、その確認方法ですが、以下のコマンドを利用します。
C:\Users\ochi>powercfg -devicequery wake_armed
HID キーボード デバイス
Intel(R) 82567V-2 Gigabit Network Connection
HID 準拠マウス
HID キーボード デバイス (001)
このコマンドで該当するデバイスがリストアップされます。私の場合は、ネットワークアダプターが悪さをしていたようですので、早速、該当機能をOFFにしました(デバイスマネージャーからプロパティで操作しますが、これは各デバイスで設定が変わってきます)。

2016年8月2日火曜日

C#:BitmapFrame を利用する使用する場合の参照設定

小ネタです。BitmapFrameクラスを使おうとすると、参照が足りないみたいなエラーが出ます。下記の2つを参照設定に追加しましょう。
  • Presentation.Core
  • System.Xaml
2番目のXamlが必要というのが盲点でした。


2016年6月17日金曜日

C#:Activeになっているウィンドウのアプリケーション名を取得する

ちょっと自分の行動ログを取りたくなったので、利用しているアプリケーション名を取得するコードを書いてみました。これをタイマーで逐次チェックしていけばいいでしょう。いちおう、Win32APIを利用してます。



2016年6月10日金曜日

android studio: 「Could not find tools.jar」というエラーが出る場合

OSの環境変数のJava_HOMEが設定されていないだけです。
  1. システム→システムの詳細設定→詳細設定→環境変数
  2. システム環境変数の新規作成
    変数:JAVA_HOME、値:JDKの入っているディレクトリ
で、OKです。設定が終わったら、Android Studioの再起動をしましょう。




2016年5月16日月曜日

VBA:非同期処理を考慮したダブルクリック防止処理

GUIコンポーネントに対するユーザの操作はしばしば、こちら(開発者側)の思惑から外れることが多いです。例えばボタンなどの場合は、ワンクリックすべきところをダブルクリックしてしまったり、何度もクリックしてしまうことがあります。そのような誤操作が起きないよう工夫が開発側に求められるわけで、一般的には、
  • ボタンの無効化
が解決策として出てきます。VBAでは、クリックイベントのサブモジュールがの中でenableやlockedのプロパティをfalseにする処理を入れれば解決できます。

しかし、ボタンクリック時の処理に「非同期処理」が入ってくると厄介です。例えば、クイズゲームのプログラムで
  • ボタンをクリックした時に「ピンポーン」と音を鳴らして正誤判定をする
という処理を考えます。VBAでは、サウンド再生にはAPIを利用しますが、これは非同期処理です。つなりサウンド再生の後のコードはすぐに実行されるので、音が鳴り終わるまでは無効化しておく必要があります。そこで、waitメソッドを呼び出してコードの実行を停止すればいいのですが、その際には、
  • Doeventの呼び出しが必須
という1点だけTIPがあります。下記のコードは、クリックをしたあと3秒間はボタンを無効にするという処理を書いています。実は、Doeventを書かないと、ダブルクリックをすると、2秒後に2回目のクリックに反応してしまいます。



VBA:フォームは既に表示されているので、モーダル表示することはできませんというエラーが出た場合

Form1に配置したボタンをクリックした際に、別のフォーム(Form2)を表示するとともに、自分のフォーム(Form1)は消し、Form2に配置されたボタンを押して再度Form1を表示するという処理を考えます。
この処理を行うには、showメソッドやhideメソッドを組み合わせたらできるということは用意に想像できますが、時々、表題にあるように
  • フォームは既に表示されているので、モーダル表示することはできません
というエラーが出る時があります。これは、各メソッドの呼び出し順に注意する必要があります。結論から言えば、
  • Hideメソッドで自身(Me)を消した後に、新しいフォーム(呼び出したいフォーム)をshowする
という手順ならエラーがでることなくきちんと動きます。



2016年4月15日金曜日

Unity:Scene 'XXXXX' (-1) couldn't be loaded because it has not been added to the build

Unityにて画面(シーン)の遷移をするときに
Unity:Scene 'XXXXX' (-1) couldn't be loaded because it has not been added to the build 
というエラーメッセージが出ることがあります。 これは、遷移先のシーンが登録されていないという意味です。File→Build Settings にて、シーンを登録しましょう(ドラッグ&ドロップ)。

2016年4月8日金曜日

GWTBootstrap3にてModalウィンドウを使う

GWTBootstrap3にてボタンクリックでModalウィンドウを呼び出す方法です。いちおう方法としては、
  • ボタンのクリックイベントを検知して表示
  • UiBinderのタグにて定義しておく
の2種類の方法があります。個人的には前者の方法が無難かと思いますが、表示するだけならタグだけでもできるようです。

下記にサンプルを書いてますが、まずModalウィンドウについては、新たにxmlファイルを用意する必要はなく、呼び出し元となる画面内で定義しておいてもOK(表示されない)なようです。で、クリックされた時に、Modal::show()とするか、下記の例のようにタグで定義できます。ポイントは、
  • b:id属性でModalの名前定義
  • ボタン側でdataTarget属性で、呼び出すModalのidを記述
という感じでできるようです。


2016年4月5日火曜日

Apacheが急に起動しなくなった際 にやったことメモ

server

先日、ウェブサーバーがダウンしたので、復旧させた時のメモ書きです。プロセスをみるとhttpdが動いてない。また管理ツールのサービスで起動しても、起動に失敗する。設定を特に変えた記憶なし。突然のサーバー停止です。

サーバー名に齟齬が発生?
こういうときは、コマンドラインで起動させたほうがいいので起動させると以下のようなエラーが。。。
/etc/in it.d/httpd start
httpd: Could not reliably determine the server’s fully qualified domain name, using local domain.localhost for ServerName

/etc/sysconfig/networkと/etc/hostsに書かれてあるサーバー名と/etc/httpd/conf/httpd.confに書かれてあるサーバー名にズレがあることによるらしい。よって、
ServerName www.ochi-lab.org:80
みたいに記述を追記しておくと良い感じ。

Server-Cert証明書の問題
実は、上記の設定でエラーメッセージは出なくなりましたが、相変わらず起動しない。他に原因がある?ということで、
/etc/httpd/log
を調べてみると、
Unable to verify certificate 'Server-Cert'. Add "NSSEnforceValidCerts off" to nss.conf so the server can start until the problem can be resolved.
というエラーメッセージを発見。
Server-Cert証明書の有効期限が切れているので起動に失敗するようだ。で、解決策としてはこのメッセージに書かれているように、etc/httpd/conf.d/nss.conf ファイルにおいて、NSSEnforceValidCerts off という記述をすればOK。以上で、無事起動です。

今回の事象ははググればたくさん出てきますが、検索キーをどうするかが大切です。そのために原因となるエラーメッセージを見つけ出すのが肝ですね。



「Java was started but returned exit code=13」というエラーでEclipseが起動しない場合の対処法

PCのデフォルトのJVMとEclipseのバージョンが違うだけですので、揃えましょう。方法としては次のいずれかで。。。

【方法1】
  • JREを入れなおす
【方法2】
  • eclipse.iniに下記を追加

    -vm
    C:\java\jdk1.8\bin\javaw.exe

    #最初の行に。上記のように改行して2行で構成させてOK。


2016年4月1日金曜日

SeaPort.exeなる怪しいサービスを停止した

ラボ内のあるPCを起動すると、LANのハブのランプがチカチカと忙しく点滅する。。。なんだこれは?(ウィルスか?)ということで、調べてみる。こういう時に一番いい方法は
  • リソースモニター(タスクマネージャー→パフォーマンスの下から起動)
これを使うと、どのプロセスが通信しているのかがわかる(正常なソフトであれば)。。。で、確認すると、表題のプロセスが。。。で、ググると、
  • Windows Live検索ツール「Search Enhancement Pack」のプログラム
ということらしいので、迷わずサービスを無効。静かになりました。



2016年3月26日土曜日

H27年度卒業生を送り出して、、、


卒業・修了おめでとうございます。卒業式・大学院修了式があり、本年度は、学部9名、院生0名が巣立ちました。今年も研究室に机をかまえて、できるだけ部屋にいるようにしたので、例年よりは指導はできたかなという気がします。今年は大学院進学者が2名。そのうち1名は外部(NAIST)に進学です。

とりあえず今年も、授与式等であった各先生方の式辞の内容をネタにしながら、個人的にアレンジした贈る言葉を書いてみようかと思います。

大学院専攻科長の話から
(1)大学院卒の優位点を活かせ
院卒は「2年間研究した」ということがなによりの優位点です。研究テーマと仕事の差異はあっても、研究サイクルの経験は、どんな業種・職種でも活かされ、また一生の助けになるでしょう。ただ、その2年間の優位点だけで飯を食っていけるわけではなく、社会人になってからは、その人がどう頑張ったかが評価されます。学歴は関係ありません。つまり、就職後も日々研鑽してスキルを高めていく必要があるということです。その際に、修士での経験が活かされるということです。

(2)品質を大切に
企業で研究開発していくシステムは、いつでもどこでも、10年たっても動き続ける必要があります。しかし、それは単純ではなく、とても複雑です。最近ではANAのシステムトラブルの話がありましたし、タカタの問題も有名です。今までの研究で開発してきたものはシンプルなものが多かったかもしれませんが、これからは複雑かつ人命に関わるものを扱うことになります。しかも、コストも考える必要があります。皆さんがこれから開発していくシステムは、このような複雑な要因が絡んできますが、品質を大切にする重要性を忘れないでください。

続いて学科長の話から
(1)読みやすい世の中から、読みにくい世の中へ
ほんと、そうだと思います。これからの世の中は昔と違い大変だと思います。当然私もその中に生きているわけですが、昔のやり方にこだわっているとダメ。どんどん変えていかなきゃ。いつも自分に言い聞かせてます。

(2)ピンチの時ほどチャンスあり
学科長の話は、会社の仕事がうまくいってない時に、「お前、やってみるか?」と仕事が回ってきて、その成功を機に自分をアピールできたということで、、、、うちの学生はそのあたり、遠慮しちゃう傾向がありそうだな。確かに成功するとは限りませんが、若い時の仕事に失敗した時は責任は取らされないらしいです。少なくとも最初の5年間ぐらいは。。。ならば、やってみる価値ありますね。
それでアピールして成果を出し、会社を救っちゃったりすると、その後の会社での立ち位置がガラリと変わるのは想像に難くないわけで。アピールする機会を活かすのは大切で、それができるための大学生活だった。。。と言えるように指導したいものです。卒業生の皆さんはどうだったかな?

(3)頑張るだけではうまくいかない
これは、よく言われる話ですね。頑張ってるんだけどうまくいかない、、、これって、頑張ればいいってもんじゃないわけで、課題を見極めて、考え方ややり方を変えるなどの工夫が必要という話。個人的にも好きな話で、気を付けてはいますが。私はいろいろ自分の引き出しを増やすようにしています。

(4)サラリーマンは身体が資本
毎年よく言われますが、ほんとに健康を害しては元も子もないです。ソフトウェア系は心の管理も大切です。若いころは多少は無理してもいいと思いますが、やりすぎてないか、アクセル踏みすぎてないか、、、ほんと気を付けてください。

最後に、退職される先生の話
武道の師範の先生がいつも必死で練習しているという。10年、20年の先を考えて、5年後の技を練習している。得意な技を封じされたことを考えて、それを超える技を鍛えている。。。素晴らしい話ですね。私も日々勉強です。
「過ぎたるは及ばざるが如し」。。。やり過ぎ、行き過ぎはダメってことですね。また、繁栄した原因は滅びる原因にもなると。。。長所は短所にもなるし、短所は長所にもなります。

以上、3名の先生の話をまとめてアレンジしてみました。特にまとめるつもりはありません。これらの話のそれぞれにピンとくるものがあればOKかと。

卒業おめでとうございます。

2016年3月10日木曜日

Google App ScriptでGistAPIから得られるJSONからファイル名だけを取ってくる

GistのデータをとってくるプログラムをGAS(Google Apps Script)で取ってこようとしてます。GistのREST API使うとJSONフォーマットで結果が帰ってきますが、ファイル名を取ってくるときにファイル名がKeyになってるから、どうやってその名前を取ってくればいいのか?という問題にぶち当たります。で、その解決策は下記の通り。実は、この問題、昔、Javaで学生にやらせていて苦労していたようですが、GASだと意外とあっさり?というか、考え方が間違っていたかな?


2016年2月21日日曜日

Google Cloud Vision APIを試してみました

(年明け初の投稿ですね。今年もよろしくお願いします。)

昨年末(12月)にアナウンスが有り、つい先日、オープンβが公開されたGoogle Cloud Vision APIを試してみました。
使い方の概要ですが、
  • Google Cloud Platform のAPI Managerの利用設定をONにする
  • APIキーを入手
  • 画像をBASE64変換し、REST APIでJSONフォーマットで送る
という感じで、利用することができます。サンプルプログラムは、Java、Python、 Android,iOSとありますが、ようはJSON形式でRESTアクセすればいいんでしょ、、、ってことで、個人的にC#で書くのが手っ取り早いので、ざっと書いてみました。下記は、アプリの実行例です。


任意の画像ファイルを指定して送り、結果のJSONを表示するようにしてます。認識のモードも切り替えるようにしてます。

このアプリの詳細については、2/27に開催する
  • 機械学習勉強会(GDG京都&教育システム情報学会関西支部主催)
にて報告しようかと思ってます。