【Pandasでエラー】TypeError: pivot_table() got an unexpected keyword argument 'rows'
CentOS6にnode + mysql
インストール
- Nodeのインストール
$ sudo yum install epel-release $ sudo yum install node npm
- MySQLのインストール
$ sudo yum install mysql-server mysql $ sudo service mysqld start # サービス起動 $ sudo ckconfig mysqld on # 自動起動
$ npm install mysql
MySQL設定
データベース、テーブルを作成し1列挿入しておく
set password = password('パスワード'); create database node use node create user 'node'@'localhost' identified by 'secret'; grant select , insert , update on node.* to node; create table Position ( student_id int auto_increment primary key, latitude Decimal(10,7) , longitude Decimal(10,7) , altitude Decimal(10,7) , message char(100) ) insert into Position (latitude , longitude , message ) values (41.1 , 135.5 , "メッセージ");
コードを作成
/* app.js */ var mysql = require('mysql'); var connection = mysql.createConnection({ host : process.env.DB_HOST || 'localhost' , user : process.env.USER || 'root' , password : process.env.DB_PASS || 'vagrant' , database : process.env.DB_NAME || 'node' }); connection.query('select * from node.Student' , function(err , rows) { if(err != null) { console.log("Error"); } console.log(rows); });
nodeを実行し、接続できることを確認.とりあえずrootでやってしまった。
# node app.js
実行結果
[ { student_id: 1, latitude: 41.1, longitude: 135.5, message: 'a?!a??a?≫a??a?,' } ]
【Mac】qtbindingsをインストール中のエラー Undefined symbols for architecture x86_64:
クロスプラットフォームであり、複数の言語でGUIアプリケーションを開発したいと思い検索をしてみたところ、Qtというフレームワークを使用するとそれが実現できそうであるとわかった
そんなQtをrubyを使ってコーディングを行うためにgemを使って気軽にインストールする
まずはQt自体のインストール(Homebrew使ってます)
これでqt4とcmakeがインストールされる
brew install automoc4
次にRubyで使用するためにqtbindingsを導入
gem install qtbindings
しかしエラー
[ 83%] Building CXX object ruby/qtruby/src/CMakeFiles/qtruby4shared.dir/marshall_types.o Linking CXX shared library libqtruby4shared.dylib Undefined symbols for architecture x86_64: "_rb_float_new", referenced from: unsigned long primitive_to_ruby<float>(float) in handlers.o unsigned long primitive_to_ruby<double>(double) in handlers.o marshall_QListqreal(Marshall*) in handlers.o marshall_QVectorqreal(Marshall*) in handlers.o marshall_QPairqrealQColor(Marshall*) in handlers.o marshall_doubleR(Marshall*) in handlers.o "_rb_funcallv", referenced from: method_missing(int, unsigned long*, unsigned long) in Qt.o class_method_missing(int, unsigned long*, unsigned long) in Qt.o QtRuby::VirtualMethodCall::callMethod() in marshall_types.o funcall2_protect(unsigned long) in marshall_types.o QtRuby::InvokeSlot::invokeSlot() in marshall_types.o "_rb_gc_writebarrier_unprotect", referenced from: rb_obj_wb_unprotect(unsigned long, char const*, int) in marshall_types.o "_rb_str_cat_cstr", referenced from: _rb_str_catf in Qt.o marshall_QString(Marshall*) in handlers.o marshall_QByteArray(Marshall*) in handlers.o "_rb_str_new_static", referenced from: method_missing(int, unsigned long*, unsigned long) in Qt.o class_method_missing(int, unsigned long*, unsigned long) in Qt.o _prettyPrintMethod in Qt.o "_rb_sym2id", referenced from: method_missing(int, unsigned long*, unsigned long) in Qt.o class_method_missing(int, unsigned long*, unsigned long) in Qt.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
調べてみるとRubyをインストールする際に –enable-shared オプションが必要であるそうだ
rubyのライブラリをダイナミックリンクとして出力してくれるらしく、Qtではそのライブラリを使用しているのだろうか
自分はrbenvを使用しているのでrbenvでRubyをインストールし直すとこうなる(バージョンは2.2.0)
CONFIGURE_OPTS="--enable-shared" rbenv install 2.2.0
もう一度gemコマンドを実行すると無事にqtrubyをインストールできた
Macでgithubから拾ってきたrailsプロジェクトをbundleしたらnokogiriのインストールエラー
nokogiriってなんだろう
学校で進めていたrailsプロジェクトフォルダを家でも使いたいためgithubに上げておいた 家に帰ってgit cloneコマンドでコピーするところまでうまく行ったのだが、bundleするとnokogiriがインストールできず止まる その後ググった内容を見て色々いじってしまいわけがわからなくなった。
そもそもGemfileにnokogiriなんて入れてないがなんらかの別のアプリが利用しているのだろう nokogiriがインストール出来ないのはlibxml2がインストールされていないからだと判明したので最新版のlibxml2を入れた すると↓のエラーが出てくる
[bash] /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb –use-system-libraries –with-xml2-include=/Users/dwt/Library/Homebrew/opt/libxml2/include/libxml2 –with-xml2-lib=/Users/dwt/Library/Homebrew/opt/libxml2/lib –with-xslt-dir=/Users/dwt/Library/Homebrew/opt/libxslt –with-iconv-include=/Users/dwt/Library/Homebrew/opt/libiconv/include/ Building nokogiri using system libraries. libxml2 version 2.9.0 and later is not yet supported, but proceeding anyway. checking for xmlParseDoc() in libxml/parser.h… no checking for xmlParseDoc() in -lxml2… no
checking for xmlParseDoc() in -llibxml2… no
libxml2 is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
[/bash]
何が何だかと思ったがよく見るとlibxml2のバージョンが新しすぎて対応していないらしい 解決策はないかとググっていると見つけたのがこれ
[bash] brew unlink libxml2 libiconv libxslt sudo xcode-select –install bundle config build.nokogiri –use-system-libraries bundle install [/bash]
インストールしたlibxml2その他2つの参照をはずし 古いlibxml2等をxcode-select –installでインストールできるらしい その後nokogiriのインストールにそのライブラリを使うことを宣言しインストール
無駄に時間を費やした
AndroidでVolleyを使ったシンプルな通信
もうね書くのが面倒だからソースをそのまま書いていく アクセスが無いとこうなるのかな
[java] String url ="http://www.google.co.jp/"; if(mQueue == null) mQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.GET , url ,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
text1.setText(response.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
text1.setText("That didn't work... " + error.getMessage());
}
}
);
mQueue.add(stringRequest);
mQueue.start();
[/java]
ネットワーク接続を許可するためAndroidManiphest.xmlをいじる必要が有ることと、結果のテキストはresponse.toString()に格納されることを意識すれば特に問題はない。 さて付加情報を単純にテキストをいじって作ればいいか。別にクラスを用意するか悩むところだ。
IDEに言われるがままにimportしたパッケージたち [java] import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; [/java]
mQueueはメンバ変数として先にRequestQueue型で宣言。 またソース中のテキストビューも同様に宣言し、別のところでfindViewByIdしてますよ。
通信が楽になったしエラーもerror.getMessage()で詳しく教えてくれるから便利だなあ。
PIC18F25K22でサーボモータを動かす
標準のPWMだとできない?
PIC18F25K22というか、PICにはCCPというモジュールが搭載されていて、PWMが標準で使える。 しかしながらこのモジュールはあまり長い周期の設定ができない(高周波数だとより厳しい)。 →だいたいのサーボモータは20msの周期中のパルス幅で角度を指定しているから使えない? このように判断した。
だからTMR0で0.1msごとに割り込みを入れて、0.1msの精度でパルスをON、OFFするようにプログラムを書いたらできた。 PICの事良く知らないけど、こんなに割り込んじゃって他のコードに影響出ないか不安。 このコードでつかうサーボは周期が20.0ms。真ん中が1.5ms、1.0~2.0msで角度を決められる。
時間出来たらもう少し詳しく書こう。
ソースコード
/* * PWMが低周波数で実現できなそうなのでタイマー0でやる */ #include<xc.h> //コンフィギュレーションビット(内部オシレータを使用) #pragma config IESO = OFF, FOSC = INTIO67, FCMEN = OFF //クロック周波数の指定(8MHz) #define _XTAL_FREQ 8000000 //大域変数 int count = 0; int countvar; //0.1ms単位で立ち上がるタイミング指定 int main() { int i; //内部クロックに設定(8MHz) OSCCON = 0b01100010; //全ポートデジタル入出力 ANSELA = 0; ANSELB = 0; ANSELC = 0; //全ポート出力 TRISA = 0; TRISB = 0; TRISC = 0; //全ポートOFF PORTA = 0x00; PORTB = 0x00; PORTC = 0xFF; //タイマ設定 T0CON = 0b01001001; //割り込み設定 TMR0L = 0x37; TMR0IF = 0; TMR0IE = 1; PEIE = 1; GIE = 1; //TIMER0 Start T0CONbits.TMR0ON = 1; while(1) { for(i=10 ; i<=20 ; i+=5) { countvar = i; __delay_ms(90); __delay_ms(90); } } return 0; } void interrupt isr(void) { TMR0L = 0x37; TMR0IF = 0; count ++; if(count == countvar) { PORTA = 0; } else if(count == 200) { PORTA = 0xFF; count = 0; } }
PIC18F25K22におけるPWMの使用方法についてまとめてみた。
PIC18F25K22におけるPWMの使用方法についてまとめてみた。
概要
PWMの概要については書かない。 PICではCCPモジュール(Capture Compare PWM)の一つとして位置づけられている。 PIC18なんかではCCPが2つ搭載されていたり、CCPを拡張したEnhanced CCPが含まれていたりする。 PIC18F25K22には5つ搭載されており、CCP1~CCP3がEnhanced CCP、CCP4とCCP5が通常のCCPである。 今回はCCP4とCCP5のみ扱うことにする。
PWMにおいて必要なことは3つ。
- デューティ比(デューティサイクル)
- 周期
- 分解能(resolutionだから解像度とも言う?)
この3つをレジスタで指定してやると動くはずである。 しかし、レジスタに直接値を入れることはできない。幾つかのビットとそれを引数とする計算式によって 値が定まるでしょう。
レジスタ
PWMに関するレジスタは4つ有る。 ここからレジスタ名に出てくる小文字のxは数字がはいるものとする(データシートでもそんな風に書いてるから従うよ)
CCPxCON
このレジスタはEnhanced CPPとCPPで中身が違うので面倒であるがひとまず通常のCPPであるCCP4CONから。
未使用 | 未使用 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|
- | - | DC2B1 | DC2B0 | CCP2M3 | CCP2M2 | CCP2M1 | CCP2M0 |
- DC4Bx デューティ比を10bitで表す場合の最小位ビットとなる。残りの8bitはCCPR2Lで指定。 ちなみにPWM以外のモードでは不使用。
- CCP4Mx…4ビットの羅列によって別々の意味を成す。 このビット列によってPWMかその他2つとして使うかを決定できる。今回はPWMを使うので1100と入れる。 詳細の表はデータシート参照。時間あればここに載せたいが、和訳できないのです。
PR2
PWMでHIGHとなる時間を0から255で指定。
T2CON
CCPはTIMER2の機能を使用している。 このコンフィギュレーションレジスタはタイマ2に関する設定を記述する。
未使用 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|
- | T2OUTPS3 | T2OUTPS2 | T2OUTP1 | T2OUTPS0 | TMR2ON | T2CKPS1 | T2CKPS0 |
- T2OUTPSx ポストスケールの設定。今回は使わない
- TMR2ON Timer2を使用するかどうか 1:使用 0:不使用
- T2CKPSx プレスケールの設定。計算式に含まれる。xは0でも1でOK。 00 :プレスケール1 01 :プレスケール4 1x :プレスケール16
CCPRxL
デューティ比に使用する。0~255で指定。
計算式
式中のToscはクロック周期(Tosc = 1/Fosc) CCPRxL:DCxBは上位ビットと下位ビットを繋げて10bitとしたもの
まとめ
ここまで書いたが、使用する場合のことだけかいて、中でどのように動いているかを 全く書かなかったので理解が深まらない気がしてくる。よく言えば簡潔?