サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
bearmini.hatenablog.com
<宣伝> この記事の内容をまとめてさらにアップデートした内容で「SORACOM で学ぶ AT コマンド入門」という本(電子書籍)にしました。 zenn.dev </宣伝> 準備編では ATI コマンドを実行してみました。 モデムを使ってダイヤルアップ接続をしてデータ通信を行うことができるようになるには、いくつかの AT コマンドを組み合わせて実行していく必要があります。 とはいっても、どこから手を付けたらいいかわからないので、まずは SORACOM が公開している、SORACOM Air でインターネットに接続するためのスクリプトを読み解いてみましょう。 SORACOM が実施しているハンズオンセミナーの資料が GitHub にて公開されています。 https://github.com/soracom/handson/blob/master/setup/setup.md#3-0 こちらの「
Go で書いたプログラムで、HTTP(S) による通信を行うとなぜか10秒間プログラム (goroutine) がストールして、その後正常に通信が行えるという謎な現象に悩まされ、無事解決できたのでここにメモしておきます。 といっても、解決のためにやったことといえば、Go のバージョンを 1.11.1(バグが修正されたバージョン)に上げただけなのですが😅 「同様の問題にハマっている人が多いみたいなので知見を共有すればよいのでは」という同僚の id:moznion のすすめもあって書いてみることにしました。 TL;DR 問題の内容と、解決に至るまでの経緯を時系列順に書き下してみます。 まず問題に気づいたのは、私が関わっているある Web サイトのログインなどの処理がやけにもっさりしているという報告を受け、それを私も確認したタイミングです。 エラーになるわけではないのですが、特定の API を
<宣伝> この記事の内容をまとめてさらにアップデートした内容で「SORACOM で学ぶ AT コマンド入門」という本(電子書籍)にしました。 zenn.dev </宣伝> この記事は SORACOM Advent Calendar 2017 4日目の記事です。 SORACOM の SIM を使っていると、「AT(エーティー)コマンド」というものを取り扱わないといけない場面にたまに出会いますよね。 私は出会います。 AT+CGDCONT=1,"IP","soracom.io" とかそんな感じのやつです。 この「AT コマンド」が「モデムを制御したり情報を取得したりするためのもの」というのはなんとなく知っているけれど、基本的にはネット上で見つけたのをあまり意味もわからずコピペして使ってたり、コマンドの意味を調べようと思ってもなかなかまとまった情報が見当たらなかったり、そもそも体系的に勉強しよう
ワンライナーで行けちゃいます😁 wireshark -k -i <(ssh user@host "tcpdump -U -n -w - -i eth0 'not port 22'") しかもリモートホスト側で何かしら特別な準備とかが不要なので非常にお気楽・お手軽です。 前提条件 手元の環境に Wireshark がインストールされており、コマンドラインから起動できる(上のワンライナーでは wireshark コマンド) リモートホストに ssh でログインできる(踏み台を経由するなどの場合は ~/.ssh/config でよしなに設定するか、頑張って引数を指定する) リモートホストに tcpdump がインストールされていて実行できる 解説 上記ワンライナーを実行すると、以下の図のように ssh で接続したホスト上で tcpdump コマンドを実行してパケットをキャプチャし、そのパケット
[追記 2019/09/11] Wio 3G SORACOM Edition や Wio LTE M1/NB1 といったラインナップも増えて、ますます安くセルラー通信機能付きの Arduino が使えるようになりました。 soracom.jp soracom.jp [追記 2019/09/11 おわり] [追記 2017/10/30, リンク修正 2019/09/11] SORACOM から Wio LTE JP Versoin が発売されたのでこの記事の内容にしたがって頑張るよりも安く(1万円以下で) Arduino で通信できるようになっちゃいましたね! soracom.jp 当記事には AT コマンドなど Wio LTE 他のデバイスでも使えたりしそうな情報がまだあると思いますし、Wio LTE では 3G が使えないので SORACOM の Global SIM の LDV を使っ
ssh で踏み台ホスト経由で目的のサーバーに到達したいということはよくあると思います。 たくさんの先人たちが ~/.ssh/config に書くべき内容について書き残してくれていますのでここでは特に詳しくは触れません。 基本的には ProxyCommand を使って、踏み台サーバーから目的のサーバーへと接続するような設定をすればよいのですが、この設定を ~/.ssh/config に書かずに、コマンドライン引数のみで実現できないかと思って調べてみました。 なぜそのように思ったかというと、たとえばあるサーバーに踏み台経由でログインするという処理をスクリプトにしてチームのメンバーに配布して使ってもらうような場合に、「まず .ssh/config を編集して・・・」というステップが入ってくるとそれだけで敷居が高くなってしまったり、間違いが入り込んでしまう余地が多くなってしまいます。 また、接続先
最近ブログの記事タイトルが長い気がするのでなんとか短めに抑えたいのですがなんとかならないものでしょうかね。 さて、昨年あたりから shellcheck というツールを使ってシェルスクリプトの lint をするようにしたので自分の shell 力が少し上がった気がしているのですが、以下のようなありがちなコードの解決策が覚えられそうになかったのでメモしておきます。 やりたいことは、read コマンドを使ってユーザーに複数の選択肢を提示して選んでもらうというとてもシンプルな、よくありがちなことだと思います。 read コマンドには -p オプションがあり、ユーザーに対して何かのプロンプトを提示することができます。 そこで read -r -p "$prompt" num という感じでプロンプトを表示しつつ num という名前の変数に選択されたの番号を取得することを考えます。 prompt 変数に
AWS 公式の Go 言語用 SDK がありますが、Developer Preview ということもあってかドキュメントがちょっと不足しているように思います。 github.com 私は Go のプログラムから DynamoDB を使いたかったのですが、検索するときのキーの指定の仕方とかがだいぶ特殊な感じだったので最初は苦労しましたが、とはいえ、AWS のマネージドサービスとしての DynamoDB を使う分には検索したりすれば多少情報が出てきますのでなんとかなります。 しかし DynamoDB Local を使うとなるとまったく情報がなく、だいぶつまづきました。 以下、いくつかハマったところと解決方法をメモしておきます。 1. 接続先として Endpoint を指定する必要がある var ac aws.Config ac.Endpoint = aws.String("hostname:p
さて、前回の記事では SORACOM Air が使える USB 3G/LTE モデムや Wi-Fi ルータをまとめましたが、今回はより IoT に特化した基板で SORACOM Air が使えるもの(動作報告がネット上で見つかったもの)をまとめてみたいと思います。例によって動作保証ではありませんのでそのあたりはご理解ください。 また記載した情報が間違っている可能性もあります。お気づきのことがありましたらコメント等でお知らせください。 Raspberry Pi + 3GPI(スリージーパイ) 3GPI(Raspberry Pi用3G通信モジュール) SORACOM(ソラコム)等 ドコモMVNO SIM対応 出版社/メーカー: メカトラックス株式会社メディア: エレクトロニクスこの商品を含むブログを見る 筆頭はメカトラックス社製の 3GPI でしょう。 こちらは Raspberry Pi に載
SORACOM Air SIMカード(データ通信のみ) (標準) 出版社/メーカー: 株式会社ソラコムメディア: この商品を含むブログを見る SORACOM Air とは、ひとことで言うと IoT (Internet of Things) 向けの SIM です。 API で通信速度のコントロールができたり、データ通信量の情報を取得できたりする特徴があります。 SORACOM Air は docomo の MVNO の SIM なので、docomo 端末もしくは SIM フリー端末で使えるはずです。 スマホでも使えるみたいですが、ここでは IoT の実験をするときの本命として Raspberry Pi との組み合わせで使いやすい、USB モデム(USB ドングル)、WiFi ルーターをメインにまとめてみたいと思います。 以下、ネット上で動作報告があったデバイスを紹介していきますが、動作保証で
答えを先に書くと、cygpath コマンドを使います。 Cygwin の形式(/cygdrive/c/... )→ Windows 形式(C:\... ) $ cygpath -w /cygdrive/c C:\ Windows 形式 → Cygwin 形式 $ cygpath C:\\ /cygdrive/c Cygwin から Windows のプログラムを起動しようとする場合、そのようなプログラムは Windows 式のパスしか受け付けない可能性が高いので、このように変換してやる必要があります。 逆に Windows 用のプログラムがファイルに書いたパスなどを読み取って Cygwin 側で処理したい場合もこのように変換する必要がありますね。 cygpath コマンドは、ルールに則って文字列を変換するだけのようなので、実在していないパスでも変換してくれるようです。 cygpath -w
Vim には Ctrl-A (以後 C-a) を押すとその時カーソルの下にある数をインクリメントしてくれるというプログラマに嬉しいキーバインドがあります。(C-x でデクリメント) これはたとえば 1 という文字の上で C-a を押すとその文字が 2 になり、続けて押していくと 3, 4, ... と増えていきます。9 の上で C-a を押すと 10 になり、続けて押していくと 11, 12, ... となります。また、3C-a と押すと一気に 3 増やしてくれます。なかなか賢いですね。 それから、-1 の上で C-a を押すと -2 ではなく 0 になるということに今日気づきました。 というのも、1−2 みたいなテキストの上で、2 を 3 に増やそうとして C-a を押したら 1-1 になったのでびっくりして気づいたわけです。(ちなみにそのまま C-a を押し続けると、1-2 => 1-
スクリプトなどで自動で Linux のユーザを追加して、そのユーザにパスワードまで設定したいということはあると思います。たとえばテスト環境の構築を自動化していてダミーユーザをたくさん作らないといけない場合など、たとえパスワードがバレても特に問題ない場合が当てはまるかと思います。 ちなみに Linux でコマンドラインからユーザを追加したい時に使えるコマンドとして adduser コマンドと useradd コマンドがあってどっちを使ったらいいのか迷ってしまってユーザ泣かせですが、私の認識では両者は基本的に同じことができて、単に adduser コマンドはインタラクティブ、useradd はワンライナー向き、というところで落ち着いています。 adduser コマンドや passwd コマンドなどはユーザのパスワードをコマンドラインオプションから指定できるようになっていません。インタラクティブ
まず、Ruby 本体に手を加えてそれをフィードバックする可能性があるなら、GitHub 上で fork してからそれを clone ましょう。そうでなくて単に最新の Ruby を追いかけたい!というような場合は、https://github.com/ruby/ruby.git を clone すればよいでしょう。 clone したら trunk ブランチをチェックアウトします。(GitHub 上でデフォルトのブランチを trunk ブランチにしておくと良いと思います。) $ git clone git@github.com:<username>/ruby.git ~/ruby もしくは $ git clone https://github.com/ruby/ruby.git ~/ruby その後、 $ cd ~/ruby $ git checkout trunkとします。 チェックアウトし
openssl コマンドで生成される RSA 秘密鍵ファイルのフォーマットの中身が気になったので調べてみた。 初心者にわかりやすく説明されたサイトが意外と見当たらなかったようなのでまとめておく。 まず、鍵の生成に使ったコマンドはこんな感じ: $ openssl genrsa 2048 > rsaprivate.key2048 というのは鍵の bit 数。 以下の説明では、あまり長い鍵だとわかりにくくなっちゃうので短くして 256 bit の鍵にしてみた。 よい子のみんなはこんな短い鍵は使っちゃダメだよ。 256 bit の秘密鍵ファイルをダンプしてみるとこんな感じ: $ cat rsaprivate.key -----BEGIN RSA PRIVATE KEY----- MIGrAgEAAiEAvnrd8LBnzAGxCW+i7KtVQSiTsssMtbwcs5styeKsn2kCAwEA
1TB の HDD のおさがりをもらったのでさっそく Linux PC に搭載して、前から気になっていた btrfs でフォーマットして使ってみました。 この記事に書く予定のシナリオとしては、 1. ディスク単体で btrfs フォーマットしてマウントして使用開始 2. ディスクを増設して一つのボリューム(?)として使用継続 という程度のもので、スナップショットがどうしたとか透過的圧縮がこうしたとかルートファイルシステムをどうのこうのとかいったような高度な話は一切出て来ません。 それでも例によっていろいろハマったので、後の自分のためにハマりポイントなどをメモ。 環境は Ubuntu 12.04.3 LTS。 最初に btrfs-tools パッケージをインストールした気がします。 (記憶があやふや) それからディスクを btrfs でフォーマット。 $ sudo mkfs.btrfs <d
Android の APK の DEX をゴニョゴニョしてたら、DEX の string 領域に格納されている文字列は実は UTF-8 じゃなくてちょっと modify された MUTF-8 (Modified UTF-8) だということが判明して軽くショックを受けています。 Wikipedia の UTF-8 の項によりますと、標準の UTF-8 から以下の 2 つの変更点があるようです。 null 文字 (U+0000) を 0x00 という 1 バイトにエンコードしないで 0xC0, 0x80 というバイト列にエンコードする(UTF-8 のルールに則って 0xC0, 0x80 をデコードすると U+0000 に戻る。shortest possible representation に違反している) U+10000 〜 U+10FFF のコードポイント -- UTF-16 だとサロゲー
[追記 2015/05/19] 2015年時点では HTML5/JavaScript/CSS でデスクトップ GUI アプリを作るなら、Electron 一択でしょうね。electron.atom.io [追記ここまで] 私はデスクトップアプリケーション開発歴はすでに20年近い老人ですが、数年前から「HTML5 でデスクトップ GUI アプリを開発するのが今後主流になるはず」と言い続けてきました。 最近になってやっと、その説をサポートしてくれてかつ人に紹介しても恥ずかしくなさそうなフレームワークに出会えたので(それも一気に 2 つも)、紹介したいと思います。 ちなみに、私のデスクトップアプリ開発に使ってきたフレームワークの遍歴は、以下のような感じです。(抜けてるのもあるかも) MS-DOS 時代 Turbo Pascal と Turbo Vision によるコンソールでの擬似 GUI Wi
前フリ プログラマのみなさんならキーボードにこだわりを持ってなおかつタイピング速度を0.01秒でも稼ぐために日夜キーバインドを研究されていることと思います。 そんな私は Windows では AutoHotKey、Linux では Xmodmap、Mac では KeyRemap4Mac を愛用しております。 新しい環境や新しいキーボードが手に入ったりするとまずはキーボードの設定から、という方も多いのではないでしょうか。 私は HHK を長年愛用しており、新しいコンピュータを購入したら何はともあれコイツをつないで、キーバインドの設定からはじめます。 PFU Happy Hacking Keyboard Professional2 墨 英語配列 静電容量無接点 USBキーボード Nキーロールオーバー UNIX配列 WINDOWS/MAC両対応 ブラック PD-KB400B 出版社/メーカー:
私の職場では私は表題に掲げた3種のキーボードを使うことができるという幸運に恵まれています。 いずれも英語(US)配列のキーボードです。 せっかくなので、ここ数カ月間使ってみた感想等を書いてみます。 評価基準が偏ってるのであまり参考にならないかもしれませんが。 キーの配列については、以下の配列を標準と見なして、そこからの差分などについて言及します。 HHK PFU Happy Hacking Keyboard Professional2 墨 英語配列 静電容量無接点 USBキーボード Nキーロールオーバー UNIX配列 WINDOWS/MAC両対応 ブラック PD-KB400B 出版社/メーカー: PFU発売日: 2006/03/23メディア: Personal Computers購入: 9人 クリック: 308回この商品を含むブログ (50件) を見る 雑感 前職のときから使っていたので最
第2回めの GotW の翻訳です。 例によって原文著者(Herb Sutter 氏)の許可は得ていませんし、私の英訳がヒドいクオリティである(用語の統一がとれていないとか、誤訳が含まれているとか)かもしれませんのでそこのところはご理解いただければと思います。 原文:http://herbsutter.com/2013/05/13/gotw-2-solution-temporary-objects/ Unnecessary and/or temporary objects are frequent culprits that can throw all your hard work—and your program’s performance—right out the window. How can you spot them and avoid them? 必要がなかったり一時的にしか使
Guake とか Terminator とか iTerm とか Console2 とかでタブを開きまくっていると、あっちのタブで入力したコマンドがこっちのタブにはヒストリとして出てこない!ムキーっってなりますね。特に超絶かっこいいワンライナーを書いた時にそれを再利用するためにどのタブで打ったか探しまわったりしている時には、ハイテクなんだかローテクなんだかよくわからなくて惨めな気持ちになりますね。 だいぶ前に、この問題の解決を試みようとしたときはなぜか全然うまく行かなくて挫折した記憶があるのですが、今日改めてぐぐってみたら一発で解決しました。 $ export PROMPT_COMMAND='history -a; history -r' これだけです。 これを ~/.bashrc の片隅にでも忍ばせておくだけで幸せになれること請け合いです。 以下、ちょっと解説。 まず、bash の組込み変
自分用メモ。 a.zip と b.zip があって、それぞれ x というファイルが含まれているとします。 a.zip の中の x と b.zip の中の x を比較したい場合、以下のようなワンライナーで比較することができます。 $ diff <(unzip -p a.zip x) <(unzip -p b.zip x) もちろん、zip ファイルはファイル名だけじゃなくてディレクトリもあわせてパスとして指定することもできますし、zip の中のファイルも dir/to/x のように書けばzip内のディレクトリを指定できます。 < と ( の間に空白を開けるとエラーになりますので要注意。 また、zip 以外にも他の圧縮方式でもおそらく同じようなことができると思います。 unzip コマンドは ーp で標準出力にファイルを出力してくれます。他の圧縮方式用のコマンドでも同じようなオプションがあると
さて、いきなりマニアックな話題で。 最近は仕事で Tizen というモバイル OS 向けの Native プログラムを C++ で書いてたりします。 コンパイラは -std=c++0x オプションを受け付けてくれたりするので多少は現代的なプログラミングができているのでその点は楽しいです。 しかし、Tizen プラットフォームのコードはちょっと古くさい規約で書かれている(たとえばテンプレートとか例外は使用していないし、イベントハンドラとかの書き方は古き良き Java っぽい)ので、文字列処理とか I/O がからむ処理とかはかなり面倒、非同期処理にいたっては、(ry なわけです。 そんなときにはやっぱり Ruby が懐かしくなるわけですね。 Tizen はかなり Pure な Linux 環境という印象なので、Ruby(CRuby)も動いちゃいそうな気はしますが、TPK(Tizen のパッケー
前フリ プログラマのみなさんなら何かしらの Terminal を日々使い倒していることと思います。 GUI で何かの操作をしているときに、急に何かコマンドとかスクリプトとかワンライナーを実行したくなりますよね。 私は一日に 1024 回くらいなります。 そのたびに毎回 Terminal を起動していたり、後ろに回ってしまった Terminal のウインドウを探しまわったりしていると大変な時間の浪費です。 そこで Guake です。 F12 を押すだけでいつでも確実に Terminal にアクセスできる快感は一度覚えてしまうともうやみつきで離れられなくなります。 そんな Guake ですが、使っているうちにいくつか不満が出てきました。 (やっぱり Mac の iTerm とか Windows の Console2 とかと比べちゃいますね。) たとえば、マウスカーソルで選択しただけで選択範囲の
このページを最初にブックマークしてみませんか?
『bearmini.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く