未分類

...now browsing by category

 

アルゴリズムは使用するプログラミング言語に引きづられる

火曜日, 10月 9th, 2018

某所で5分以内にプログラムを考えるという課題がありました。

最初にプログラミング言語を選択するのですが、最近は swift ばかりなので swift を選択しました。

その後に出たお題は「文字列を逆順にする。ただし、プログラミング言語にある逆順にする命令などは使わないこと」というものです。

そこで私の思考は、以下のようになりました。

  1. 文字列は文字の配列
  2. 配列を処理するならイテレータ
  3. 先頭から文字をとっていき、新しい配列の先頭にインサートしていけばいける

IDEなしだったので、仮想コードですが、以下のような感じに書きました。

let src = "hogemoge"
var dest = ""

for char in src {
    dest.insert(0, char)
}

しかし、帰りの電車で、C言語ならもっと効率良くできることに気づきました。

  1. 最初と最後の文字をスワップ
  2. 最初+1と最後-1の文字をスワップ
  3. 上記の処理を「文字数 / 2」回繰り返す
unsinged char *src = "hogemoge";
unsigned char swap;

for (int i = 0, int last = strlen(src) - 1; i < strlen(src) / 2; i++, last--, ) {
    swap = src[i]
    src[i] = src[last]
    src[last] = swap
}

なぜ、思いつかなかったのだろうと考えたのですが、最初に言語を選択していたため、そこでよく使う手法に囚われていたのです。swift だと文字列を文字単位で扱うことはあまりないため、配列として処理しようと考えてしまったのです。それに対してC言語はビット単位やバイト単位で扱うことが多いので、すんなりと効率が良いアルゴリズムに導かれたのでした。

「オブジェクト指向プログラミング入門 第二版 (ティモシイ・A. バッド)」の「1.2 言語と思考」にも、APLのプログラマが行列のソートで解決した話が載っていましたが、まさにその通りのことを身を以て体験したのでした。

Bose QuietComfort 35 wireless headphones

月曜日, 5月 1st, 2017

以前、通勤中に使っていたBluetooth接続のヘッドホンが壊れたため、新しいのを買いました。

考慮した点

絶対条件として、まずはBluetooth接続であること。以前のもBlutoothだったのですが、コードがないのは本当に便利で、身にしみていました。もうコード付きには戻れません。

次にオーバーイヤータイプであること。純正のようなイヤフォンだと、私の場合、耳からポロポロ落ちてしまうのです。また、前使っていたのはオンイヤータイプだったのですが、時々耳からずれることがありました。そんな中、家で使っている有線のオーバーイヤータイプのヘッドフォンは、外れたりずれたりする事がなく、とても具合が良かったのです。なので、今回は通勤用のヘッドフォンもオーバーイヤータイプにすることにしました。

それとノイズキャンセリング機能です。以前からとても興味があったのですが、購入したことはありませんでした。なので、今回はこれにこだわりました。

競合との比較

そうなるとSONYのMDR-1000Xも気になる所です。こちらも上記の条件を備えていて、値段も同じくらいです。

QuietComfortが良いところは、操作がシンプルであることです。電源のON/OFFはスライドスイッチで、曲のスキップとバックはダブルクリックとトリプルクリックです。対してMDR-1000Xは、電源のON/OFFは長押しで、曲のスキップとバックは専用のボタンです。実は前使っていたヘッドフォンはSONY製なのですが、この点が使いづらかったのです。専用のボタンが多い方が使いやすそうに思えるのですが、確かに目で見て操作する分にはボタンが多い方が使いやすいのですが、目で見ずに手探りで操作する場合はボタンが少ない方が分かり易いのです。特に曲のスキップとバックは、音量ボタンと取りちがえることが時々あり、またスキップとバックどちらが上のボタンだったかもよく忘れていました。

一方でMDR-1000Xの方が優れている点は、ペアリング記憶台数が8台であることです。対してQuietComfortは2台です。音源機器の数が多い場合は大変魅了的なのですが、とりあえずiPhoneとMacにつながればOKだったので、そのあたりは気にしませんでた。

良かった点

何と言ってもノイズキャンセリングがとても優秀です。基本的に通勤電車の中で使っているのですが、在来線が新幹線並みの静かさになります。これを付けていると時間が立つのが早く感じます。やはり静かなのは落ち着くみたいで、通勤がとても楽になりました。音によるストレスって以外に大きかったんですね。

また、静かになった分、音楽も小さな音でも充分に聞こえるので、耳に負担が少ないです。でも車内アナウンスはちゃんと聞こえます。車内アナウンスも音が小さくはなるのですが、走行音ほどは減衰されません。ノイズキャンセリングを周波数によって分けているみたいです。感覚としては新幹線の車内アナウンスくらいの音量です。

いまいちな所

大きくて重い点です。これはオーバーイヤータイプを選んだ時点で覚悟していたのですが、やはり荷物になります。重量はケース込みで400gくらいで、通勤カバンの中ではそれなりの容量と重さです。

あと、静かすぎるので歩きながら使うのは危険です。車が背後から来ても気づかないレベルです。ノイズキャンセリングがOFFにできないのもそれに拍車をかけます。じっと座っていられる環境でしか使ってません。

筑波山に登ってきた

日曜日, 7月 12th, 2015

IMG_2820

2年ぶりくらいに家族で筑波山に登ってきました。

またしても雨上がりだったので地面はぐちゃぐちゃでした。
ズボンの膝下が泥だらけ。

筑波山神社の所から登り始めて、展望台まで。頂上は混むのでパス。
登りは1時間45分、下りは1時間30分くらいでした。

ちなみに装備品は以下の通り。
天気が良ければ使わないものがほとんどですが、山の天気は変わりやすいので、天候の悪化に備えた装備で臨まないとね。

着用品
□登山靴
□ジャージ
□化繊Tシャツ
□厚手化繊靴下
□ハンカチ、ティッシュ
□手袋
□帽子(全つばHat)
□時計

ウエストポーチ
□スマホ
□行動食(スニッカーズ、ドライフルーツ&ナッツ)
□保険証
□財布
□現金
□クレカ
□アーミーナイフ

ザック
□ザックカバー
□レインスーツ
□ヘッドランプ(□充電)
□水筒(□水 1L)
□ハイドレーションホース
□ビニール袋x2
□ジップロックx2
□タオルx2
□救急箱(外傷向け)
□テーピング
□エマージェンシーシート
□ロープ(10m)

なんでヘッドランプが必要なの?という声を聞きますが、色々あって夜になってしまうというのは、割と良くあることなのです。
ののななみゅ

無事です

土曜日, 3月 12th, 2011

無事です。
家族も。
猫が一匹行方不明だけど。