ファイルのタイムスタンプで検索
linuxとかでファイルのタイムスタンプがある条件に一致するものを探したい場合、
findコマンドのmtimeオプションを使いますが、
例えば更新日時が1日以内の場合、mtimeオプションに指定する値は+1,-1,1の
どれだったかな〜と悩みます。昔からの伝統である「manを見ろ」に従い、
manページ見て確認しますが、
- mtime n
ファイルの最終内容更新日時が n 日前ならば、真を返す。 何日前かを計算する際に、現在時刻との時間差を 24 で割った余りを 切り捨てることが、ファイルの内容更新日時の解釈にどんな影響を 及ぼすかについては、 -atime の説明を見てほしい。
- atime n
ファイルの最終アクセス日時が n 日前ならば、真を返す。 ファイルの最終アクセス日時が何日前かを計算する際、現在時刻との時間差を 24 で割った余りは切り捨てられる。従って、 -atime +1 にマッチするためには、 ファイルは少なくとも二日前にアクセスされていなければならない。
でもmanページは暗号のように難しい説明が書いてるだけで
非常に分かりにくいです。
で、今後また忘れたときのために、以下にメモしておきます。
mtimeで指定する値 | 意味 |
---|---|
+1 | 1日前〜現在。つまり1日以内に更新されたファイル |
1 | 1日前〜2日前 |
-1 | 2日前〜過去。つまり2日以上過去のファイル |
Arduino MEGA
うちにArduinoがやってきました。アルデューイノと読むそうです。
こいつが何者かというと、AVRマイコンと入出力ポートを備えた基板です。
Arduino IDEはC++風のArduino言語を作成する統合開発環境です。
Arduino IDEでは作成したプログラムをコンパイルして、Aruduino基板のほうに転送してくれます。
何はともあれ、まずは使ってみよう!!!というこで、
1.Arduino IDEダウンロード
ここからArduino IDEをダウンロードします。
Arduino - Software
2.Arduino IDE初期設定
Arduino IDEを起動し、メニューから[ツール]-[マイコンボード]から使用しているボードを選択します。私の場合、Arduino MEGA 2560を選択しました。
3.通信設定
Arduino IDEで作成したプログラムはIDE上でコンパイルし、基板のファームウェアへ転送します。
このとき、USBシリアル変換ケーブルを使用してシリアルで書込みます。
基板をPCにUSBシリアル変換ケーブルで接続したあと、IDEのメニュー[ツール]-[シリアルポート]から使用するデバイスを選択して設定します。
当然、USBシリアルドライバが必要になるので事前にインストールしておく。
私の場合Mac OSXなので、以下のものを使用しました。
Virtual COM Port Drivers
4.サンプルプログラムコンパイル&転送
メニューから[ファイル]-[スケッチの例]-[01.Basic]-[Blink]を選択し、
サンプルファイルを開きます。
ソースはこんな感じになっています。13ピン接続LEDを1秒間隔でON/OFFにします。
ウィンドウに表示されている矢印ボタンを押して、ソースのコンパイルを行い、
基板のファームウェアに転送します。
Heartbleed問題
先週発表されたOpenSSLの脆弱性問題ですが、ここ最近の脆弱性の中で一番深刻なセキュリティホールのようです。ある発表によると深刻度10段階中、11ぐらいとのこと。
SSLは普段意識せず使用していますが、インターネット上の通信を暗号化する際に利用しています。https〜で始まるURLが該当します。
バグ自体は非常に単純な境界チェック漏れ(バッファーオーバフロー)です。
ハートビートリクエストのペイロード長フィールドに実際に送信している値より、大きな値を指定して送信するとペイロード領域を超えたメモリ領域まで読込んで、ハートビートレスポンスとして送り返すというものです。
グーグルのニールさんが発見したそうですが、さすがですね。
シンプルなバグなので、修正もシンプルで私でもよく分かりました。
単純なバグですが、影響の大きさにびっくりです。
実際悪用されても、痕跡は残らないため、どうなるのやら。
見覚えないクレジットカードの請求が来ませんように。。
OpenSSL Security Advisory [07 Apr 2014]
========================================TLS heartbeat read overrun (CVE-2014-0160)
==========================================A missing bounds check in the handling of the TLS heartbeat extension can be
used to reveal up to 64k of memory to a connected client or server.Only 1.0.1 and 1.0.2-beta releases of OpenSSL are affected including
1.0.1f and 1.0.2-beta1.Thanks for Neel Mehta of Google Security for discovering this bug and to
Adam Langleyand Bodo Moeller for
preparing the fix.Affected users should upgrade to OpenSSL 1.0.1g. Users unable to immediately
upgrade can alternatively recompile OpenSSL with -DOPENSSL_NO_HEARTBEATS.1.0.2 will be fixed in 1.0.2-beta2.
修正前のt1_lib.c
2561 /* Read type and payload length first */ 2562 hbtype = *p++; 2563 n2s(p, payload); 2564 pl = p; 2565 2566 if (s->msg_callback) 2567 s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT, 2568 &s->s3->rrec.data[0], s->s3->rrec.length, 2569 s, s->msg_callback_arg); 2570 2571 if (hbtype == TLS1_HB_REQUEST) 2572 { 2573 unsigned char *buffer, *bp; 2574 int r; 2575 2576 /* Allocate memory for the response, size is 1 bytes 2577 * message type, plus 2 bytes payload length, plus 2578 * payload, plus padding 2579 */ 2580 buffer = OPENSSL_malloc(1 + 2 + payload + padding); 2581 bp = buffer; 2582 2583 /* Enter response type, length and copy payload */ 2584 *bp++ = TLS1_HB_RESPONSE; 2585 s2n(payload, bp); 2586 memcpy(bp, pl, payload);
修正後のt1_lib.c
2596 /* Read type and payload length first */ 2597 if (1 + 2 + 16 > s->s3->rrec.length) 2598 return 0; /* silently discard */ 2599 hbtype = *p++; 2600 n2s(p, payload); 2601 if (1 + 2 + payload + 16 > s->s3->rrec.length) 2602 return 0; /* silently discard per RFC 6520 sec. 4 */ 2603 pl = p; 2604 2605 if (hbtype == TLS1_HB_REQUEST) 2606 { 2607 unsigned char *buffer, *bp; 2608 int r; 2609 2610 /* Allocate memory for the response, size is 1 bytes 2611 * message type, plus 2 bytes payload length, plus 2612 * payload, plus padding 2613 */ 2614 buffer = OPENSSL_malloc(1 + 2 + payload + padding); 2615 bp = buffer; 2616 2617 /* Enter response type, length and copy payload */ 2618 *bp++ = TLS1_HB_RESPONSE; 2619 s2n(payload, bp); 2620 memcpy(bp, pl, payload);
Windows Creating and Opening Files
最近PowerShellを使ってスクリプトを書いたのですが、Windowsのファイルオープン仕様でまんまとトラップにはまりました。UNIXの人間だからはまったのか...
Windowsでは、ファイルをオープンする際、アクセスモードと共有モードの指定ができるようです。
監視系のソフトが以下のモードで常時ファイルをオープンしているとします。(多分)
アクセスモード | 共有モード |
---|---|
READ | WRITE/READ/DELETE |
共有モードがWRITE/READ/DELETE全てOKだからファイルをクリアするのに、Clear-Contentコマンドでも問題ないだろうと思っていました。
が、、、
Clear-contentのコマンドが異常終了。。
Clear-contentコマンドのモードを確認すると以下のとおり、共有モードがWRITEなんですね。
つまりREADでオープンしているプロセスがいるので、WRITEだけ許可するのはおかしいだろということですね。結局Out-fileコマンドでクリアすることにしました。
PSコマンド | アクセスモード | 共有モード |
---|---|---|
Clear-Content | WRITE/READ | WRITE |
Out-file | WRITE/READ | READ |
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363874%28v=vs.85%29.aspx
Windowsは難しい〜。っていうかClear-ContentでREADを許可しない仕様はどうなのって気がします。
2014年入ってからまだいいことないな〜。年男なのに。。
Twitter api 2014/1/14問題
スマホのアプリでTwitter APIを使用しているのですが、2014年に入ってからうんともすんとも動かなくなりました。ログを確認すると以下のメッセージが出力されていました。
403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following). Relevant discussions can be found on the Internet at: http://www.google.co.jp/search?q=10f5ada3 or http://www.google.co.jp/search?q=e574402b TwitterException{exceptionCode=[10f5ada3-e574402b], statusCode=403, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3}
調べてみると2014/1/14以降、HTTPでは使用できなくなることが判明。SSLを使用せよとのこと。
APIを3.0.5以降にアップグレードしたところ、無事動作しました。
http://stackoverflow.com/questions/21134176/twitterexception-unable-to-login
3D RepRapプリンタ製作
8月にLunavastで3Dプリンタを購入しましたが、なかなか重い腰があがらず、放置してました。11月になりようやく組立ててみました。
製作時におけるメモとして残しときます。
[購入店のサポート]
- 事前にmac osxでも動作可能と確認したが、一筋縄では動かない。問い合わせ時にそのあたりを回答してもらいたかった。
USBシリアル通信ではドライバを入れる必要がある。
http://www.ftdichip.com/Drivers/VCP.htmよりドライバを入手。 - endstopの基板がマニュアルと逆になっていた。lunavastに問い合わせたところ、取り付け写真を送付してくれたが、そのまま取り付けると、endstopのスイッチ位置がずれて、正常に動作しない。このため、ボルトにナットをかませて、高さを調整する必要があった。この高さ調整がくせ者で、ボルトの長さを長くしないといけないが、そのためのボルトがない。自分で購入するしかない。
-
マニュアルにZ軸モータにボルトが最初から取り付けてあると書いていたが、なかった。このためlunavastに確認したが、一切回答なし。販売してるものとしてどうよ。せめて部品送らなくてもいいから、一言回答してほしいものです。
結局ホームセンタいって、探してきました。
[組立時]
- RepRapプリンタの特徴である自己複製プリンタですが、部品がRepRapプリンタで作成したものであるため、それほど強度がありません。組立時、何度か部品がいってしまいました。予備があったので助かりました。組立時は注意が必要です。
- マニュアルが日本語のものと英語のものがあって、大変でした。英語は得意ではないので、フィーリングで作成しました。
[印刷時]
- 3DのモデリングはTinkerCADを使用。直感的で使いやすい感じでした。
- スライサ(gcode変換含む)はslic3rを使い、印刷はPrintrunを使用しました。
最新版のslic3r 1.0ではなぜかSTLファイルの読み込みでエラーが発生したので、0.9を使用しました。Printrunはmac osx用のバイナリをダウンロードして使用しましたが、特に問題なく動作してくれました。
[最後に]
テスト印刷をやってみましたが、プリントベッドとフィラメントを出力するノズルの距離に問題があるせいか、形がぐちゃぐちゃでした。また途中から印刷物がプリントベッドからはがれてしまい、印刷を継続できなくなってしまったので、印刷を中断。
難しいですね。
今回の3Dプリンタの製作を通じて、RepRapプリンタの仕組みが勉強できました。また部品は念のため、プリンタで作っとくほうが賢明ですね。
さあ、後もう少し、がんばるで。