投稿

JavascriptでFibonacci数列実装してみた。

再帰関数の練習

基礎からのPython

最も基本的なプログラムで脳トレとpythonの基礎を復習してみる。 今日のお題は以下の2つ。 1. 任意の入力を受けて、その数値以下の素数をすべてダンプしてみよう 今回は、シンプルに「素数とはなにか」に忠実に実装するだけです。 「素数とは、 1 と自分自身以外に正の約数を持たない自然数で、1 でない数のことである。」 プログラムしやすい形に言い換えると、2以上からその数より小さい自然数で割り切れない場合は素数であるって感じかな。 def isPrime ( n ):      for i in range ( 2 , n - 1 ):          if ( n % i == 0 ):              return False      return True 2. 任意の入力を受けて、その項数分フィボナッチ数列をダンプしてみよう 数式で書くとこんなかんじか。  f(n) = f(n-2) + f(n-1)    ( ただし、 f(1)=f(2)=1, n<=3 ) この式をそのまま書いちゃえばいいんです。 def fibonacci ( n ):      # f(n) = f(n-2) + f(n-1), 3<=n, f(1) = 1, f(2) = 1      if n <= 2 :          return 1           return fibonacci ( n - 2 ) + fibonacci ( n - 1 ) 以上!寝...

リーダブルコードを読んだら恥ずかしくなってきた話

リーダブルコード読んでみました。 元Googleの方が書いた本ということもありいろいろとお勉強になることが多いと思いまして。 結論から言うと、「めっちゃ勉強になって、自分の書いてきたコードが恥ずかしくて人に見せられなくなった」 という感じですかね。 プログラマとしてキレる人の目線を少し感じられました。 わかりやすい話で、ベテランエンジニアからすると当然って思うことばかりかもしれませんが、 少なくとも会社に入りたての新人や、駆け出しプログラマは読むといいんじゃないでしょうか。 読んで自分に参考になった点を箇条書きでまとめます。 名前に情報を詰め込む * 明確な単語を選ぶ   send ⇒ deliver, dispatch, announce, etc...   find ⇒ search, extract, locate   start ⇒ launch, create, begin, open * 汎用的な名前は避ける   tmp, retvalみたいなものは避け、 エンティティの値や目的を表現した名前を選 ぶ   スコープが小さければ例外的に使ってもOK    単語補完機能があるから、 長い名前を入力するのは問題じゃない * 値の属性を追加する   単位: **_ms, **_mb, **_kbps, etc   その他: **_utf8, **_urlenc * 名前のフォーマットで情報を伝える   クラス名はCamelCase   変数名はlower_separated   定数はkConstantName   クラスのメンバ変数は member_ コメントすべきことを知る   自分の考えを記録する   既知の不具合や試行錯誤の結果、挙動に関する評価をコメントする   コードの欠陥にコメントを付ける   プログラマがよく使う記法   記法  典型的な意味   - TODO   :  あとで手を付ける   - FIXME ...

nasneとiPad miniで快適なテレビライフが保証される件について

イメージ
世間一般の人は、テレビを見るためにアクオス、ビエラ、ブラビア、その他のいわゆる「テレビ」と呼ばれるものを使っていることでしょう。 家電量販店ではスマートテレビがすごいぞー!多機能だぞー!って宣伝されてるので、 勢いで買った人も多いんじゃないですか? 勢いで買えちゃうようなお金持ちの方は、 これ以降の話を読んでも面白く無いしためにならないと思うので、 貴重な時間をムダにしないためにも他のページに行って下さい、さようなら。 お金持ちで、広い家に住んでいるわけではない、 一人暮らしの男で、ものぐさだしスペースを取る機材はできるだけ置きたくない、 スマートに、複数の機能を兼ねた電化製品で、なんでもコンパクトにしちゃいたい、 そんな同士のために参考になるお話をしたいと思います!! 世間で言ういわゆるあのテレビ。 デカイですねー、4K?画質がすごいんですか、そうですか。 人間の目の解像度とどっちがすごいんですかねぇ(某) とりあえず、ネットとテレビが同時に出来る 「テレビ」 っていうのが不要なんです。 私の考えでは、ネットとテレビが同時にできる 「パソコン」 が欲しいんです。 今の時代、主役は確実にネットなんです。 テレビを快適に動作させるために設計されたテレビよりも、 ネットを快適に動作させるために設計されたものでテレビを見たいんです。 結論から言います。 タイトルにあるように、nasneとiPad mini を買いましょう。 nasneはソニーさんが出してるもので、 TVチューナーになる大容量ハードディスクです。 iPadは説明要らずの幸せデバイスです。 2章に分けてnasneの素晴らしさを説きます。 【 1. TVチューナー機能 】 まぁざっくり言ってテレビとほぼ同等の機能が発揮できます。 テレビ要らね、ってなります。 # ちなみに dボタンだなんだっていうクソみたいな細かい機能は使えません。 ================== しばし脱線 ================== ぶっちゃけdボタンで投票(?)的な機能は、使い勝手が悪すぎて、 将来的に淘汰されると思ってます。 # 既にオワコン? ユースケースとして、テレビってリビングに置かれてみんなでテレビ見るわけじゃな...

持つべきものはデータ構造とアルゴリズム力

適切なデータ構造とアルゴリズムを選択し簡素な実装ができる力の重要性を、 実務を通して理解することができた。 私は普段デバイスドライバを書く仕事をしている。 デバドラのレイヤでは複雑な事はせずに、軽く、賢くバイナリ列をパースしたり、 アプリが使いやすいAPIを提供する責務がある。 デバドラを書くことにおいて「いい仕事」とは、 1. 処理が軽いこと 2. 使いやすいAPIが最小限に揃っていること 3. 適切な抽象化がなされ、拡張性に富んでいること に集約されると考えている。 1. 処理が軽いこと 当然のことであるが、冗長な処理や、不要な条件分岐等はやめる。 例えば、USBやBluetooth, WiFiなどの通信関連のデバドラでは、 えてしてパース処理が発生する。 TCP/IPに関連するデバイスではヘッダのどこぞのビットがIPアドレスでー、 これが宛先MACアドレスでー、。。。うんぬんかんぬんな処理がどこかに入るはず。 基本的なことではあるが、とにかく不要な処理はスキップしよう。 いちいちループを書いて探索処理をすることは、 場合にも依るがデバドラ実装においては負けだと思おう。 データ構造を工夫することで繰り返し処理を減らす。 ときに組込系のシステムでは使用可能なメモリ容量が限られているケースが見られるが、 無条件にループを描いて降伏するのではなく抗おう。 今まで割り当てていた使用していないビットに意味を持たせて、 どうにかしてフラグ管理するなどしてメモリの節約を考えよう。 if(  A && B && ...) と書くときは重い処理を右に持って行こう。 短絡評価を有効活用するわけです。 とにかく重い処理からは逃げることを考えよう。 データ構造の設計はひとたび間違えると糞コードのオンパレードになる。 データ構造とアルゴリズムはほぼ同義といっていいくらい関連性が深い。 ここで最適な戦略を取れるかどうかは、 日頃の学習と、業務における経験で培うところだろう。 糞コードをたくさん産んでは捨てることでスキルをのばそう。 タイトルに記載したとおり、私は本当にアルゴリズムとデータ構造の選定スキルの重要性を感じている。 デバドラ開発において、アルゴリズム力...

Yahooのeコマース革命が本気な件

イメージ
NET & SMARTPHONE COMMERCEに参加してきました。 eコマース革命 @ Yahoo執行役員 小澤隆生さんのお話が印象に残ったので投稿。 内容としては、Yahooはeコマースにマジで、本気で取り組みますっていう熱い内容でした。 勢いだけでなくしっかりと背景も説明して頂いていて納得感のある講演で、 Yahooで出店したくなりました。 以下、講演内容のメモ。 * Yahooはショッピングに本気じゃなかった 検索に関する知見は溜まっていたが,ショッピングについては力を入れてこなかった. 日本のeコマース市場は小売り市場全体の6%にすぎない(2011年度eコマース市場規模 8.8兆円)ため、今後ユーザーが増えて成長する余地がある。 プラットフォーマーとしてやるべきことは市場の拡大スピードを向上させること. 市場のシェアを競合から奪うことではなく,eコマース市場を拡大させたい. その結果、eコマース革命と称して数々の施策を打つこととなった。 以前、インターネットユーザーを増やすため、モデムを配ったことがある。 無理やりにでもインターネットユーザーを増やし、 インターネット上でビジネスを展開する会社が儲けられる環境を作りたかった。 儲かればプレイヤーが増えて市場が広がる。 それが競争を産み、広告を打ってもらえていた. プラットフォーマーとして、市場拡大の施策を以前も打ち、成功してきた。 * 攻めの経営 これまでは検索連動広告だけで十分儲かってきたが、今はビジネス環境が変わってきた。 - 精度の良い検索連動広告 PCクエリシェア国内最強の地位を活かして、検索とショッピングを連動させる。 具体的には、ユーザーが検索したワードに連動した広告枠が検索結果画面に出てくる仕組み。 日本人はランキングが好きな人種で、間違った商品を買いたくないなーという心理から、どんなものが売れているかといったランキングを気にしている. 国内最強の検索クエリシェアのビッグデータを利用した検索連動広告は、 出店者にとって非常に有益なものになると自負している。 - ランディングページ 今でもYahooのトップページをスタートページに利用してもらっているユーザーは多い。 年末は、トップページからヤフーショッ...

"SDNは世界を救う? @ SDN Conference 2014" が物凄くわかりやすかった件

イメージ
  SDN Conference 2014 @ グランフロント大阪 に行ってきました。 SDNが何かを漠然と知ってるつもりで参加してきました。 参考になった講演があったので詳細をまとめます。 ================================================================= SDNは世界を救う? 講演者 東京大学 情報基盤センター 准教授 関谷 勇司 概要 Software Defined Networking (SDN) は従来のネットワーク構築手法や運用手法を変化させる技術革新として、近年注目されている。様々な機器ベンダーがSDN に対応した製品やソフトウェアを出荷し、クラウドの構築や管理を主眼とした SDN 製品も登場し始めている。本講演では、近年盛り上がりを見せているSDN の本質とは何なのか、その適用範囲と適用手法、ならびに欠点や注意事項も含め現状の SDN の全てをわかりやすく概説する。SDN を導入すべきなのか、どの部分にいつ導入すべきなのか、研究者としての中立な立場から、最新の技術動向をふまえ、SDN の未来を語る。 ================================================================= SDNの定義 SDN = ソフトウェアによって柔軟に定義されるネットワークとその周辺技術 SDNはある枠組みに従って作られた技術の総括であって技術ではない. 一方でOpen Flowは特定の技術のことを指します. 従来のネットワークとOpenFlowの差異 - 従来のネットワーク IPネットワークは自律分散型で,それぞれのスイッチやルーターが協調して動作している IPアドレスが識別子.通信の宛先でありすべてを示している ルータースイッチといった機会はIPアドレスというインターネット上の番地を参考してバケツリレーしていく - OpenFlow あるデータを転送するにあたってどういう道筋で送るかを考える部分(コントローラ)と, 指示に従ってデータを渡していく部分を分離したモデル(スイッチ) コントローラがすべてを決めていく. IPアドレス以外の要素も見ながら道...