Apache CordovaでSwiftを使う - Cordova.swift始めました -

突然ですがCordova.swift始めました.

f:id:masahirosuzuka:20141006222334p:plain

Apache CordovaでSwiftを活用しようというプロジェクトです.

Cordovaとは?

Cordovaとはwebの技術(HTML, CSS, JavaScript)でアプリを作ることができるフレームワークです. この解説が一番わかりやすいかな

第1回 PhoneGap/Cordovaとは:もっと使おうPhoneGap/Cordova 2.0.0|gihyo.jp … 技術評論社

現在Cordovaはほぼ全てObjective-Cで記述されています. 一部でSwift製のプラグインが作られ始めたようではありますが…

Swiftとは?

WWDC2014で発表された新しい言語 次世代のiOSアプリの標準になるであろうと思われる言語

今後の方針

Cordovaは主に2つのパーツで構成されています.

  • アプリそのものとなる部分 <- Swiftで書き換え済み
  • CordovaLibと呼ばれるコア部分 <- 書き換え作業中 <- いまここ

目的とゴール

  • Swiftベースのプロジェクトテンプレートを提供する
  • Swiftに書き換える
  • CordovaにおけるSwift活用の道を探る

公式ページはGithubでいきます

masahirosuzuka/cordova.swift · GitHub

Google Polymerで独自タグを使ってみた

近く各ブラウザで実装される予定のWeb Components. これはHTMLで楽にユーザインターフェイスを記述できる仕組み.

HTMLのタグをコンポーネント化することで再利用性,メンテナンス性,開発効率を高める.

例えばヘッダーを作るとき今までだと

<div id="header">
  <ul>
    <li><a href="#"></a></li>
    ....

みたいに書いていたと思うんだけどWeb Componetsを使うと

<my-header></my-header>

みたいな感じで簡単にかける. ただし,このmy-headerは自分で作る必要がある.でも一度作ってしまえば簡単に再利用可能.

さて,このWeb Componentsを構成する要素は主にこんな感じ.

Custom Components

独自タグを定義することができる. 独自タグの名前は通常のタグと区別するため-で区切る.例)my-element

Imports

独自タグはそれぞれhtmlファイルで定義する. 使用するためにはimportする必要がある.

<link rel=“import” href=”” />

Templates

独自タグで使うcssやjsを読み込む.実質的にこれが独自タグの本体.

Shadow DOM

独自タグの内部の複雑な(独自タグの使用者が見る必要が必ずしもない)DOMを隠蔽する.

実際の使い方.

インストール

$bower install —save Polymer/polymer
$bower install —save Polymer/core-elements
$bower install —save Polymer/paper-elements

独自タグを使う

(1)独自タグを作る

<link rel="import" href="bower_components/polymer/polymer.html">
<polymer-element name="my-element">
  <template>
    <span>ShadowDOM</span>
  </template>
  <script>
    Polymer({});
  </script>
</polymer-element>

polymer.htmlは独自タグ作成に必要な様々な機能を提供する. templateタグ内部でDOMを定義する.基本的にこれが独自タグの本体となる. あとPolymer({});は必須なので注意.

(2)index.html

<!DOCTYPE html>
<html>
<head>
  <title>my-element</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
  <script src="bower_components/platform/platform.js"></script>
  <link rel="import" href="my-element.html">
</head>
<body>
  <my-element></my-element>
</body>
</html>

platform.jsは独自タグをサポートしていないブラウザでも独自タグを動作させるためのJavaScript

(3)ブラウザでアクセス 現在のところブラウザは独自タグをサポートしていない.そのためJavaScriptの助けが必要になってくるんだけどそれにはWebサーバが必要. 公式で推奨されているのは

python -m SimpleHTTPServer

アルゴリズムチャレンジ via Python - Array reverse編 -

配列を逆順にするコード

array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for i in range(0, len(array) / 2):
  array[i], array[len(array) - i - 1] = array[len(array) - i - 1], array[i]

print(array)

配列の入れ替えの場合,配列の頭と末尾を処理するので処理の回数は配列の長さの1/2となる. Python

foo, bar = 1, 2

みたいな書き方が許可されているので入れ替えの文は簡単に書けるんだけど他の言語の場合swap関数を書いた方がいいかな?

Dockerを試してみた(1) - インストール編 -

Dockerとは? Dockerとはコンテナ型仮想化システム

特徴

  • ハイパーバイザを挟まない,超軽量
  • Immutable Infrastructure(状態を変えられない)  なにか変更があるたびに新しいコンテナを立ち上げ,不要になった古いコンテナは破棄する.
  • Linuxの機能を使っているため他のOSでは仮想マシンなどが必要.
  • Dockerfileというもので管理.
  • Dockerで実行されるのは一つのプロセスだけ.  1コンテナ1プロセスなのは超大規模システムだけ,そこまで大規模でないシステムは普通のwebサーバと同様の構成にしたほうがいい.

とにかく軽いので実験などでも重宝しそう.

試してみる. 試した環境はOSX 10.9.3.Vagrantは構築済み.

(1)boot2dockerのインストール MacWindowsの場合boot2dockerをVagrantで動かすのが公式なやりかたみたい . https://docs.docker.com/installation/mac/

からboot2dockerをダウンロード,あとは普通にインストール.

(2)Dockerの起動 Applicationsフォルダから起動

もしくは

$docker init
$docker start

終了時は

$docker stop

(3)とりあえず走らせてみる

$boot2docker ssh
$docker run ubuntu echo hello world

これはubuntuイメージ上で”hello world”をechoしなさいという命令. ubuntuのイメージがダウンロードされ,hello worldが表示される.

次回はLAMP環境を構築編かな?

Swift日本語化プロジェクトがストップしているのを見てAppleに嘆願メールを送った話

Swift資料日本語化プロジェクトがストップしているのを見ていてもたってもいられなくてApple Developer Networkに嘆願メールを送ってしまった.

このプロジェクトは非常に有益なのでどうか彼らに翻訳許可を与えて欲しいみたいなメール.

メールの全文はこちら.ひどい英語だなw.

Would you permit translation Swift_Programming_Language

Hello,

My name is Masahiro Suzuka. I am big fan of iOS and Swift.

Now I learning Swift. It is very exciting.

So, I found a project https://github.com/swift-jp/swift-guide that translating this document.

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html#//apple_ref/doc/uid/TP40014097-CH3-XID_0

The project is currently stopping. Because they found “Terms of Use”
>Except as expressly provided in these Terms of Use, no part of the Site and no Content may >be copied, reproduced, >republished, uploaded, posted, publicly displayed, encoded, >translated, transmitted or distributed in any way (including >“mirroring”) to any other >computer, server, Web site or other medium for publication or distribution or for any >commercial >enterprise, without Apple’s express prior written consent.

I think this project is very very useful for us. Would you permit them translate? 

正直Swiftのガイドの日本語版はだれもが望んでいるものだと思う.このままストップしてしまうのはあまりにも惜しい.翻訳の完成度もかなり高いし.

Appleから返事が来たら報告します.

KiCadで自作タブレットPCの設計にチャレンジして感じた4つのこと

タイトルの通りです. KiCadを使って自作タブレットPCの設計にチャレンジしています.

https://github.com/masahirosuzuka/GameChanger

設計はほぼ完了したので感じたこと,思ったことを共有したいと思います.

今年のGugenはいただきかな(笑)

(1)KiCadはオープンソースEDAのなかではダントツ

KiCadの完成度はOSS EDAの中ではダントツです.EDAは人によって解釈もあるでしょうが回路図CAD,基板CAD.その他の機能を統合したものと考えていいです.

回路図CAD単体としてはKiCadよりも完成度の高いものもあるのですが完成度の高い回路図CADと基板CADを両方備えているものはちょっと見当たらない.現状では他に選択肢はないと考えていいでしょう.Eagleも素晴らしいですがあれはOSSではないので.

(2)超高速回路の設計も視野にいれて設計されている

「実験的な機能」とされていますがマイクロウェーブアプリケーション(超高速回路)ツールバーが既に実装されています.

ここでいう超高速回路はクロックがGHzを超えるものです.今回採用したDDR3SDRAMデータレート800MHzなので準超高速回路くらいですかね?

等長配線関連の機能が現時点ではないですがそれは今後に期待.

(3)電源まわりが貧弱

ここからややネガティブなはなしになっていきます.
最近のチップはかなりの数の電源を要求します.これは今回の基板の電源一覧です.

SYS_5V = 5V, 3V3A = 3.3V, 3V3B = 3.3V, VDD_APP = 1.8V, VDD_DDR = 1.35V, VDD_MPU = 1.1V, *VDD_CORE = 1.1V,

KiCadは電源コンポーネント機能を備えています.しかしこの電源コンポーネントを基板CADから回路図CADに持ってくると全てボルト数で表されてしまうのです.

VDD_MPUとVDD_COREは同じ1.1Vですが同じになったのは偶然で全くの別電源です.しかしKiCadではVDD_MPUとVDD_COREの区別がつかなくなってしまう.これはかなり悩まされました.

(4)諸機能が実質的に別アプリなのが違和感

これは1に挙げたものと絡んできます.KiCadを起動してみるとまずプロジェクト管理ツールが起動します.

これはIDEでいうプロジェクトエクスプローラにあたるものでここから回路図CADや基板CADを起動します.と…ここで違和感.これ実質別アプリじゃん.別アプリだからこそ堅牢製が高いなどがあるでしょうが正直いまでも違和感があります.内部の実装はこのままで見た目だけOrCADやAltiumみたいにできないものでしょうか?

アルゴリズムチャレンジ via Python - バブルソート編 -

最も原始的なソート

内側のfor文
 j番の数字と次の数字を比較し,j番の数字の方が大きければ入れ替える.これが泡が昇る様子に見える.

外側のfor文
 全ての数字を比較する.

#!/bin/env python
list = [8,7,6,5,4,3,2]
print list

for i in xrange(0, len(list)):
  for j in xrange(0, len(list) - 1):
    if list[j] > list [j + 1]:
      list[j], list[j + 1] = list[j + 1], list[j]
    print list

print list