raino_tech_blog

プログラマによる技術系ブログ

3分でわかるGitの歴史

現在、バージョン管理システムとしてはGitが最も人気です。(なんで定期的に人気度下がってるんでしょう。)

f:id:ns-i:20170405153632p:plain

ということで、このGitの歴史について簡単にまとめてみます。

歴史

gitの開発は、Linuxカーネルの開発者の多くがBitKeeperのシステムに対するアクセスを禁止されたことに端を発している 注1

上記のような流れで、Linuxカーネルの開発者であるリーナス・トーバルズ氏が他のバージョン管理システムを探し始めたそうです。

そして、新しいシステムに移行するまでのつなぎとしてGitの開発を始めたのですが、やがて下記のことに気付くに至ったそうです。

他の良いシステムを見つけるまでのつなぎ、なんかじゃなくて、git自身がその「他の良いシステム」になった 注2

そして、その後もGitの開発は進められていくのですが、リーナス氏は下記の問題に直面しました。

ボクにとってgitは楽しい気分転換だったけれど、それまで15年間Linux開発をやってきていて、たくさんの愛情を注いで育てていかないといけないプロジェクトをもう1つ率いていくことは正直やりたくなかった。 注2

こういった状況下でGitのメンテナに抜擢されたのが、それまでGitの開始時からプロジェクトに参加していた濱野純氏でした。

濱野氏はもともとカーネル開発者とはまったく付き合いのないLinuxユーザーでしたが、バージョン管理システムの基本技術には興味があったそうです注3

そして、たまたま時間があったことも手伝って、本格的にGitの開発プロジェクトに貢献していくことになり、やがてプロジェクトのメンテナになったのだそうです。

感想

Linuxという巨大なプロジェクトだからこそ、新しいバージョン管理システムが必要となって、Gitが生まれたんですね。

まさに必要は発明の母ですね。

そして、日本人の方がGitというとても有名なプロジェクトを率いているという事実は、OSSに対する心理的な距離を縮めてくれますね。

これからもソフトウェアエンジニアとして生きていけばGitにはお世話になっていくのでしょうし、背景を知っておくとより愛着が湧くかもしれないですね。

参考

注1 git - Wikipedia

注2 Amazon CAPTCHA

注3

itpro.nikkeibp.co.jp

Nim言語とは

最近、いつかやろうと思っている面白そうなプログラミング言語が結構たまってるんですよね。

RustとかGoとかNimとか。

その中でも今回はNimについて調べ、まとめてみます。

ちなみに以下の記事で実際の環境構築とHello, world!までやっています。

ns-i.hatenablog.com

要約

  • モダンな機能
  • シンプルな構文
  • 高速に動作

Wikipedia曰く

Nim - Wikipedia

*2017/04/04時点

公式サイト曰く

index - Nim Programming Language

  • 効率的

  • 表現に富む

    • Nimのコンパイラとすべての標準ライブラリはNimで実装されている。

    • ビルトインで高水準の型: strings, sets, sequences, 等

    • モダンな型システムとしての型推論、タプル、バリアント型、ジェネリクス、等

  • 優雅

    • 構文が十分に柔軟なのでマクロはNimの構文を変えない。

    • インデントで複文を構成する。

  • Nimは色々な環境で動作する

*大体こんな感じ?

Nimの環境構築[Ubuntu 16.04 LTS]

Nim自体については以下の記事に書いてあります。

ns-i.hatenablog.com

今回はとりあえずHello, world!を表示するところまでやります。

いずれはVisual Studio Codeと連携したいところです。

環境構築

まず、以下のコマンドをターミナルから実行してNimのコンパイラをインストールします。

$ sudo apt-get install nim

以上です。

どうやらWindowsだとgccのパスとかの設定があるっぽいですがLinux系だと必要なさそうです。

動作

まずソースファイルを作成します。

ソースファイルの拡張子は.nimということで、今回はmain.nimというファイル名で進めていきます。

中身は以下の通りです。

echo "Hello, world!"

ソースファイルが作成できたら、そのフォルダでターミナルを開きます。

ソースファイルがあるフォルダをファイラで開き、何もないところで右クリックして「端末で開く」を選択するとすぐできます。

そして、ターミナルで以下のコマンドを実行するとmain.cがコンパイルされます。

$ nim c main.nim

ソースファイルと同じディレクトリにソースファイルと同名で拡張子がないファイルが生成されたかと思います。

それが実行ファイルです。

以下をターミナルで実行して結果を見てみましょう。

$ ./main

すると、ターミナルにHello, world!と表示されるはずです。

以上でNimの基本的な環境構築は終了です。

後はVisual Studio Codeからビルドやデバッグができるようにしたいですね。

参考

nim-memo.hatenablog.com

React.js vs Vue.js [JavaScript]

みなさん、これを見てください。

f:id:ns-i:20170403084729p:plain

これはGoogle Trendsを使って、”React.js”と”Vue.js”という2つのワードの人気度を調べた結果なんですね。

それにしてもすごい熱い戦いしてますね。

っていうか今はVue.jsのほうが人気なんですね。

ちなみにこの話にはオチがあって、上記のグラフを見た後に更に詳しい情報を知ることができるので、それをみたのですが、なんだか面白い結果になっていました。

f:id:ns-i:20170403084836p:plain

日本だけなんですか…。

気になったので日本だけについても調べてみました。

f:id:ns-i:20170403085330p:plain

勢いがすごいですね。

あと、ついでにアメリカも調べますか。

f:id:ns-i:20170403085359p:plain

結構競ってますね。

ここまでやって気づいたんですけど、これもしかしてまだ4月始まったばかりだから結果の分散が大きいみたいな話なんですかね?

とりあえず、今はVue.jsの人気が半端ないということがわかったので、これからも要チェックですね。

ゆるくスキル修得はじめます [JavaScript]

いやー、みなさん。今や猫も杓子もJavaScriptですよね。

フロントエンドもバックエンドもJavaScriptだ!って感じです。

具体的には Node.js + React.js + Redux + webpack みたいな感じが今の流行りなんですかね?

もちろん、Railsも実際に現場で使われているのでしょうが、勢いがあるかといわれると疑問です。

詳しいNode.jsの良さは以下のページにあることが結構的を射ているんじゃないですかね。

Why would a ruby on rails developer switch over to node.js based web development? - Quora

ということで、これから色々な方法でJavaScriptを使ったWebサービス開発能力を身に着けていきます。

ただ、現在はJavaScript関連のフレームワークやツールが乱立していて、流行り廃りのサイクルが早いらしいのであまり悠長に構えているとスキル取得した瞬間に時代遅れなんてことにもなりかねないですね(それなんて前弩級戦艦?)。

とりあえずは以下のサイトを使って学習しようかと思っています。

qiita.com

三日坊主にならないようにモチベーションを維持するのが一番大変ですが、やれるだけやってみます。

chmodってわかりにくいですよね

今回はLinuxで使われるchmodというコマンドについて基本的な使い方を簡単にまとめてみます。

chmodとは?

chmodコマンドとは、ファイルやディレクトリのアクセス権限を変更するコマンドです。

そしてchmodコマンドを使う前に、まず対象のファイル・ディレクトリの権限を確認しなくてはいけません。

この時に使うのがlsコマンドです。

全体の流れ

流れとしては、

1. 対象の権限確認。

$ ls -l  
drwxr-xr-x 2 nsi nsi 4096  4月  1 18:50 デスクトップ

2. 対象の権限変更

$ chmod g+x デスクトップ

といった感じです。

lsコマンドの出力結果の意味

lsコマンドを実行した出力結果は以下のような構造をしています。


drwxr-xr-x 2 nsi nsi 4096 4月 1 18:50 デスクトップ

パーミッション


drwxr-xr-x 2 nsi nsi 4096 4月 1 18:50 デスクトップ

ファイルの所有者


drwxr-xr-x 2 nsi nsi 4096 4月 1 18:50 デスクトップ

ファイルの所有グループ


drwxr-xr-x 2 nsi nsi 4096 4月 1 18:50 デスクトップ

ファイルサイズ


drwxr-xr-x 2 nsi nsi 4096 4月 1 18:50 デスクトップ

最終更新日時


drwxr-xr-x 2 nsi nsi 4096 4月 1 18:50 デスクトップ

ファイル名


lsコマンドの出力結果のパーミッションって何?

drwxr-xr-x

上記のパーミッションの出力結果の文字の位置にはそれぞれ以下のような意味が割り振られています。


drwxr-xr-x

ディレクトリならd


drwxr-xr-x

所有者


drwxr-xr-x

所有グループ


drwxr-xr-x

その他のユーザ


最後の三つについてはそれぞれ3文字の領域があり、これはrwxが入る余地があるようです。

そして、それぞれは以下の表の意味を持っています。

それぞれの権限があればその文字が表示されますが、ない場合はハイフン(-)が表示されます。

表記 意味
r 読み取り
w 書き込み
x 実行

chmodコマンドのオプションの意味

chmodコマンドオプションは以下のような構造をしています。


$ chmod g+x デスクトップ 

コマンド名


$ chmod g+x デスクトップ 

モード


$ chmod g+x デスクトップ 

ファイル名


chmodコマンドのモードって何?

表記 意味
u 所有者
g グループ
o その他
a すべて
表記 意味
+ 権限付与
- 権限削除
= 権限指定
表記 意味
r 読み取り
w 書き込み
x 実行

参考にしたサイト

qiita.com

chmod - Wikipedia

Linuxコマンド集 - 【 chmod 】 ファイルやディレクトリのアクセス権を変更する:ITpro

DOMとCSSOM

今日もネットでWeb開発系の知識を漁っていたのですが、こんな良さげなページを見つけました。

developers.google.com

かなり重要そうな情報です。

つまりブラウザがどうやってHTML及びCSSからページを作っているの?っていうところを解説してくれているようですね。

僕はDOMのあたりはふわっと知ってたんですけど、CSSOMは知らなかったのですごく得心しましたね。

というかこのあたりはコンパイラのレキシカルアナライザに似たものを感じます。

コンパイラとブラウザの要素技術には共通項があるのかもしれませんね。

あと余談なんですけど、このページ元は英語で書かれていてそれが翻訳されたものなんですね。

やっぱり英語できると情報源が何倍にも増えそうですね。

しかし言語機能というのは日常的に使わないと身につかないですし、どこかに陽気なアメリカ人の友達候補でもいないですかね。