テクノロイド

コンピュータやゲーム他、色々日々思ったことをつづっていきます。

KotlinがAndroidの公式プログラム言語に

2017-05-19 21:04:30 | Ruby, Rails,プログラミング
KotlinがAndroidの公式プログラム言語になったというので、Kotlinって何だ?とググッてみるとJavaが互換性保持のせいでモダンじゃないんで、それとは別にJavaとの互換性を保ちつつモダンな言語を作ったというものらしい。
iOSでいうObjectiv-CとSwiftみたいな感じだとか。個人的にはJavaのあの冗長性が気にならなくなるんなら大歓迎だな。それだけでも勉強してみようかという気にさせる。
んでググった時に見つけたこれ(バカ向け言語 Scala)が笑える。
某Javaプログラムのソースを追っかけてたら、それこそ「大量のinterfaceと抽象classの荒野」で(IDEに不慣れなせいか)実装を追いかけるのが大変って思ったんだが、こういうことだったのかと理解できた。それにしてもシングルトンって何じゃ?って思ってたが、グローバル変数の代わりだったとは(笑)もうね。Javaのアホらしさを再確認できた。

PQI Air Penでrubyを動かしたい

2017-01-20 13:27:04 | Ruby, Rails,プログラミング
昨年暮れに変わり種モバイルWiFiルータPQI Air Penが980円だったので買った。というか既にモバイルWiFiルータとして使えるの持ってて興味なかったんで、今まで存在を知らなかった。ところがこの製品、microSDスロットを持っててモバイルストレージにもなるという点が面白い。それで980円ならば買おうかと思った。
それで普通に使おうと思っていたんだが、ふとググってみるとLinuxとして使えるのがわかった。う〜ん、PQI Air Card IIをLinuxで使おうとしてたのに何故気付かなかったんだろう・・・。まあとにかくうれしい誤算だった。ならばとまだ売っていたので追加で1台購入。PQI Air Cardと違って有線LANとバッテリーも付いてて980円なんてとんでもないくらい安いではないか。

Linuxとして使うのに参考になるありがたいサイトはこちら↓。
ポケット無線LANルータの新顔PQI Air Penの著しく間違った使い方
rubyもビルドしてくれててありがたいのだが、socketが使えないようなのが残念。

コメント欄にmrubyをビルドされた方がいると書かれてた。
Mruby on MIPS in PQI Air Pen
socketが使えるのかな?mrubyと普通のrubyがどんだけ違うかよく知らない。

とりあえずruby使ってる人いないかな?と「PQI Air Pen ruby」でググったら、なんとOpenWRTを入れちゃってる人がいてビックリ。
PQI Air Pen、OpenWrt化(未開封編)
PQI Air Cardと違ってCPUがARMじゃなくてMIPSのAtherosで、なんかどっかで見たようなと思っていたらfonルータだったか。OpenWRTは無改造とは行かないので失敗のリスクはあるけど、1台追加購入したのでやってみてもいいかなあ。せっかく基板を取り出さないでいい方法を紹介してくれているので・・・。

あと、PQI Air Penを使ってリモートシャッターを作ってみたっての見ると、物理ボタンが利用できるのも応用が効くな。

ruby-gtk2でマウスカーソルを非表示にする方法

2016-07-26 12:07:03 | Ruby, Rails,プログラミング
ruby-gtk2でフル画面時にマウスカーソルを非表示にしたいのと、フル画面解除の方法がすぐにはわからなかったけどなんとかわかったんでメモ。

w.signal_connect("key_press_event") { |wd, e| # キーを押された際
    case e.keyval
    when Gdk::Keyval::GDK_q
      # qで終了
      Gtk.main_quit()
    when Gdk::Keyval::GDK_u
      # uでunfullscreen
      w.unfullscreen
      w.window.set_cursor(Gdk::Cursor.new("ARROW"))
    when Gdk::Keyval::GDK_f
      # fでfullscreen
      w.fullscreen
      w.window.set_cursor(Gdk::Cursor.new("BLANK_CURSOR"))
    end
}

rubyでxlsxファイル出力

2016-05-10 16:14:50 | Ruby, Rails,プログラミング
rubyでExcelで読めるファイルを出力するのにCSVだとちとまずいのでxlsxファイルが出力できるというaxlsxというのをgemでインストール。
最初はrooというのがいいのかと思ってたら、Excelファイル出力には使えないそうだ。

それでやりたいのはセルの色とセル内改行と計算式とシートの追加。
以下のスクリプトでOKだった。
(※ubuntu上のlibreoffice)

require 'axlsx'

package = Axlsx::Package.new

ws1 = package.workbook.add_worksheet(name: 'Example')
ws2 = package.workbook.add_worksheet(name: 'Ex2')
ws1.add_row([100,200,'=A1+B1'])
ws1.add_row(['this','is', 'pen'])
cellcolor = ws1.styles.add_style(:bg_color => '005555', :fg_color => 'FFFFFF', :sz => 14, :alignment => { :horizontal=> :center })
ws1.add_row(['Hello', 'World'], style: cellcolor)
ws2.add_row(["Hello\nWorld"], height: 30)

package.serialize('example.xlsx')

これで良しと思ったらruby1.8.7でaxlsxがインストールできなかった。
なのでイマイチだがspreadsheetに変更。注:xlsxでなくxlsファイルになる。

require 'spreadsheet'

# Spreadsheet.client_encoding = 'UTF-8'

# 新規作成
book = Spreadsheet::Workbook.new
ws1 = book.create_worksheet :name => 'Example'
ws2 = book.create_worksheet :name => 'Ex2'

bgcolor = Spreadsheet::Format.new :pattern_fg_color => :yellow, :pattern => 1
ws1.row(0).concat %w{abc xyz 漢字}
ws1.row(0).default_format = bgcolor

format = Spreadsheet::Format.new :color => :blue
ws1[1,0] = 100
ws1[1,1] = 200
ws1[1,2] = '=B2+C2'
ws1[1,3] = "=B2+C2"
ws1.row(1).default_format = format

ws1[2,0] = "Hello\nWorld"
ws1.row(2).height=24

book.write('example.xls')

計算式は使えなかったが、シートと改行とカラーができたんでまあいいか。
ruby1.8.7はcsvも1.9版の元になったというfastcsvにしなきゃ行けなかったり、往生しまっせ。

と思ったらWriteExcelというのがあった。出力のみだったが、それでいいので結局これにしようか。
fmt = workbook.add_format(
:bg_color => 'pink',
:pattern => 1
)
ws.set_row(0,24) # height
ws.write_row(0,0,["mag\ngie", 'milly', 'molly', 'may'],fmt)
ws.write(1,0,000012,fmt)
こんな感じで使えたし。

Lazarus 1.6はUnicodeでのプログラミングが容易になったらしい

2016-02-25 12:36:30 | Ruby, Rails,プログラミング
#Rubyカテゴリにしたが、Rubyじゃないが同じ言語ということで。

先々週のUWR#408で、そういえばLazarusってあったけどDelphi系だしマルチプラットホームなんで興味深いのに何故忘れてたんだろと思って、ググったら日本語の扱いがイマイチってのがあってそれで興味なかったのかな?と思ってた。
そしたら「Lazarus 1.6はUnicodeでのプログラミングが容易になった」とあるんで注目してみようかな。

rubyでCSVファイルを扱う

2015-05-13 21:18:44 | Ruby, Rails,プログラミング
rubyでCSVファイルのデータ集計をやりたい。
グループ分けするのにDBにぶっ込んでSQLやれば簡単なんだが、ここ見てCSVライブラリに感動したんで挑戦中。
というかSQLも無しにベタな条件分岐でプログラム作ってれば、サクッと終わってた気もする。
あ~時間ないのに。というかこういう時に限って横道にそれちゃう悪いクセ。

んで、CSV.tablesすげえなと思って試したら、ヘッダ部分(CSVファイル1行目)に漢字が使われてたらシンボル化が失敗するようで全て:""になって使いものにならない。
ググると「漢字だったら使えないからreadメソッド使おう」みたいで、そうするtable[:"項目1"]みたいにできないのでは?と思い、何とか対処策発見。

tbl=CSV.table("test.csv", header_converters: nil)
ヘッダをシンボルへコンバートしない指定ができるじゃん。

これで次のようにやれば項目1でグループ化できる。
grp=table.group_by{|row| row["項目1"]}

でも標準のgroup_byじゃ簡単にはいかないようだ・・・

それと結局tableメソッドとreadメソッドは同じらしいし、漢字変換も必要なので
tbl=CSV.read("test.csv", headers: true, encoding: "EUC-JP:UTF-8")
にしたという・・・

Ruby/Gtk2からRuby/Tkへ書き換え

2014-10-28 23:13:16 | Ruby, Rails,プログラミング
大昔Tcl/Tkはいぢったことあるんだけど、Ruby/Tkは初めてなんでボタンの配置とか色々な記述ができるのがかえってわかりづらかったけど、それさえクリアしたら簡単に移植できた。
まあ元々シンプルだったからだけど、GUI周り以外はそのままRubyだからいじらなくていいし、ビックリするくらい簡単だった。

まず require 'gtk2'を'tk'に。

次に部品のレイアウト
msg = Gtk::Label.new("テキスト")
lbtn = Gtk::Button.new("表示")
rbtn = Gtk::Button.new("終了")
btns = Gtk::HBox.new
btns.add(lbtn)
btns.add(rbtn)
vb = Gtk::VBox.new
vb.add(msg)
vb.add(btns)
window = Gtk::Window.new.add(vb).show_all

msg = TkLabel.new{text "テキスト"}.pack
fr=TkFrame.new.pack
lbtn = TkButton.new(fr){text "表示"}.pack('side' => 'left')
rbtn = TkButton.new(fr,:text=>"終了").pack(:side => :left)
に。(LボタンとRボタンの記述をわざと変えてみた)

Ruby1.9以降なら
rbtn = TkButton.new(fr,text:"終了").pack(side: 'left')
なのかな(未確認)

rbtn.signal_connect("clicked") { Gtk.main_quit }
lbtn.signal_connect("clicked") { msg.set_text("クリック!") }

rbtn.command { exit }
lbtn.command { msg.text("クリック!") }

締めのGtk.mainがTk.mainloopと、これだけ

部品のnewの記述のとこは試行錯誤して時間かけたけど、Gtk版と対比しやすい記述にできて良かった。
というか、Tcl/TkやってたからRuby/Gtkを選んだんだったような気がしてきた。Tcl(←ティクル)がクセありすぎて挫折したしな。

WindowsでRuby/Qt4・・・したいけど中断

2014-10-27 20:26:00 | Ruby, Rails,プログラミング
Linuxで動いているRuby/Gtk2プログラムがWindowsだと動いてくれなかった。TCPServerをスレッドで立ち上げてて受信状態にしているのだが、Gtk2でWindowsを開くとスレッド(のaccept辺り)が停止するようだ。
ググっても対処法が見つからないので、Gtk2以外のGUIツールキットを使ってみるかと。
色々あるようでちゃんと動くのはなかなかない中でQt4なら使えそうな感じ。
Rubyは諦めてHSP3にしようかと思ったが、socketやスレッド辺りがよくわからないのでRuby/Qt4に期待する。

WindowsでRuby/Gtk2(Ruby2.1)が動いている環境で、gem install qtbindingsで入った。とりあえずirbでrequire 'Qt'するとOKが出た。

いじるのは不慣れなWindowsだと辛いので、まずはUbuntu(12.04)で試す。
ruby -vするとRuby1.8なので、apt-get install libqt4-ruby1.8でインストール。
dpkg -L ruby-qt4すると/usr/share/doc/ruby-qt4/examples.tar.gzにサンプルがあったので展開。
色々サンプルをチェック。ここが画像を入れて紹介してくれてて参考になる。

と思ったが、Ruby/Tkの方が移植しやすそうだったのでやめた。Windowsで動かせるの確認できたし。
見栄えはQtの勝ちなので今後はQt使いたいかな。