Electronで ipcMain = require( 'electron' ).ipcMainがundefinedになる
electron-prebuiltのversionを0.33.8から0.36.7に上げた。
するとipcモジュールが非推奨になっている。
(electron) ipc module is deprecated. Use require("electron").ipcMain instead.
注意通りにipcMainに置き換える。
- var ipc = require('ipc'); + var ipcMain = require("electron").ipcMain;
ところが取得した ipcMain
がundefinedになる。
レンダラプロセス側も同様。
- var ipc = require('ipc'); + var ipcRenderer = require( 'electron') .ipcRenderer; // => undefined
調べてみると以下のissueがあった。 github.com
下記のように取得すると問題なかった。ElectronのVersionによるらしいのだが、最新のドキュメントと一致しないのかな。
var ipcMain = require('ipc-main');
var ipcRenderer = require( 'ipc-renderer' );
Yosemite+XCode7にしたらCocos2d-Xなプロジェクトがbuild通らなくなった
いままでMavericks+XCode6で開発していたCocos2d-x(ver3.7)のプロジェクトがありました。
今更ながらYosemiteにして、ついでにXCode7にあげたら下記のようなエラーがでてbuildがFailするようになってしまいました。
Undefined symbols for architecture x86_64: "TopPageLayer::TopPageLayer()", referenced from: TopPageLayer::create() in TopPageScene.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
とりあえず同様の事象を調べてみるとこれが。
libc++がDefaultになってしまったとかなんとか。 なのでlibstdc++戻してみます。
なんだかエラー内容が変わりました。 threadがないとかもうなんだか。
In file included from /MyProject/proj.ios_mac/ios/Prefix.pch:11: In file included from /MyProject/proj.ios_mac/../cocos2d/cocos/cocos2d.h:41: In file included from /MyProject/proj.ios_mac/../cocos2d/cocos/base/CCAsyncTaskPool.h:29: /MyProject/proj.ios_mac/../cocos2d/cocos/base/CCDirector.h:32:10: fatal error: 'thread' file not found #include <thread> ^ 1 error generated.
下記を読む限りlibc++ならthreadあるよとのこと。 stackoverflow.com
ldのエラーをとるにはlibstdc++が必要で、threadのエラーをとるにはlibc++が必要..?どうすればいいんだ...
とりあえずプロジェクト側とcocos側のbitcode生成はオフにした。 でもダメ。
困った
CentOSにnginxをソースからインストール
とりあえずyumではなく。
stableのソースを適当な場所にwgetする
wget http://nginx.org/download/nginx-1.8.0.tar.gz
解凍する
tar zvxf nginx-1.8.0.tar.gz
configureする
./configure --prefix=/usr/local/nginx
makeとmake install
make && make install
雑に起動
/usr/local/nginx/sbin/nginx start
起動時に下記エラーが出たらLDをexportする。
error while loading shared libraries
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
終わり
iTunes12.2で外付けHDDにライブラリがある場合ハングしてしまうかもしれない
Mac OS X 10.9.5 iTunesは勝手にupdateされて12.2(iTunes Music対応版) ライブラリはUSB接続のHDD上にある。
iTunesを起動すると1分くらいでハングしてしまう。 一度削除して再インストールして駄目だし再起動してもダメ。
コンソールのログを見ると
2015/07/04 23:00:13.143 iTunes[1394]: Possible unresolved transaction race -108/(iTunes/iTunes/iTunes Media/Blind Guardian/Nightfall in Middle-Earth,(null))
というようなのが延々ログに出ている。
このままじゃどうにもならないので12.1を入れたら取りあえず使えるにようにはなった。
Download iTunes 12.7.4 and Old Versions for both Win & Mac
そのままだと、12.2でライブラリファイルが出来てしまっていたので前のに書き戻した。 Yahoo知恵袋便利。
ファイル[iTunesLibrary.itl)はあたらしいバージョンで作ら... - Yahoo!知恵袋
とりあえずなんとか使えてるけど最新versionじゃないと色々不便がありそうなのでどうしたものか。
@Override アノテーションは取得できない?
classからメソッドを取り出して、そのメソッドに@overrideなアノテーションがついてるか調べたかった。
が、取得できない。消える? それとも親のメソッドが取得されてるからoverrideがついてないメソッドが取得されてるってことなんだろうか。
package com.test; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import javax.annotation.Resource; public class ReflectionTest { public static void main(String[] args) throws Exception { ChildHoge childHoge = new ChildHoge(); Method declaredMethod = childHoge.getClass().getMethod("init"); for (Annotation s : declaredMethod.getAnnotations()) { System.out.println(s); } Method method = childHoge.getClass().getMethod("a"); for (Annotation a : method.getAnnotations()) { System.out.println(a); } } } class SuperHoge { public void init() { } } class ChildHoge extends SuperHoge { @Override public void init() { super.init(); } @Resource public void a() { } }
実行結果
@javax.annotation.Resource(mappedName=, shareable=true, type=class java.lang.Object, authenticationType=CONTAINER, lookup=, description=, name=)
※追記 @overrideのソースを見て分かった。
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }
@Retention(RetentionPolicy.SOURCE)
なのでコンパイル時には既に消えてる....
Rundeck2.5からJava8で動作するようになってた
高機能なジョブスケジューラのRundeck
2.4.2まではJava7でしか動作しませんでした。Java7はEOLなのでつらいところ。
[vagrant@vagrant-centos65 rundeck2.4]$ java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) [vagrant@vagrant-centos65 rundeck2.4]$ [vagrant@vagrant-centos65 rundeck2.4]$ java -jar rundeck-launcher-2.4.2.jar WARNING: HTTPS is not enabled, specify -Drundeck.ssl.config=/home/vagrant/work/rundeck2.4/server/config/ssl.properties to enable. 2015-05-03 10:29:57.836:INFO:oejs.Server:jetty-7.6.0.v20120127 2015-05-03 10:29:59.798:INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet 2015-05-03 10:30:01.210:INFO:/:Initializing Spring root WebApplicationContext 2015-05-03 10:30:04,042 [main] ERROR context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException: Cannot invoke method getAt() on null object at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:733) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:233) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1214) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:676) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:455) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90) at org.eclipse.jetty.server.Server.doStart(Server.java:261) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at com.dtolabs.rundeck.RunServer.run(RunServer.java:112) at com.dtolabs.rundeck.RunServer.main(RunServer.java:72) at com.dtolabs.rundeck.ExpandRunServer.invokeMain(ExpandRunServer.java:690) at com.dtolabs.rundeck.ExpandRunServer.execute(ExpandRunServer.java:647) at com.dtolabs.rundeck.ExpandRunServer.run(ExpandRunServer.java:304) at com.dtolabs.rundeck.ExpandRunServer.main(ExpandRunServer.java:113) Caused by: java.lang.NullPointerException: Cannot invoke method getAt() on null object ... 15 more 2015-05-03 10:30:04,055 [main] ERROR context.GrailsContextLoader - Error initializing the application: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException: Cannot invoke method getAt() on null object org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException: Cannot invoke method getAt() on null object at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:733) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:233) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1214) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:676) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:455) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90) at org.eclipse.jetty.server.Server.doStart(Server.java:261) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at com.dtolabs.rundeck.RunServer.run(RunServer.java:112) at com.dtolabs.rundeck.RunServer.main(RunServer.java:72) at com.dtolabs.rundeck.ExpandRunServer.invokeMain(ExpandRunServer.java:690) at com.dtolabs.rundeck.ExpandRunServer.execute(ExpandRunServer.java:647) at com.dtolabs.rundeck.ExpandRunServer.run(ExpandRunServer.java:304) at com.dtolabs.rundeck.ExpandRunServer.main(ExpandRunServer.java:113) Caused by: java.lang.NullPointerException: Cannot invoke method getAt() on null object
ですが、4/16日に出たRundeck2.5ではJava8に対応しているので問題なく起動できるようになってます。 もちろんtomcatへのdeploy時でも問題なし。
[vagrant@vagrant-centos65 rundeck2.5]$ java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) [vagrant@vagrant-centos65 rundeck2.5]$ java -jar rundeck-launcher-2.5.0.jar WARNING: HTTPS is not enabled, specify -Drundeck.ssl.config=/home/vagrant/work/rundeck2.5/server/config/ssl.properties to enable. 2015-05-03 10:37:16.034:INFO:oejs.Server:jetty-7.6.0.v20120127 2015-05-03 10:37:18.214:INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet 2015-05-03 10:37:19.544:INFO:/:Initializing Spring root WebApplicationContext 2015-05-03 10:37:54,115 INFO BootStrap - Starting Rundeck 2.5.0-1... 2015-05-03 10:37:54,115 INFO BootStrap - using rdeck.base config property: /home/vagrant/work/rundeck2.5 2015-05-03 10:37:54,124 INFO BootStrap - Performing rundeck first-run initialization... 2015-05-03 10:37:54,746 INFO BootStrap - Rundeck initialization complete. 2015-05-03 10:37:54,775 INFO BootStrap - loaded configuration: /home/vagrant/work/rundeck2.5/etc/framework.properties 2015-05-03 10:37:54,856 ERROR BootStrap - NOT importing existing filesystem projects filesystem 2015-05-03 10:37:54,868 INFO BootStrap - RSS feeds disabled 2015-05-03 10:37:56.349:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/,file:/home/vagrant/work/rundeck2.5/server/exp/webapp/},/home/vagrant/work/rundeck2.5/server/exp/webapp 2015-05-03 10:37:56.444:INFO:/:Initializing Spring FrameworkServlet 'grails' 2015-05-03 10:37:56.522:INFO:oejs.AbstractConnector:Started [email protected]:4440
これで安心してJava8環境に移行出来ます。
他にも2.5では rd-acl
というコマンドラインツールが追加されていて、Rundeck ACL policy ファイルを生成することが出来るようです。(アクセスコントロール周り)
SafariやFirefoxではハイフン区切りでDateオブジェクトを作れない
まぁそのままの通りなんだけど。
自分はPostgreSQLをメインで業務で触っていて、時刻データはtimestamp型のカラムに保存している。 で、PostgreSQLのタイムスタンプはハイフン区切りで入っている。
=> select * from temptable ; start_date --------------------- 2015-01-01 00:00:00 (1 row)
これをサーバーサイドのアプリケーションから読み出してvelocityとかのtemplateエンジンに食わせて、html側のJSでDateオブジェクトを生成するということを割とやる。
開発時のチェックはChromeでやるのがメインだったから気付かなかったが、あるときiPhoneのSafariでその時刻を表示している箇所がNaN:NaNみたいな感じに。 最初は原因がわからずしかも再現するひとしない人がいて辛かった。
が、Safariなどではハイフン区切りの時刻をDateに食わすと invalid Dateとして認識されてしまうことがわかった。
以下再現。おそらくiPhoneなどでのSafariも同様のログが見られるとは思う。
Chrome: ハイフン区切りでスラッシュ区切りで問題なく、ミリ秒が付加されているようなデータも問題なくDateオブジェクトを生成できている。
Safari: ハイフン区切りはInvalid Dateに、スラッシュ区切りのみ受け入れる。ミリ秒もダメ。
FirefoxもSafariと同様にハイフン区切りとミリ秒はInvalid Dateとして扱われる。
Chromeが平気なだけに気づきづらい問題なので気をつけたい。