サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
blog.ymyzk.com
iOS 9 や watchOS 2 から新しく Bitcode が導入されました. パッケージ管理ツールの Carthage でも Bitcode を含んだ Framework を適切に出力する仕組みの導入が進んでおり, この対応状況を見ながら Bitcode 対応について考えます. Carthage とは Carthage は Cocoa アプリケーションのためのパッケージ管理ツールの1つです. Carthage は Cartfile をもとに GitHub などからソースコードをダウンロードし, Framework を出力します. ユーザーは出力された Framework を動的にリンクして利用します. このため iOS で利用する場合は Embedded Framework に対応した iOS 8 以上でしか利用できません. Carthage についての詳細は GitHub の RE
先日開催された PyCon JP 2015 に参加してきました. 1日目の Lightning Talk で「Django から各種チャットツールに通知するライブラリを作った話」というタイトルで発表しました. Lightning Talk 発表について PyCon には PyCon APAC 2013 から毎年参加しており, 今年は3年目でした. ちょうど django-channels というライブラリを開発したところだったので, 初めて Lightning Talk に応募したところ採用していただき, PyCon での初めての発表を行わせていただきました. 発表資料は SlideShare で公開しています. 発表の感想等は Togetter を見ていただくのが良さそうです. Twitter の感想を見ていると概ね好評だったようで, 発表してよかったと感じています. GitHub で
OS X El Capitan では System Integrity Protection (SIP) (rootless とも呼ばれる) という機能が導入され, /usr や /System といった重要なディレクトリへの書き込みを制限します. 通常 /usr/local にインストールされる Homebrew もこの影響を受けるため, これを回避する方法を紹介します. 2016/9 追記: macOS Sierra で Homebrew を使う方法 概要 対応方法は Homebrew の公式ドキュメント (削除済み) で紹介されています. Homebrew をデフォルトの /usr/local 以外にインストールしている場合は特に対応は必要ありません. WWDC 2015 では /usr は SIP の対象になるが, /usr/local は開発者が使用できるようになっていると紹介さ
Grand Central Dispatch (GCD) は Mac OS X 10.6+ や iOS 4+ で利用出来る技術で, タスクを簡単に非同期で実行させることが出来る技術の一つです. この記事では GCD の機能の一つであるディスパッチセマフォを活用する方法を紹介します. 例として有限リソースへのアクセス制限と, タスクの実行待ちを取り上げます. この説明では Swift 3 を利用しています. Swift 3 から API の命名規則が大きく変わっていますが, 同じ機能は Swift 3 未満や Objective-C でも利用できます. Objective-C や Swift 1/2 での記法はこの記事の末尾を参照してください. ディスパッチセマフォとは 基本的にカウンティングセマフォと同じですが, より効率的に動作するように実装されていると公式ドキュメントに記述されています
clang は LLVM をバックエンドに使用しており, C言語で書かれたソースコードを LLVM IR に出力したり, 各アーキテクチャのアセンブリを出力することができます. コード生成や LLVM の勉強に利用できます. LLVM と clang のインストール ここでは割愛します. 今回は LLVM / clang 3.6.1 で動作確認しています. C -> LLVM IR C 言語のソースコードから LLVM IR を出力します. 1.ll というファイルに LLVM IR が出力されます. clang -c -S -emit-llvm 1.c C -> LLVM ビットコード C 言語のソースコードから LLVM ビットコードを出力します. 1.bc というファイルにビットコードが出力されます. # AT&T 形式 clang -c -S 1.c # Intel 形式 clan
Mac OS X で OpenCV 3 + Python 2/3 の開発環境を整備する方法をまとめます. 今回この方法で導入テストを行なった環境は以下の通りです. OS X 10.10.4 (14E46) Homebrew Python 2.7.10 / 3.4.3 NumPy 1.9.2 OpenCV 3.0.0 Mac OS X + OpenCV 2 + Python 2 での環境構築についてはこちらを参照してください. Homebrew の導入 これについては多くの方が既に導入されていると思いますので省略します. 詳しくは Homebrew の公式サイトを参照してください. NumPy は homebrew-python, OpenCV は homebrew-science に Formula があるので, それぞれ tap しておきます. brew tap homebrew/pyt
Django アプリケーションから簡単に Slack や HipChat に通知を送ることができる django-channels を公開しました. 現在, Slack, HipChat, Yo の3つのチャンネルに通知を送ることができます. 背景 最近 Hubot や Slack の Integrations など, 様々な通知をチャットに集約することが増えてきています. 国産のサービスでも Mackerel は多くのチャンネルに通知を送る機能を備えています. django-channels はシンプルなインターフェースで, 様々なチャンネルに通知を送れるようにすることを目指しています. ユーザーからの投稿があった際に通知を送るようにしたり, サーバーでエラーが発生した場合にその内容を通知するようにしたりなど, 使い方は様々です. 使い方 django-channels は Python
Swift 1.2 を使ってジェネレータを作成したり, ジェネレータを使って遅延評価をしてみます. 同様のことをこれまでいくつかの言語で行っていますが, それについては以下を参照してください. これまでの流れ Ruby の Enumerator でジェネレータを作ったり、遅延評価してみる Python でジェネレータを作ったり、遅延評価してみる ECMAScript 6 でジェネレータを作ったり、遅延評価してみる Rust でジェネレータを作ったり、遅延評価してみる ジェネレータの基本 Swift でのジェネレータは GeneratorType プロトコル (protocol) に適合している型として表されます. GeneratorType の定義は以下のようになります. protocol GeneratorType { typealias Element mutating func ne
Raspberry Pi にはハードウェア乱数生成器が搭載されており, Raspbian では若干の設定を行うことでこれを簡単に利用することができます. カーネルモジュール ハードウェア乱数生成器を利用するためには, カーネルモジュール bcm2708-rng を読み込む必要があります. カーネルモジュールを一時的に読み込む場合は以下を実行します. sudo modprobe bcm2708-rng 起動時にカーネルモジュールを自動的に読み込むには, /etc/modules に以下を追記します. bcm2708-rng カーネルモジュールが読み込まれているかどうか確認します. $ lsmod | grep rng bcm2708_rng 1196 0 乱数の取得 ハードウェア乱数生成器のデータは /dev/hwrng から読み出すことができます. 以下は乱数を 128 バイト取得して,
ECMAScript 6 の実装は各処理系で少しずつ進んでいますが, 現実的に Web ブラウザで ECMAScript 6 のコードを実行するには一部の機能のみを用いるか, Babel 等のコンパイラを用いて ECMAScript 5 互換のコードに変換して利用することになります. この記事では Python の Web アプリケーションフレームワーク Django と Django で静的ファイルの圧縮等を行う Django Compressor と Babel を組み合わせて利用する方法を紹介します. 環境 Python・Django・Django Compressor・Node.js (io.js)・Babel がインストールされた環境があり, 適当な Django のプロジェクトが生成できているものと仮定します. Django と Django Compressor は pip
「Ruby の Enumerator でジェネレータを作ったり、遅延評価してみる」や「Python でジェネレータを作ったり、遅延評価してみる」の記事を ECMAScript 6 のジェネレータを使って記述するとどのようになるのか, 実際に試してみました. ECMAScript 6 の各ブラウザや処理系での実装状況の詳細はこちらを参照してください. 現時点でこの記事のコードがそのまま実行できる処理系はないと思われます. コードを Babel 等を用いて ECMAScript 5 のコードに変換するか (この場合ジェネレータを利用するために Polyfill が必要になります) arrow functions などの処理系が対応していない部分を書き換えて実行する必要があります. ジェネレータの基本 ECMAScript 6 で提案されているジェネレータについては「function* – Ja
Python の datetime オブジェクトと Unix 時間 (Unix time / Epoch time) を相互変換する方法についてまとめます. Python の datetime オブジェクトにはタイムゾーン情報が付いているもの (aware) と付いていないもの (naive) があるので注意が必要です. Unix 時間 (Unix time) は UTC での 1970/1/1 00:00:00 からの経過秒数で表されます. 多くのシステムでは閏秒の存在を考慮しない実装となっているようで, この場合 Unix time と UTC, JST の対応は以下のようになります. Unix time UTC JST (UTC+9) “naive” と “aware” Python の datetime オブジェクトには “naive” と “aware” の2種類のオブジェクトが
バグフィックスチャレンジ全体のルールはこちらに掲載しています. フロントエンド問題はこちらで公開しています. フロントエンド問題は HTML, CSS, JavaScript それぞれ1つのファイルからなるシンプルなアプリケーションに複数のバグが仕込まれており, バグを修正して仕様どおりに動作するようにするというものです. この問題のポイントの一つとしては最新の Google Chrome の安定版 (当時 41.0.2272.101) で動作すればよいとされているため, HTML5 や CSS3, ECMAScript 6 のような最新の技術を用いて作成されているということがあります. もう一つはこの問題がバグフィックスチャレンジであり, ソースコードを全面的に書き換えて仕様通りに動くようにすればいいというのではなく, 既存のコード中のバグを修正してもらう問題だということです. 実際にあ
Raspberry Pi が扱える低レベル周辺機器の一つに I2C があります. I2C バスに温度センサなどを接続すると比較的簡単にデータを取得できます. しかし, 標準の Raspbian では I2C が無効化されているため, これを有効化するためにいくつかの手順が必要になります. 2015 年にリリースされた Linux 3.18.x のカーネルから Device Tree という仕組みがデフォルトで導入され, 以前紹介した記事の内容では I2C を有効化できなくなってしまいました. Raspbian とファームウェアのアップデート Raspbian と Raspberry Pi のファームウェアを最新版にアップデートし, ファームウェアの更新を適用するため再起動しておきます. sudo apt-get update sudo apt-get upgrade sudo apt-ge
最新の Google の iOS アプリや Chrome for Android では Web サイトに theme-color を設定することで, ヘッダー等に表示される色を設定できるようになっています. 上の画像の左側がデフォルトの表示, 右側が theme-color によって変更された場合の表示です. この色は以下のような meta タグを記述することで設定できます. <meta name="theme-color" content="#ff0000"> 現時点で theme-color に対応しているのは Google Chrome for Android 39 以降と Google の iOS アプリのようで, まだ標準化はされていないようです (2016/6/25 追記) WHATWG によって標準化されました. 参考 meta-theme-color – Chromium
Debian Wheezy で GitHub が提供しているボット Hubot を動作させる方法をまとめます. 出来る限り, Debian 標準のパッケージを使って環境を整備します. Node.js のインストール Node.js のパッケージは Wheezy 標準ではインストールすることが出来ないため, Debian が公式に提供している Backports からインストールします. /etc/apt/sources.list に以下を追加します. deb http://ftp.jp.debian.org/debian/ wheezy-backports main apt を更新して, wheezy-backports から Node.js をインストールします. sudo aptitude update sudo aptitude upgrade sudo aptitude -t wh
この記事は CAMPHOR- Advent Calendar 2014 15日目の記事です. Python 製のドキュメント作成ツールであるSphinx (公式, 日本) と, その拡張機能である sphinxcontrib.httpdomain を組み合わせると RESTful API のドキュメントを簡単に作成することができます. Sphinx とは Sphinx は Python 製のドキュメンテーションビルダーです. reStructuredText という形式でマークアップしたものをビルドして, HTML や PDF, ePub など様々な形式で出力することができます. Sphinx は Python の公式ドキュメントや様々な Python のライブラリ (Django, NumPy, SciPy, etc…) で利用されているほか, Python 以外の言語のプロジェクト (
Cython のコードを拡張モジュールとしてパッケージに組み込むには setup.py に変更を加える必要があります. distutils を用いる方法 distutils を用いる方法は公式ドキュメント (英語 / 日本語) に掲載されています. hello.pyx という Cython コードを作成し, 以下のように setup.py を記述すると自動的に Cython による C コードへのコンパイルと C コードのコンパイルが行われます. from distutils.core import setup from Cython.Build import cythonize setup( name = 'Sample App', ext_modules = cythonize("hello.pyx"), ) これによってインストールされたモジュールは import hello とすれ
Swift では非負整数であることが自明な場合でも, 特別な理由がない場合 UInt より Int を用いるのが良いようです. Int/UInt はそれぞれ Objective-C の NSInteger/NSUInteger に相当し, 32bit プラットフォームでは 32bit, 64bit プラットッフォームでは 64bit の符号付き/符号なし整数です. The Swift Programming Language の Language Guide に以下のような記述があります. Use UInt only when you specifically need an unsigned integer type with the same size as the platform’s native word size. If this is not the case, Int is
Mac OS X で OpenCV + Python の開発環境を整備する方法をまとめます. 今回この方法で導入テストを行なった環境は以下の通りです. OS X 10.9.2 (13C1021) Homebrew Python 2.7.6 NumPy 1.8.1 OpenCV 2.4.8.2 Mac OS X で OpenCV 3 + Python 2/3 での環境構築についてはこちらをご覧下さい. Homebrew の導入 これについては多くの方が既に導入されていると思いますので省略します. 詳しくは Homebrew の公式サイトを参照してください. NumPy は homebrew-python, OpenCV は homebred-science に Formula があるので, それぞれ tap しておきます. brew tap homebrew/python brew tap
企業や大学のネットワークでは外部のサーバーに直接SSH接続できないようになっている場合があります. こういった環境でSSH接続を行う方法の一つに, プロキシを利用する方法があります. SOCKS v.5プロキシサーバー: proxy.example.com:1080 接続先サーバー: server.example.com で接続する場合は以下のようなコマンドになります. ssh -o ProxyCommand='nc -x proxy.example.com:1080 %h %p' server.example.com 何度も利用する場合は ~/.ssh/config に設定を書いておくと便利です. Host server.example.com-socks Hostname server.example.com ProxyCommand nc -x proxy.example.com:1
Raspberry Pi を QEMU でエミュレートする方法です. これにより実機を用いずにテストを行うことが出来ます. 環境 テストに用いたホストOSの環境は Debian 8 jessie amd64 です. エミュレータは QEMU 2.1.0 を使用し, ゲストOSには, Raspberry Pi用に最適化された Debian の Raspbian (2014-09-09) を用います. また, 以下の環境で同様の手順で動作できることを確認しています. OS X Yosemite, QEMU 2.1.2, Raspbian (2014-09-09) OS X Yosemite, QEMU 2.2.0, Raspbian (2014-12-24) OS X Yosemite, QEMU 2.2.1, Raspbian (2015-05-05) QEMU のインストール QEMU を
Swift の Array / Dictionary は最適化なしでは遅い (Xcode 6.1 / iOS 8.1 更新) Swift の Array/Dictionary は最適化なしでコンパイルした場合, 実行速度が遅くなります. NSMutableArray/NSMutableDictionary と比べてもかなり遅い結果となります. テストコード この問題をテストするために単純なサンプルコードを作成しました. NSMutableArray と Swift の Array にそれぞれ 1,000,000 個の要素を追加するコードと, NSMutableDictionary と Swift の Dictionary に 100,000 個の要素を追加するコードです. OS X の Swift は現時点で Beta とされているため, iOS アプリケーションとして作成しました. 利用
Swift で Singleton (シングルトン) パターンを実装する方法はいくつか提案されていますが�, ここでは Swift 1.2 以降で利用できる方法と Xcode 6 Beta 4 から利用出来る古い方法の2つを紹介します. Xcode 6.3 / Swift 1.2 以降 コード class SingletonSampleClass { private init() { // Initialization here } static let sharedInstance = SingletonSampleClass() } 説明 private init() { // Initialization here } イニシャライザは private にしておき, sharedInstance 経由でのアクセスを強制します. ただし Swift の private のスコープは同じ
従来の System V init に代わり, systemd が多くのディストリビューションで採用されつつあります. systemd を制御するためのコマンド systemctl を用いて, システムの終了や再起動, サスペンドを簡単に行うことが出来ます. 手順 システムをシャットダウンして電源を切る場合は以下のようになります. systemctl poweroff 他のユーザーがログインしてない場合などはユーザー権限で実行できます. コマンド一覧 終了以外にも, 以下のコマンドを実行することが出来ます. コマンド 説明
ここでは IPA の UTF-8 を用います. sudo aptitude install mecab-ipadic-utf8 複数の辞書をインストールした場合は, update-alternatives で選択することができます. sudo update-alternatives --config mecab-dictionary mecab-python のインストール (システム) システムに直接 mecab-python をインストールする場合は, apt から直接インストールできます. sudo aptitude install python-mecab mecab-python のインストール (virtualenv) mecab-python をインストールするために必要な mecab-config を利用するために以下をインストールします. sudo aptitude in
2014/7/24 に Gyazo API が公開されました. この API を Python から簡単に利用できるようにした python-gyazo を作成しリリースしました. ソースコードは GitHub で公開しています. 使い方 こちらから Gyazo API のアプリケーション登録をして, アクセストークンを取得しておきます. python-gyazo は PyPI からインストールできます. Python 2.7 と Python 3.4 でテストしています. virtualenv を使った場合のインストール方法は以下のようになります. virtualenv venv source venv/bin/activate pip install python-gyazo 画像の取得 自分の Gyazo の画像のリストを取得して, その情報を表示する例は以下のようになります. gy
Raspberry Pi の armhf アーキテクチャをサポートした mackerel-agent のバイナリが提供されていないので, ソースコードからビルドすることで利用できるようにしました. テストでいくつかのエラーが出ましたが, 基本的な機能は利用できています. また, この記事は Go 言語の利用経験の少ない者が書いているためいくつかの誤りを含む可能性があります. 環境 Raspberry Pi Debian 8 jessie (Raspbian) mackerel-agent 0.14.1 go 1.3.3 make 等を利用するために build-essential を, go を利用するために golang パッケージを, コードを取得するために git と mercurial をインストールします. $ sudo apt-get install build-essenti
さくらVPS のコントロールパネルでは, リモートコンソール機能が提供されていて, ブラウザ上から仮想シリアルポートを通じてサーバーを操作出来ます. 標準で提供されている CentOS や, さくらインターネットが提供しているカスタムOSではこの機能が設定済みなのですが, 手動でISOイメージからインストールすると, この機能を利用することが出来ません. ここでは ISO イメージからインストールした, Debian 7 wheezy でリモートコンソール機能を利用する方法を説明します. なお, CentOS 5 向けの情報はさくらのサポート情報にて公開されています. /etc/inittab の末尾に以下の行を追加します. co:12345:respawn:/sbin/getty -L ttyS0 115200 vt100 /etc/default/grub の GRUB_CMDLINE
このページを最初にブックマークしてみませんか?
『ymyzk’s blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く