mbed IDEからエクスポートしたMercurialレポジトリにcommitしようとしたらディレクトリが無えよと怒られた件
> hg add . adding .cproject adding .project (省略) > hg status A .cproject A .hgignore A .mbed A .project (省略)
で、ファイルとディレクトリが追加されたことを確認した上で、コミットしようとすると以下のようなエラーが発生する
> hg commit abort: could not lock repository /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: No such file or directory > file /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: directory
🤔🤔🤔🤔No such file or directoryって言われても存在するんだが…???
エラーの原因を調べてみる
Mercurialにはデバッグ用のオプションがあるのでそれを付けてやることで、普段は表示されない細かなエラーログを表示させることができる。
--debug
と--verbose
と--traceback
オプションを付けて再度hg commit
すると以下のような出力が得られる。
> hg --debug --verbose --traceback commit Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 191, in _runcatch return _dispatch(req) File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 924, in _dispatch cmdpats, cmdoptions) File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 681, in runcommand ret = _runcommand(ui, options, cmd, d) File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 1055, in _runcommand return checkargs() File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 1015, in checkargs return cmdfunc() File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 921, in <lambda> d = lambda: util.checksignature(func)(ui, *args, **cmdoptions) File "/usr/lib/python2.7/dist-packages/mercurial/util.py", line 993, in check return func(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/mercurial/commands.py", line 7013, in verify return hg.verify(repo) File "/usr/lib/python2.7/dist-packages/mercurial/hg.py", line 815, in verify ret = verifymod.verify(repo) File "/usr/lib/python2.7/dist-packages/mercurial/verify.py", line 25, in verify with repo.lock(): File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1346, in lock self.invalidate, _('repository %s') % self.origroot) File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1306, in _lock parentlock=parentlock) File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 57, in __init__ self.delay = self.lock() File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 87, in lock self._trylock() File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 129, in _trylock why.filename, self.desc) LockUnavailable: [Errno 2] No such file or directory: '/mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led/.hg/store/lock' abort: could not lock repository /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: No such file or directory
エラーの原因はレポジトリが格納されているディレクトリそのものではなく、格納されているディレクトリ内の.hg/store/lock
が存在しない事に起因することが分かる。
lockファイル自体はロック用のファイルなので、.hg内にstoreディレクトリを作成してみる。
> mkdir .hg/store > hg commit > hg log changeset: 0:b4a651370c4a tag: tip user: Yuka Nakano <nakanoyuka@hogehoge.com> date: Tue Sep 12 02:31:45 2017 +0900 summary: add files.
以上、正常にコミット出来たことを確認して終了。
追記
mbed IDE上で一度もコミットしていないと、storeディレクトリが無い状態でリポジトリがエクスポートされる可能性があるので、もし一度もコミットしていないのならしてからエクスポートした方が良いかもしれない。
また、一度もコミットしてないレポジトリはパブリッシュ出来ないので注意する必要がある。(ローカルからmbed IDE上のリモートレポジトリにプッシュするにはパブリッシュする必要がある)
あとがき
中野有香かわいい。
久々にWindows 10 Mobile端末を買ってみた
NuAnsNEOが中古で結構安く売っていたので、衝動買い。
安定のLumiaにしようかと思ったがそこそこなお値段したのであえて国内機種にしてみることに。
ファット・カンパニー アンジェラ・バルザック 1/7スケールフィギュアを買った
買っちまったぜ.... 予約してましたがちょっと発売が延期になって2ヶ月遅れぐらいで届いた感じです。
GTK+のメニューアイコンが出ない時の対処
mikutterとかGIMPのコンテキストメニュー(右クリックメニュー)のアイコンがデフォルト状態で非表示だったのを表示するように設定したので覚え書き。
続きを読むHDC1000とRaspberry Piを使ってTwitterに室温と湿度を投げてみた
ちょっとまえに秋月で買った温湿度センサーHDC1000から取ってきた温湿度を自動でTwitterに投げるようにしてみました。
買ったは良いものの、ラズパイがLCD液晶に現在の時刻と温度と湿度を出すだけの機械と化していたので「インターネットにつながっている」という利点を活かしてみました。
とりあえずは簡易的なIoTになってるかなぁって感じですw(ちょっと違うかな?)
設置編
qiita.com
そこそこ資料も出回ってるセンサーなので解説は....要らなそうですね。
Pythonからセンサーを弄ってみる
# -*- coding: utf-8 -*- import wiringpi import os import struct from time import sleep wiringpi.wiringPiSetup() #setup wiringpi i2c = wiringpi.I2C() #get I2C dev = i2c.setup(0x40) #setup I2C device i2c.write(dev,0x02) #HDC1000 CONFIGURATION POINTER i2c.write(dev,0x10) #send 1byte i2c.write(dev,0x00) #send 1byte sleep((6350.0 + 6500.0 + 500.0)/1000000.0) dataAry = struct.unpack("BBBB",os.read(dev,4)) os.close(dev) temp = (dataAry[0] << 8) | (dataAry[1]) hudi = (dataAry[2] << 8) | (dataAry[3]) temp = ((temp / 65535.0) * 165 - 40) hudi = ((hudi / 65535.0 ) * 100) print "Humidity %.2f" % hudi print "Temperature %.2f" % temp
Humidity 62.47
Temperature 31.08
出力結果はこんな風になるはずです。設置編にあるCのソースを参考にPythonで書いてみました。
ちょっと違う所と言えばGPIOでRDYピンからの完了フラグを確認せずに、仕様書に書いてある時間分だけsleepするようにしてみたところぐらいですかね。
0x00~0x01に温湿度のデータが入るとのことで、アドレスに対してreadすればいけるかなーって思ったらI/Oエラーしか返ってこなくて3時間ぐらい潰しました。
wiringpiのpythonバインディングライブラリを使ってるのでビルドとインストールお願いします。
github.com
Twitterにも投稿してみる
# -*- coding: utf-8 -*- import wiringpi import os import struct from time import sleep import tweepy #setup tweepy consumer_key = "hogehogehogehoge" consumer_secret = "hogehogehogehoge" access_token = "hogehogehogehoge" access_secret = "hogehogehogehoge" auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_secret) api = tweepy.API(auth) #setup HDC1000 wiringpi.wiringPiSetup() #setup wiringpi i2c = wiringpi.I2C() #get I2C dev = i2c.setup(0x40) #setup I2C device i2c.write(dev,0x02) #HDC1000 CONFIGURATION POINTER i2c.write(dev,0x10) #send 1byte i2c.write(dev,0x00) #send 1byte sleep((6350.0 + 6500.0 + 500.0)/1000000.0) dataAry = struct.unpack("BBBB",os.read(dev,4)) os.close(dev) temp = (dataAry[0] << 8) | (dataAry[1]) hudi = (dataAry[2] << 8) | (dataAry[3]) temp = ((temp / 65535.0) * 165 - 40) hudi = ((hudi / 65535.0 ) * 100) print "Humidity %.2f" % hudi print "Temperature %.2f" % temp api.update_status(status="現在の室温は" + ("%.2f度" % temp) + "、湿度は" + ("%.2f" % hudi) + "%です\n#もやしの部屋")
TwitterAPIクライアントにはtweepyを使いました。これはpipからインストールできるので
sudo pip install tweepy
でインストールできます。APIキーをセットすれば
現在の室温は32.35度、湿度は58.28%です#もやしの部屋
— (農薬たっぷり)もやしきんぐ (@myskng) 2016年6月20日
こんな風にツイートされるはずです。
cronを使って自動ツイートしてみる
手動でツイートするだけでは面白くないのでcronを使って自動的にツイートできるようにしてみました。
cronからスクリプトを呼ぶだけなので難しいことはしてないです。
sudo service cron start sudo chkconfig cron on
cronサービスを起動し、ラズパイの起動時に自動的に起動するようにします。(すでにしてあるなら飛ばしてもおk)
I2Cの操作にはroot権限を要するので、今回はrootのcrontabにスクリプトを登録します。
sudo crontab -e
00 * * * * python /home/pi/temp_twitter.py
一応これで1時間に1回自動的にツイートされるようになります。