というエラーはnumpyのversion updateによって解決
sudo easy_install -U numpy
というエラーはnumpyのversion updateによって解決
sudo easy_install -U numpy
さもなければコンソールにinjection関係のエラーがでる。
ようやくしっくりくるやり方が見つかった。
<div style="display: table; table-layout: fixed; width: 100%; border: 1px solid #CCC"> <div style="display: table-cell; width: 100px; border: 1px solid #CCC"> 固定幅の何か </div> <div style="border: 1px solid #CCC"> 長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文長文 長文 </div> <div style="display: table-cell; width: 100px; border: 1px solid #CCC"> 固定幅の何か 画像など </div> </div>
環境準備のうる覚え
AngularJS Meets Java EE 7 - YouTube
Tips for AngularJS in NetBeans IDE 8.0.1 - YouTube
生成されたプロジェクト右クリ > npmインストール > エラー発生 > https://nodejs.org/download/ からDL&インスコ
netbeansを右クリで「管理者として実行」で開くと何かとうまくいった
生成されたプロジェクト右クリ > bowerインストール > エラー発生(bower html5-boilerplate#~4.3.0 ENOGIT git is not installed or not in the PATH) > git bashをインスコ > gitのパスをPathを2つ追加(C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\cmd)
netbeansを右クリで「管理者として実行」で開くと何かとうまくいった
npmとbowerのインスコがうまくいくとプロジェクトが赤字から黒字になる。
サンプル動かすしても、エラー系のログがでなくなった。
java.io.NotSerializableException
とあるオブジェクトをこのtoByte()でbyteに変換しようとしたらエラーがでた。
Javaで大量データをメモリに展開するテクニックの考察 - Symfoware
import java.io.Serializable; public class TransientExample implements Serializable { private static final long serialVersionUID = 6128016096756071380L; private transient Pair pair = null; public TransientExample(String key, Integer value) { this.pair = new Pair(key, value); } @Override public String toString() { return pair.toString(); } }
適当なクラスを作って、
・implements Serializableつける
・問題のあるクラスをtransient で定義しなおす
でエラーきえた。
~~~
あれ、逆か。transientは不要っぽい。
それと、そもそもOAuthConsumerをSerializeしようとしていてエラーが発生したのがきっかけだが、少し複雑な感じ。
結論からいくと、OAuthConsumerはサーバ側で保持する必要はなく、Providerだけ保持していればいいっぽい。
Issue 11 - oauth-signpost - Make OAuthProvider and OAuthConsumer serializable - Simple OAuth message signing for Java - Google Project Hosting
そして、OAuthConsumerはnewで初期化した時点ではserialize可能だが、たぶんproviderと混ぜてURL生成なんかをしていると、途中からserializeできなくなる。(しようとするとnullが返された。serializeするライブラリによってはエラーを吐く)
url = provider.retrieveRequestToken(consumer, callback);
~~~
最終的にうまくいったのでまとめ。
oauthの各ステップ
公式には
consumer.setTokenWithSecret(ACCESS_TOKEN, TOKEN_SECRET);
とだけあり、ACCESS_TOKENやTOKEN_SECRETは、callbackで得られるkeyとsecのペアのことかと思っていた。
しかし、これはSTEP01でcosumerが持っているやつを使わなければいけない。
STEP01
OAuthConsumer consumer = new DefaultOAuthConsumer("XXX","XXX"); OAuthProvider provider = new DefaultOAuthProvider("XXX","XXX"); authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL); // accessTokenをsessionやDBに保持 ↓こいつら System.out.println(consumer.getToken()); System.out.println(consumer.getTokenSecret()); //...
STEP02
//認証元からGETで受け取った認証キーをsessionやDBに保持 //...
STEP03
OAuthProvider provider = (OAuthProvider)session.getAttribute("provider"); OAuthConsumer consumer = new DefaultOAuthConsumer("XXX","XXX"); consumer.setTokenWithSecret("STEP01のaccessTokenKey", "STEP01のaccessTokenSec"); provider.retrieveAccessToken(consumer, "STEP02で認証元からうけとった認証キー"); //あとは普通通り URL url = new URL("認証が必要なリソースURL"); //...略
~~~
さらにハマった。。
上の手順だとSTEP03を2回以上くりかえすと、2回目からは401がでてしまう。
理由は、retrieveAccessTokenするとaccessTokenとaccessTokenSecretが更新されるから。
なので、
STEP02でretrieveAccessTokenを済ませて置き、そこで新しく発行されるtokenを保持し、STEP03で何度も同じものを使うというふうにしなければいけない。
STEP01
OAuthConsumer consumer = new DefaultOAuthConsumer("XXX","XXX"); OAuthProvider provider = new DefaultOAuthProvider("XXX","XXX"); authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL); // accessTokenをsessionやDBに保持 ↓こいつら System.out.println(consumer.getToken()); System.out.println(consumer.getTokenSecret()); //... // providerもsessionなんかで保持しておく session.setAttribute("provider", provider);
STEP02 (retrieveAccessTokenを済ませて置き、そこで新しく発行されるtokenを保持)
OAuthProvider provider = (OAuthProvider)session.getAttribute("provider"); OAuthConsumer consumer = new DefaultOAuthConsumer("XXX","XXX"); provider.retrieveAccessToken(consumer, "GETパラメータでうけとった認証キー"); // ここで実はconsumerのaccesstokenが更新されている。 // のでそいつらを保持しておく System.out.println(consumer.getToken()); System.out.println(consumer.getTokenSecret()); //... // providerはもう用済みなので消してよい
STEP03
OAuthConsumer consumer = new DefaultOAuthConsumer("XXX","XXX"); consumer.setTokenWithSecret("STEP02のaccessTokenKey", "STEP02のaccessTokenSec"); //あとは普通通り URL url = new URL("認証が必要なリソースURL"); //...略
mysqlのリプリケーションをやったサーバでmunin-nodeを起動しても動作しなかった
それ以外の状況が全く同じサーバについては普通通りに動いている。
ログをみると、/var/log/munin-node/munin-node.logだけがでている。
sudo -u munin /usr/bin/munin-cron
これで無理やり実行すると、/var/log/munin/munin-update.logに大量の"mysql_"なんたら というエラーが見つかった。
mv /etc/munin/plugins/mysql_* /etc/munin/plugins/bak/
と退避させて2回強制実行するとすべてのログが正常化した。
それでもなお自動実行はされない。
crontabに登録したが、なぜか動かなかった。
/5 * * * * sudo -u munin /usr/bin/munin-cron
ので、仕方なく、スクリプトで走らせることにした。はぁ・・ださい
while(1){ print "go\n"; `sudo -u munin /usr/bin/munin-cron`; sleep 300; }
スカッとインストールできないもんかねー
基本
MySQLプロセスを一台のサーバで複数起動 [GameCreator'sNote]
mysql dirの初期化だけはこちらの手順
MySQLのデータベースを初期化する - Qiita
つまり
vim /etc/my2.cnf mkdir /var/lib/mysql2 chown mysql:mysql /var/lib/mysql2 # init dir su mysql mysql_install_db --datadir=/var/lib/mysql2 exit # mkdir -pv /var/lib/mysql2 chown mysql:mysql /var/lib/mysql2 # check log. no error tail -f /var/log/mysqld2.log # 最終行がこんな感じであればOK # Version: '5.5.42' socket: '/var/lib/mysql2/mysql2.sock' port: 3307 MySQL Community Server (GPL) # login mysql -uroot -p --socket=/var/lib/mysql2/mysql2.sock
/etc/my2.cnf
[mysqld]
datadir=/var/lib/mysql2
socket=/var/lib/mysql2/mysql2.sock# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0#log-bin
server-id=1001
port=3307[mysqld_safe]
log-error=/var/log/mysqld2.log
pid-file=/var/run/mysqld2/mysqld2.pid