Scala タプル

Scalaのタプルの個々の要素には, _\d+でアクセスできます.

val pair = (99, "Hello World")
println(pair._1)  // -> 99
println(pair._2)  // -> "Hello World"

注意が必要なのは, 数値が1から始まるということです. 配列やリストのようにインデックスが0から…ではないのでご注意を

Geolocation API

Geolocation APIの使い方を備忘録的に…

if (navigator.geolocation) {
    /**
      * getCurrentPositionの第1引数
      * @param {Geoposition} position
      */
    var successCallback =function(position){
         console.log(position.coords.latitude);          // 緯度
         console.log(position.coords.longitude);         // 経度
         console.log(position.coords.altitude);          // 高度
         console.log(position.coords.accuracy);          // 緯度・経度の精度
         console.log(position.coords.altitudeAccuracy);  // 高度の精度
         console.log(position.coords.heading);           // 方角 (0 ~ 360)
         console.log(position.coords.speed);             // 速度
    };

    /**
      * getCurrentPositionの第2引数 (省略可能)
      * @param {PositionError} code
      */
    var errorCallback = function(error) {
         switch (error.code) {
              case 0 :
                   console.error('原因不明のエラー');
                   break;
              case 1 :
                   console.error('ユーザーが位置情報の使用を許可しなかった');
                   break;
              case 2 :
                   console.error('電波状況が悪いなどの理由で, 現在位置を取得できなかった');
                   break;
              case 3 :
                   console.error('タイムアウト');
                   break;
              default :
                   break;
         }
    };

    // getCurrentPositionの第3引数 (省略可能)
    var options = {
        enableHighAccuracy : true,  // より精度の高い情報を取得するかどうか
        timeout : 10000,            // タイムアウト値 (ミリ秒)
        maximumAge : 60000          //  キャッシュ期間 (ミリ秒)
    };

    navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options);
} else {
    // Geolocation APIが利用できない場合
}

ActionScript 3.0 包含イベント

久々のActionScript 3.0ネタ…

ActionScript 3.0には, DisplayObjectが追加されたり, 削除されたりしたときに発生するイベントがあります.

Event Description Bubbling
Event.ADDED DisplayObjectが (子孫として) 追加されたときに発生
Event.REMOVED (子孫の) DisplayObjectが削除されたときに発生
Event.ADDED_TO_STAGE DisplayObjectがstageに追加されたときに発生 ×
Event.REMOVED_FROM_STAGE DisplayObjectがstageから削除されたときに発生 ×

Androidビュー 透過色で塗りつぶす

Androidのビューを透過色で塗りつぶす, 具体的にはお絵描きアプリの消しゴム機能を実装する場合です.

お絵描きアプリの消しゴム機能の実装方法としては, 以下の2つの方法が考えられます.

  • 背景色と同色を利用する
  • PorterDuffXfermodeクラスを利用する

背景色と同色で塗りつぶす実装は簡単ですが, 描いた絵を別のアプリで利用する場合などで問題が生じます.

PorterDuffXfermodeクラスを利用すれば, 透過色で塗りつぶすことができるので, どのアプリで画像を見ても, 消しゴムで消された部分は透過されて表示されます. 実装も以下のようにシンプルです.

import android.graphics.PorterDuffXfermode;
import android.graphics.PorterDuff;

// ....

Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
paint.setARGB(0, 0, 0, 0);

GitHub SSH公開鍵の登録

1. 秘密鍵・公開鍵のペアを作成

$ ssh-keygen
  • 鍵を保存するディレクトリ (Mac だと, /Users/ユーザー名/.ssh/id_rsa)
  • パスフレーズ (+ パスフレーズ確認)

以上の入力をします.

2. GitHubに公開鍵を登録する

作成した公開鍵 (id_rsa.pub) の内容をGitHubに登録します.

まずは, 公開鍵の内容をコピペするために, クリップボードにコピーします. (~/.ssh/id_rsa.pubの部分は鍵を作成したときのディレクトリに読み替えてください)

$ pbcopy < ~/.ssh/id_rsa.pub

GitHubに公開鍵を登録します. GitHubのProfileページからSSH keysのメニューを選択します.

GitHub Profile
GitHub Profile

Add SSH keyボタンをクリックします.

GitHub Profile SSH keys
GitHub Profile SSH keys

Titleには公開鍵のための任意の名称を入力します (MacBook Airなど). Keyのテキストエリアに先ほどクリップボードにコピーした公開鍵の内容をペーストします. 最後に, Add keyボタンをクリックすれば完了です.

GitHub Profile SSH keys Add key
GitHub Profile SSH keys Add key

3. SSH接続

$ ssh -T git@github.com

秘密鍵・公開鍵を作成したときに設定したパスフレーズを入力すれば接続できて, 以下のようなメッセージが表示されます.

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

Webページが表示されるまで

Webページが表示される仕組み

Webページが表示されるまで

URL (URI) に含まれる情報

プロトコル クライアント・サーバー間での通信方法を決定する http, ftp, ws
ドメイン 通信先となるサーバーのマシンを特定する.
DNSサーバーからドメインをもとに, サーバーマシンのIPアドレスを特定する
www.google.co.jp
ポート番号 通信先のアプリケーションを指定する.
httpの場合は, 通常80番が利用されるので省略される
80 (http), 443 (https)
パス サーバーマシン上のリソースの場所を指定する. PCのフォルダ構造のようなもの index.html

サーバーサイド処理

サーバーサイドプログラム (PHP, Python, Rubyなど) により動的にHTMLを生成したり, データーベース (MySQLなど) から必要なデータを取得したり, 保存したりする

HTTPメッセージの詳細

HTTPリクエストメッセージ

リクエストメソッド GET (リソースの取得), POST (認証や掲示板への書き込みなど)
リクエストヘッダ 付加的な情報
リクエストボディ POSTの場合に, 例えば掲示板への書き込み内容などが入る

HTTPレスポンスメッセージ

ステータスコード 200 (リソースの取得成功), 404 (リソースの不在) など
レスポンスヘッダ 付加的な情報
レスポンスボディ HTMLやCSS, JavaScriptのコードそのものが入る

コンピューターサイエンス
– ハードウェアとソフトウェアの基礎知識 –

コンピューターサイエンスの基礎知識

ハードウェアの基礎知識

コンピューターの5大装置
コンピューターの5大装置
  1. コンピューターの電源が入ると, (BIOSが実行されて) OSが補助記憶装置からメモリへロードされる
  2. ユーザーからの入力は一度メモリに格納される.
  3. ユーザーからの要求に応じて必要なアプリケーションを補助記憶装置からメモリへロードする. そして, CPUが必要な演算・デバイスの制御を実行する
  4. 処理結果を出力する. また, 永続的に保存が必要なプログラムは補助記憶装置に格納される

ソフトウェアの基礎知識

ソフトウェアの実体はプログラミング言語 (C, C++, Java…etc )によって記述された文章 (プログラム).

そして, プログラムはデータと命令で構成される.

ソフトウェアの分類
システムソフトウェア オペレーティングシステム
(OS : 基本ソフトウェア)
Windows, Mac OS X, iOS, Android…etc
ミドルウェア データーベースソフト (Oracle, MySQL) …etc
アプリケーション (応用ソフトウェア) ブラウザ, Word, Excel…etc