taisablog

taisa's engineer blog

デベロッパー月次LT.011

投稿日:

-

執筆者:

関連記事

プログラミング言語の歴史を見える化してみた

「まつもとゆきひろ 言語のしくみ」と「Talk Python #100」のGuidoの回をたまたま同時期に見聞きしたら言語の歴史を調べたくなった。言語は少なからず他の言語から影響を受けたり、他の言語に影響を与えたりしている。ということでその影響関係をwikipediaの情報を元に見える化してみた。 まつもとゆきひろ 言語のしくみ ぐちゃ〜。。。これだけ見ると複雑に絡み合ってよくわからない。ただ見たい言語をクリックするとその言語がフォーカスされどの言語がどの言語に影響を与えどの言語に影響を受けたかが見やすくなる。 使い方 ソースはこちら GitHub taisa831/Langury Contribute to Langury development by creating an account on GitHub. 多重継承が可能なC++で(ただクラスをつくってるだけ)doxygenとgraphvizを使って出力している。 インストール DoxygenとGraphvizをインストールする。 brew install doxygen brew install graphviz Languryをクローンする。 git clone git@github.com:taisa831/Langury.git cd Langury 出力 doxygenコマンドを実行してHTMLを出力して開く。 doxygen open html/index.html select Classes -> Class Hierarchy 対象言語 ここで取り上げた言語はwikipediaの以下を対象にした。 ※一部記載なし。 ※実際とは異なっていたり足りてない箇所があるご注意ください。 各言語について 1950年代:FORTRAN、LISP、ALGOL、COBOL 1960年代:CPL、BASIC、PL/I、BCPL、Simula、LOGO、B 1970年代:Forth、Pascal、C、Prolog、Smalltalk、ML、AWK、Ada 1980年代:C++、Objective-C、Common Lisp、Eiffel、Erlang、Perl 1990年代:Python、Tcl/Tk、Haskell、Visual Basic、Ruby、Lua、Delphi、Java、JavaScript、PHP、OCaml、SuperCollider、R 2000年代:C#、Scala、D、F#、Go 2010年代:Ceylon、Rust、Dart、Elixir、Hack、Swift 1950年代 FORTRAN 1954年にIBMのジョン・バッカスによって考案された。コンピュータにおいて広く使われたプログラミング史上最初の高水準言語。 LISP 1958年にジョン・マッカーシーによってはじめて設計された。高水準プログラミング言語の中ではFORTRANに次いで2番目に古い。LISPの名前は「list processor」に由来している。 ALGOL 1950年代中ごろに開発され、多くの言語に影響を及ぼした。ACMや教科書や学術論文などでアルゴリズム記述のデファクトスタンダードとして30年以上使われ、ほぼ同世代の高水準言語であるFORTRAN、LISP、COBOLに比べて最も成功した。設計者はバウアー、 ルティシュハウザー、 サメルソン、 バッカス、 パリス、 ナウア、 ファン・ワインハールデン、 マッカーシー他。FORTRANで明らかとなった問題を防ぐよう設計された。「ALGOL」は「アルゴリズム言語」を意味する英語「algorithmic language」に由来する。 COBOL 1959年に事務処理用に開発されたプログラミング言語。名前は「Common Business Oriented Language」(共通事務処理用言語)に由来する。 1960年代 CPL CPLはケンブリッジ大学の数学研究所とロンドン大学コンピュータ部の共同プロジェクトとして1960年代に開発された。C言語の遠い祖先となった言語でクリストファー・ストレイチーが関与している。Combined Programming Language「統合プログラミング言語」の意。 BASIC 1964年に米国ダートマス大学にて数学者ジョン・ケメニーとトーマス・カーツにより教育用などを目的としてダートマスBASICが開発された。初心者向けのプログラミング言語として、1970年代以降のコンピュータ(特にパソコン)で広く使われた。Windowsアプリケーションの主力な開発言語であるVisual Basicの文法に影を残している。 PL/I 1964年に生まれ。教育機関、商用、工業で使用され現在も使われている。「programming language one」(ピーエルワン)に由来する。 BCPL Basic Combined Programming Language、Basic-CPLは、1966年にケンブリッジ大学のマーチン・リチャーズが設計した。B言語の基礎で、B言語から派生したC言語は文法的にBCPLの亜種。 Simula オルヨハン・ダールとクリステン・ニガードによってALGOL60を拡張する形で1960年代に開発が始められたシミュレーション用途のプログラミング言語(登場時期は1967年)。世界最初のオブジェクト指向言語であると言われる。 …

機械学習におけるアルゴリズム

前回のパーセプトロンに引き続きこの勉強会用に仕事ではじめる機械学習を元に機械学習におけるアルゴリズムをまとめる。 AIPy (アイパイ) ハンズオン #3 (2018/07/19 19:30〜) この勉強会について しばらくは機械学習に特化した勉強会になります。仕事で機械学習などを活用したいけど何からはじめればよいか分からないような方向けのハンズオン形式の勉強会です。ハ ンズオン形式といいつつまず初めは力を養う為に 仕事ではじめる機械学習 の輪読会からはじめます。この会はみんなで集まって意見を交換したり協力したりしながら一気 … ※不適切な内容である場合はすぐに取り下げます。 そもそもどのアルゴリズムを選ぶべきか 機械学習にはどんな種類があるか 分類(Classification):正解となる離散的なカテゴリ(クラス)と入力データの組み合わせで学習し、未知のデータからクラスを予測する 回帰:正解となる数値と入力データの組み合わせで学習し、未知のデータから連続値を予測する クラスタリング:データを何かしらの基準でグルーピングする 次元削減:高次元のデータを可視化や計算量削減などのために低次元マッピングする その他 推薦:ユーザーが好みそうなアイテムや、閲覧しているアイテムに類似しているアイテムを提示する 異常検知:不審なアクセスなど、普段とは違う挙動を検知する 頻出パターンマイニング:データ中に高頻度に出現するパターンを抽出する 強化学習:囲碁や将棋のような局所的には正解が不明確な環境で、とるべき行動の方針を学習する アルゴリズムを選定するには以下のフローチャートを参考にするとよい。startからはじめて条件によって分類、回帰、クラスタリング、次元削減のどれを選べばよいかが分かる。 アルゴリズムを選定する、scikit-learnのフローチャート ※その他(推薦、異常検知、頻出パターンマイニング、強化学習)は覗く 参考:scikit-learn algorithm cheat-sheet 分類 教師あり学習の1つ 予測対象はカテゴリなどの離散的な値を予測する メールがスパムかどうかや画像が映っているのがどういった物体かなど クラスの数が2の場合を二値分類、3以上の場合を多値分類という 分類については以下のようなアルゴリズムが存在する パーセプトロン ロジスティック回帰 SVM (サポートベクターマシン) ニューラルネットワーク k-NN (k近傍方、k-Nearest Neighbor Method) 決定木、ランダムフォレスト、GBDT (Gradient Boosted Decision Tree) ナイーブベイズ HMM (Hidden Markov Model) 本記事では太字の分類アルゴリズムと回帰(少し)について触れる ロジスティック回帰 ロジスティック回帰の特徴 出力とは別に、その出力のクラスに所属する確率値が出せる 学習はオンライン学習でもバッチ学習でも可能 予測性能はまずまず、学習速度は早い 過学習を防ぐ為の正則化項が加わっている 特に出力の確率値が出せるという特徴のため、広告のクリック予測にもよく使われている。 実践系の参考記事 新シリーズ第8回「ロジスティック回帰分析でターゲットを確率的に予測する」 ロジスティック回帰 ロジスティック回帰を実装してみよう ロジスティック回帰の決定境界 決定境界は直線 ロジスティック回帰の仕組み 活性化関数はシグモイド関数 損失関数は交差エントロピー誤差関数 シグモイド関数 入力が0の時は0.5をとる 値が小さくなるほど0に近づく 値が大きくなる程に1に近づく シグモイド関数を記述するコード def sigmoid(x): return 1 / (1 + np.exp(-x)) 出力yは y= sigmoid(np.dot(w, x)) と表すことが可能で、2値分類時の交差エントロピー誤差関数は、N個のデータに対してyを出力、tを正解ラベル(正しい場合は1、間違っている場合は0とする)、logを底がeの自然対数とすると、次のような書式で表すことができる。 2値分類の時の交差エントロピー誤差関数をコードで書くと以下のようになる def cross_entropy_error(y, t, eps = 1e-15): y_clipped = …

no image

申告と節税について整理した。税率?青色?白色?扶養控除?など

フリーランスではないけど確定申告する機会があったりと税金のことを考える機会が増えたので大分昔に買った「フリーランスを代表して 申告と節税について教わってきました。」という本を読み返しました。かなり昔の本ですが大きくは変わっていないと思うのでまだ大丈夫かなと思っています。ただ間違いがある可能性もあるのでその点はご注意ください。指摘も大歓迎です。税金については、その時理解した気になってもすぐ忘れてしまうので大事なところだけメモとして残しておきます。 フリーランスを代表して 申告と節税について教わってきました。 Amazonより 最終的な納税額はどのように決まるか 最終的な納税額は次のように決まります。 年の稼ぎ 売上(収入)- 経費 = 所得 税金の対象 所得 – 各種控除 = 課税所得 最終的な税額 課税所得 × 所得税率 = 納付税額 所得税の速算表 課税される所得金額 税率 控除 以下 超 195万円 5% 0 195万円 330万円 10% 97,500円 330万円 695万円 20% 427,500円 695万円 900万円 23% 636,500円 900万円 1800万円 33% 1,536,000円 1800万円 40% 2,796,000円 ここで初めて知ったのが、所得に応じて税率はあがっていきますが、限度額を超えた分だけがその税率で納税する対象になるという仕組みでした。つまりそれが「控除」に該当するもの。少し控除はあるものの課税所得の限度額を超えたら全ての所得がその税率で計算されると思ってました。どういうことか具体例をあげてみます。 課税される所得金額が200万円の場合 5%までの金額を計算 195万円 × 5% = 97,500円 10%になった分の金額を計算 5万円 × 10% = 5,000円 5%までのと10%分の金額を足す 97,500円 + 5,000円 = 102,500円 所得金額が200万円の場合は、195万円を超えた5万円分んだけ税率が10%になり、納税額は102,500円となります。これは単純に以下のように控除額を引く計算方法でやっても同じ結果となります。 単純に計算して後から控除額を引く 200万円 × 10% – 97,500 = 102,500円 じゃあ税率があがった場合はどうなるの?というのが疑問になったので同じように計算してみました。 課税される所得金額が340万円の場合 順番に計算した場合(10%の控除額を引く) 330万円 × 10% + 10万円 * 20% – 97,500円 = 252,500円 単純に計算して後から控除額を引いた場合 340万円 × 20% – 427,500円 = …

Vue.jsで外部APIを使ったTODOリストを作ってみた

APIを使ったTODOリストをVue.jsで作ってみました。TODOリスト用のAPIは以前書いたこちらのAPI「Go言語 GORM+GinでTODOリストのAPIを作ってみた」を利用します。CORSを全て許可しているのでどこからでも叩けるようになっています。 できたもの できたものはこちらです。http://vuejs.taisablog.com/todo APIのエンドポイント APIのエンドポイントは以下としました。 URL http://gin.taisablog.com/api/v1/ GET /todo // 一覧表示 POST /todo // 新規作成 GET /todo/:id // 編集画面表示 PUT /todo/:id // 編集(今回未使用) DELETE /todo/:id // 削除 TODOリストの処理 プロジェクトはvue-cliで作成し、APIはaxiosを利用しました。componentsにTodo.vueファイルを作成しそこにすべての処理を書いています。 インポート import axios from ‘axios’ const NOT_STARTED = 1 // 未対応 const STARTED = 2 // 対応中 const FINISHED = 3 // 完了 data function name: “Todo”, data() { return { todoList: [], inputField: ”, isActive: false, baseUrl: ‘http://gin.taisablog.com/api/v1/’ } }, created function created() { this.getTodo() }, methods : 一覧を取得する async getTodo() { try { let response = await axios.get(this.baseUrl + ‘todo’) this.todoList = response.data } catch (e) { console.log(e) …

スクラムの取り組み紹介

スクラムを初めて約3ヶ月がたったので取り組み内容を簡単にまとめてみました。 参考にした文献 SCRUM BOOT CAMP THE BOOK Amazonより スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス (WEB+DB PRESS plus) Amazonより ジョイ・インク 役職も部署もない全員主役のマネジメント Speakerdeck:スクラムの取り組み 参考書籍 SCRUM BOOT CAMP THE BOOK Amazonより スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス (WEB+DB PRESS plus) Amazonより ジョイ・インク 役職も部署もない全員主役のマネジメント