‘Linux’ タグのついている投稿

cocos2d-xでクラスを追加してビルドしようとしたら2ヶ月ドハマりしたのでメモ。

2016年9月4日 Linux

前もって言っておくと、cocos2d-xとかcppに関しては完全に初学者以下のレベルだからね。
これから勉強していきましょうって段階の記事だよ。

はてな民、大学生はそこをきちんと認識して検索結果にこの記事が引っかかっても既に解決済みの案件じゃないかとか疑って、解決していないならツッコミ記事を書こうくらいの余裕を持って関連しそうな記事が無いかをしっかり確認してからツッコミ記事書いてね。
わかりやすく言うと、「はてな民、大学生は他所様の足を引っ張らないよう最大限に配慮してください。」ということです。

私と見知らぬ他人は友達同士の関係ではないので、例え見知らぬ誰かに嫌われようとも必要なら何度でも同じこと書きますよ。
最近は出来てない人ばかり見かけるけども、ごく親しい相手と赤の他人との線引きはとても大切。

で、それはともかく、Cocos2d-xの解説書を買ったんです。
スマートフォン向けのアプリとLinux向けの何かをいっぺんに作りたくて。

画像の表示とか楽ちんに進められて良いですなぁとか思いながら進めてたんだけど、サクサク進んでcpp/hファイルを追加して、さてビルドって所でドハマりしてしまったのが昨日の深夜にやっと解決したので書き残します。

開発環境は LinuxMint17.3、AndroidStudio2.1.3、ndk r10e、Cocos2d-x3.10で構築。

具体的に何が起こっていたかというと、
本にしたがって、 /proj.android-studio/app/jni/Android.mk をClasses内のcppファイルを全てビルドするように書き換えてビルドするという解説がされていたので、それを鵜呑みにして実行したものの何度やっても新規に追加したcppが無視されるというもの。

実際に書き換えないといけないのはLinux向けのビルドならプロジェクトルートの CMakeLists.txt 、Android向けなら /proj.android/app/jni/Android.mk を書き換える。
上記開発環境のもとではproj.android-studio以下のファイルじゃない。
proj.android以下のファイル。

他の環境は知らない。

放っておくと忘れきってまた同じ所でハマって血の涙を流すことになりそうなのでメモ。
知っている人からすれば何だそんなことかという内容。聞ける人が近くにいないと時間がたくさん失われるから新規に何か技術を習得しようという人は母国語が通用する範囲で素人にまで十分以上に普及しているものを使うのが良いよ。本当に。

Raspberry piで2.2インチ液晶を使った時の画面の向きを統一する

2015年1月12日 Linux

この前の記事( http://www.kotokoi.org?p=1499 )で2.2インチ液晶で表示するところまではできたんだけど、実はその後、ちょっと気になる部分が出てきてた。
コンソール自体は望んだ通りの向きで表示されるのに、startxしたりjfbtermを立ち上げると画面が縦に・・・。これは普通にケースなんかをつけようとした時に大いに問題になってくるので、ぜひとも解決したいなと思って個別に回転させる方法を試したけども結果的にどれもうまく行かなかった。

最終的に設定ファイルの新規作成と書き換えで解決したのでメモを残しておくよ。
この前は紹介したサイトの通りにやったから記事内に手順は書かなかったけど今回はひと通りの手順。

$ sudo nano /etc/modprobe.d/raspi-blacklist.conf

blacklist spi-bcm2708がコメントアウトされていなければコメントアウト。

$ sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update
$ sudo shutdown -r now

モジュールをインストールして再起動。

$ sudo modprobe fbtft_device name=adafruit22a

$ sudo nano /etc/modules

fbtft_device を追記、または残す。
name=adafruit22a verbose=0 は追記しない、または削除。

$ sudo nano /boot/cmdline.txt

fbcon=map:10 fbcon=font:VGA8x8 を追記、または残す。
fbcon=rotate:1は追記しない、または削除。

ここまでの参考( http://aaron-brown.net/blog/?p=99 )

fbcon=font:VGA8x8はちょっと見づらいから見やすいのを使う。

$ sudo nano /etc/modprobe.d/adafruit.conf

options fbtft_device name=adafruit22a rotate=90 この内容で作成。
rotateは0、90、180、270が設定できる。

ここまでの参考( https://learn.adafruit.com/adafruit-2-2-pitft-hat-320-240-primary-display-for-raspberry-pi/extras )

これで再起動。

できた!!

jfbtermも

rasp006

LXDEも

rasp007

ヒューッ、ちゃんと望んだ通りの画面の向きで表示してる!

プロンプトの表示(pi@〜)が無いのはexport SP1=””で消したせい。
狭いからこういう細かいところ大事。

ねんがんの2.2いんちえきしょうをてにいれたぞ!

2015年1月9日 Linux, ToDo, 工作

2015/01/12 追記 :
画面の向きの設定に関してより良い設定を見つけましたので、
これから試す方は次の記事( http://www.kotokoi.org?p=1564 )を参照してください。

一昨日の記事でもふれたけども、実はraspberry piの入手に先駆けてaliexpressでili9340というコントローラーチップを載せた2.2インチ液晶を手に入れていたのです。
Mobile Raspberry Pi Computer的なものを作ってみたくて。
ちょうどA+もセットアップできたのでとにかく小さいものを作ってみようと思います。
ソフトのインストール、設定変更はSSH経由で。
A+以外なら普通にUSBキーボードとか挿したらいい。

A+のGPIOピン配置はUSBポートを右にGPIOピンを上に見た時、下段が奇数番、上段が偶数番、左下端1番ピン、右上端40番ピンまでの40ピンとなっています。
このサイト( http://aaron-brown.net/blog/?p=99 )のピン配置、コマンドを参考に作業を進めます。ピン配置表の右端の数字がGPIOピン番号。

そんなわけで早速つなぎましょう。

板

こんな感じの板を作ってもいいし線だけでも良いよ。お好きに。ハンダ付けが面倒ならメス-メスのジャンパワイヤがおすすめ。

つないだ。

つないだ。

つないだら上でリンクしてる記事に従ってraspi-blacklist.confを確認。
blacklist spi-bcm2708がコメントアウトされていなければコメントアウト。
カーネルモジュールをインストールして再起動、モジュールを読み込んで/etc/modulesに設定追記。
/boot/cmdline.txtはスペース区切りになってるから適当なところに挟みこむなり末尾に追記するなり、お好きに。

リンク先の記事にはfbcon=font:VGA8x8って書いてあるけどここは表示用に使うフォントが指定できるので見やすいものを選ぶといい。

MINI4x6, VGA8x8, Acorn8x8, PEARL8x8, ProFont6x11, 7×14, VGA8x16, SUN8x16, 10×18, SUN12x22

ざっとこれだけ。自分のはProFont6x11にした。ちっちゃいけど見やすい。
詳細はここ( https://github.com/notro/fbtft/wiki/Boot-console )から見れる。

fbcon=rotate:1の部分は0〜3で縦、時計回り、180度回転、反時計回りの設定ができるようになってる。
自分のはfbcon=rotate:3にした。これはハンダ付けの時に液晶の向きを考える前に配線をさっさと済ませてしまったせい。
格好良い言い方をするなら「考える前に事はすでに終わっていた」ということ。
格好わるい言い方をするなら「考える前に事はすでに終わっていた」ということ。ニュアンス大事。

ここまででとりあえずコンソール画面の表示はできるようになったはず。できない時は配線間違いとか接触不良とか確認するといいよ。単なる初期化失敗もまれにあるから再起動を試すのもあり。

rasp003

点いた。

で、ここからstartxしちゃおうかな?とか思うじゃん?
で、startxって打ってEnter押すじゃん?押してみ?

画面がブラックアウトしたでしょ?
動かないでしょ?でも、これ実は出力先間違ってるだけでGUI起ち上がっちゃってるんだよ。
困るじゃん?

そんなわけだから、もう一箇所だけ設定を変更します。
このファイル → /usr/share/X11/xorg.conf.d/99-fbturbo.conf

$ sudo nano /usr/share/X11/xorg.conf.d/99-fbturbo.conf

とかやると

# This is a minimal sample config file, which can be copied to
# /etc/X11/xorg.conf in order to make the Xorg server pick up
# and load xf86-video-fbturbo driver installed in the system.
#
# When troubleshooting, check /var/log/Xorg.0.log for the debugging
# output and error messages.
#
# Run "man fbturbo" to get additional information about the extra
# configuration options for tuning the driver.

Section "Device"
        Identifier      "Allwinner A10/A13 FBDEV"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb0"

        Option          "SwapbuffersWait" "true"
EndSection

こんな感じになってるんだけど、”/dev/fb0″のところを”/dev/fb1″に変更。
できたら念の為、一旦再起動して、startx

rasp004

できた。

狭すぎて使い物にならないけど、おおってなるね!デスクトップマシンじゃないからコンソールだけあれば十分だけどね!!

ついでなのでBluetooth関連のソフトも入れてBTキーボードも繋いじゃうよ。

$ sudo apt-get install bluetooth bluez-utils

でインストール。
BTドングルを挿して

$ hcitool scan

見つけたコロン区切りの文字列を使って
※複数出てきたらそのまま繋がずにもう一度scan試したほうが良いかも。

$ sudo bluez-simple-agent hci0 xx:xx:xx:xx:xx:xx

PIN入れろと言われるので、適当な数列を入力してEnter(1111とか1234とかでいい)。
BTキーボード側で同じ数列を入力してEnter。
うまく行くとキーボードの情報が登録される。

あとは

$ sudo bluez-test-device trusted xx:xx:xx:xx:xx:xx yes
$ sudo bluez-test-input connect xx:xx:xx:xx:xx:xx

rasp005

これでキーボードが使えるからSSH経由じゃなく直接操作できるようになる。
あとはモバイルバッテリーなんかと一緒に箱に詰めるだけ。スーパー簡単に出来ました。ふひひ。

A+の消費電力はアイドル時 0.09A (0.45W) 負荷時 0.11A (0.55W) 参考( http://blog.livedoor.jp/victory7com/archives/41343773.html ) らしいので10000mAhのモバイルバッテリーなら液晶込みでも 4〜6 40時間位は余裕で動きそう。

計算を間違えてましたフンべろりぃ☆というかそんなワケ無いだろうと混乱してしまって4〜6とか書いてしまいました。4000〜6000を90〜110で割っても4〜6にはならないですね。
後日検証して追記します。

Raspberry pi model A+を買ったのでセットアップ手順メモ

2015年1月7日 Linux

インストールはnoobsで済ませたから面倒な部分は一切無いけども、次やる時打ち込むの面倒なのでテキストで残しとく。

まずはインストール直後に実行されるraspi-config
・ホスト名を適当に付ける
・SSHをenableに
最低限これだけはやる

有線/無線LANがあればどちらか使えるようにしておく。
USBハブ無いとA+だけではセットアップ面倒だから無いならUSBハブを用意する。
無線LANはコマンド面倒ならGUIで設定。

繋がったらifconfigかiwconfigあたりでIP確認。

ここまでやればあとは全部リモートでできるよ!やったね!!
端末の日本語が全部豆腐でもいいならそのまま作業進めてもいいけども。
A+でもUSBポートの数を気にしなくて良くなるしモニタも専有されないしアニメ見ながら作業できるしSSHにしなよ!

$ ssh pi@xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxxの部分はIP

$ sudo dpkg-reconfigure locales
※raspi-configでもできるけどとりあえずこっちで

ロケールを設定とりあえず3つチェック入れとく。

en_US.UTF-8
ja_JP.EUC-JP
ja_JP.UTF-8

en_US.UTF-8を標準に

$ sudo dpkg-reconfigure tzdata
※raspi-configでもできるけど・・・

タイムゾーンをTokyoに

$ sudo apt-get apdate
$ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname avahi-daemon avahi-autoipd libnss-mdns samba

avahi便利。ホスト名.localで接続できるようになる。
sambaとフォントは別に無くてもいい。

$ sudo nano /etc/samba/smb.conf

※別にnanoじゃなくても良いよ。好きなの使え。

自分のはこんな感じに追加した。

[共有フォルダ名]
path = /home/pi/dirname
read only=no1
browsable=yes
guest ok = yes
force user = pi

$ sudo nano /etc/hosts.deny

一行追記 sshd: ALL
とりあえず全部はじく

$ sudo nano /etc/hosts.allow

一行追記 sshd: xxx.xxx.xxx.0/24 127.0.0.0/8
許可するIPグループを書き込む。

/24だと広すぎる気もする。一般家庭なら/28前後でいいかもしれない。

$ sudo nano /etc/ssh/sshd_config

PermitRootLogin を yes から no に。

2015/01/08 PermitRootLogin忘れてたので追記。

$ sudo service samba restart
$ sudo service ssh restart

サービス再起動

あとは煮るなり焼くなり。

そうそう、A+のために2.2インチの液晶買ったから後で試すつもりでおりますよ。

日付に頼らずにバックアップの世代管理

2013年11月4日 Linux, スクリプト関連

先月の頭あたりにツイートしたきり放置してたやつ。
世代管理というとdateコマンドで日付を特定して古い日付のを削除して・・・とか思いがちだけど、たまたまサーバが落ちてましたとか電源切ってましたとかで削除されなかった時にゴミが残り続けてしまうのでファイル数上限を設定する方が上等かなと。

#!/bin/bash

cd "/filedir/daily/"
dt=`date +%Y%m%d%H`
/usr/bin/crontab -l > "tablog${dt}.txt"
fl=`ls | wc -l`
fn="${1}"
if [ -z "${fn}" ]
then
  fn="10"
fi
if [ ${fl} -gt ${fn} ]
then
  rmf=$(( ${fl} - ${fn} ))
  rm `ls | head -${rmf}`
fi

Qiitaに初投稿しちゃおうかと思ったんだけど、その前にこっちで出しとく。
なぜならQiitaは自分のホームではないから。
既にgithubでは公開済みだし。

半端ないアウェー感。

WEBラジオ落として聞くー

2013年10月28日 Linux, スクリプト関連

こんなの書いてみた。
引数でasxファイルを渡してやるとmimmsで/tmpにダウンロードしてくれるの。
リンクのURLって引用符で括ってあれば割と簡単に抽出できるんだね。

grepの-oオプション便利!

#!/bin/bash
cd /tmp/
fln=( ${@} )
for (( i = 0; i < ${#}; i++ ))
{
  mimms `cat ${fln[i]} | grep HREF | grep -o "[@-~].*" | sed "s/"//g"`
}

Linuxで録画予約を自動化するスクリプト書いた

2013年10月21日 Linux, スクリプト関連

2013/11/13 追記 :
recdgen.shを更新しました。iepg.listに特番の番号を放置した時、受信できない放送局の番組に番号がそのまま引き継がれて正常に録画ができなくなる可能性があったので、ch.listに登録の無い局に出会った時に該当番号を削除する処理を追加。
blog記事中のスクリプトは更新済みです。

2013/10/25 追記 :
recdgen.shに録画情報のチェック機能を追加しました。
翌週の放送がないときは録画しない、すでに放送された番組のデータが残っていたら最新のものに差し替える、録画情報がおかしい時は録画予約に反映しないなど。
その他、細かく修正を行なっています。詳細な変更点はgithubで確認してください。
blog記事中のスクリプトは更新済みです。

2013/10/24 追記 :
recdgen.sh、rectv.shを更新しました。
recdgen.shの変更点は、設定方法の変更とreadmeに記載されていた挙動とずれていた部分の修正。
rectv.shの変更点は、設定方法の変更です。recdgen.sh、rectv.shともにディレクトリの設定を変更しなくても実行権限をつけるだけでそれなりに動くようになりました。rectv.shのhddの設定は必要です。
blog記事中のスクリプトは更新済みです。

2013/10/23 追記 :
recdgen.shを更新しました。
変更点は、エラー処理の追加、無駄な処理の削除、iepg.listの末尾のアイテムを取りこぼす可能性があった処理の修正、問題箇所がふわっとわかるかもしれないエラーログ出力の追加です。
記事中のスクリプトは更新済みです。

PT3で録画サーバを構築して1年とちょっと。
これまでなんとなく手入力でcrontabに録画予約を登録していたんだけども、いい加減面倒になってきたので、この際だからと思って録画予約を自動化するスクリプトを書いてみたよ。
LinuxMint13で動くよ!!Shellscriptだよ!!!
これに関しては既存のソフトウェアなんかもたくさん書かれていて車輪の再発明もいいところなんだけど、既存のものはSQLを使ってたりして事前の準備が面倒すぎるので、お勉強のついで。

スクリプト2つと設定ファイル3つで動くよ!LAMPなしでいけちゃうよ!!やったね!!

スクリプトのダウンロードはgithub(右側 Download ZIP)ここ(rectv.zip)から

使い方はZIPファイルの中のReadme読んでください・・・
一応必要十分な情報は盛りこんであるはずだから。
なんというかReadme書ききったらもう気力が残ってない。マニュアルとか苦行すぎるw

あとこれはかなりどうでも良い事なんだけども、
recdgen.shのcrontabのjob登録のしかたがかなり乱暴なので、気になるならは自分で直してね。
そのままでも不都合なければそのままでも動くけども。

それからrecdgen.shの実行前には必ず crontab -l > filename してね。

やらないでcrontab飛んだー!!とか言われても知らんがなwwwwwwwwwwwとしか言えないから。
ちゃんと注意書きしたからね。

それからこれかなり大事な部分、
録画に失敗しても責任取らないし取れないから事前に十分な動作テストを行なってから使ってください。

一応スクリプトすぐ読めるように置いときます。

この投稿の続きを読む »

シェルスクリプトから自動で短縮URL付きのつぶやきをTwitterに投稿。(修正)

2010年5月2日 Linux, スクリプト関連, 雑記

長~いURLを短縮させようとすると短縮自体は成功するのに本文への反映がされないという現象を確認してしまったので急遽修正版。
修正と言っても1行消しただけなので、その他の仕様は前回と変わってない。

使い方とかはこの辺参照。

#!/bin/bash
str=”$1″
#第一引数からURLを雑に抽出し配列へ
array=( `echo “$1” | sed -e ‘s/http/nhttp/g’ -e ‘s/ftp/nftp/g’ -e ‘s/ /n/g’ | grep tp://` )
#配列に含まれる要素の数分処理
for (( i = 0; i < ${#array[*]}; i++ ))
{
  #配列2は諸事情により削除されました。
  #goo.glで配列のURLを短縮URLに/配列3へ流し込み
  array3[i]=`curl -G “http://ggl-shortener.appspot.com/?url=${array[i]}” | sed ‘s/”/n/g’ | grep tp://`
  #変数strのURL部分を差し替え
  str=`echo $str | sed “s%${array[i]}%${array3[i]}%”`
}
#文字数を軽く確認してからつぶやく
if [ ${#str} -lt 141 ]
  then
    #id、passリストから1行目を読み込み。※書式 id:pass
    IPS=`sed -n 1p ~/working/shellscript/ips.list`
    curl -u “$IPS” -d status=”$str” http://twitter.com/statuses/update.xml
  exit 0
else
  echo ‘文字数多いみたい。’
  exit 1
fi

ガチな暫定コード。これからxAuthに対応させようと思っているので、出来たらまたコード更新の予定。しぇるすくりぷったーとか参考にしようかと思ったけども、Pythonで生で実装してるコードを公開している方がいたので、勉強がてらそっちを移植してみようと思うよ。

そこまで出来れば投稿部分に関してはTwitterクライアントのシェルスクリプト実装の中では最強だもんね。あくまで投稿部分のみだけど。

シェルスクリプトから自動で短縮URL付きのつぶやきをTwitterに投稿。

2010年4月21日 Linux, スクリプト関連, 雑記

行けた行けた。半角スペースの入った引数つけるときは二重引用符じゃダメなのねw
何はともあれ上手く行ったので公開。制限事項は多分前回のものとほとんど変わらずURLの中に「スペース」が混じるとそこで区切られちゃう点。

使い方は簡単でスクリプトの実行時に引数として投稿内容を単引用符(Shift+7 のヤツ)で括ったものを付けて実行するだけ。一応複数のURLでも大丈夫。
URLと本文の切り分けに半角スペースを使っているので、半角スペースを含むURLには前述の通り使えない。

その辺のことは前回の記事を自分で読んだり実際に動かしてみたりして確認してくだしあ。
いま何か頭が働かないんだ。そんなわけで最終成果物。

#!/bin/bash
str=”$1″
#第一引数からURLを雑に抽出し配列へ
array=( `echo “$1” | sed -e ‘s/http/nhttp/g’ -e ‘s/ftp/nftp/g’ -e ‘s/ /n/g’ | grep tp://` )
#配列に含まれる要素の数分処理
for (( i = 0; i < ${#array[*]}; i++ ))
{
  #URLエンコード/配列2へ流し込み
  array2[i]=`echo “${array[i]}” | nkf -eMQ | tr = %`
  #goo.glで配列2のURLを短縮URLに/配列3へ流し込み
  array3[i]=`curl -G “http://ggl-shortener.appspot.com/?url=${array2[i]}” | sed ‘s/”/n/g’ | grep tp://`
  #変数strのURL部分を差し替え
  str=`echo $str | sed “s%${array[i]}%${array3[i]}%”`
}
#文字数を軽く確認してからつぶやく
if [ ${#str} -lt 141 ]
  then
    IPS=`sed -n 1p ~/working/shellscript/ips.list`
    curl -u “$IPS” -d status=”$str” http://twitter.com/statuses/update.xml
  exit 0
else
  echo ‘文字数多いみたい。’
  exit 1
fi

大まかな処理の流れはコメント行の通り。
コメント行読んでどうにかしろっていうのもアレな感じのコードなので、流れだけもうちょっと詳しく書いておく。

まずは1~4行目 変数strに第一引数の中身を代入。次に配列変数arrayにURLを抽出し抽出結果を代入。
5~13行目 for文で配列に含まれる要素の数の分だけ処理。配列変数array2にURLエンコードされたarrayの中身を代入。array2の中身をgoo.glに投げて配列変数array3に結果を代入。変数strのURL部分を差し替えて上書き。
14~23行目 文字数を軽く確認して141文字未満ならつぶやく。そうでないならエラーで終了。

こんな感じ。あ、言うほど面倒くさくなかったね。どうでも良いけどいつも通りインデントが全角なのでそこだけ注意してください。

さ、あとは仕掛かりのリスト生成をこなせば、いつも通りまったり絵を描いて過ごせるよ。

ふぉふぉふぉ、役に立ったならご褒美くらいくださってもよろしくってよ。
ホラこんな所にアマゾンのウィッシュリストが。