DEODERED BLOG でブロックチェーン関連の話題が多くなってきましたので、専用にBlogを立ち上げました。
Blockchain Blog
By 1月 4th, 2022, underEmbedded
By 12月 18th, 2016, underDECODERED BLOG
By 6月 17th, 2016, underUpdate iPhone App ‘Live Music Coder M^2’
By 1月 9th, 2016, underあけましておめでとうございます!
このたび6年くらいぶりに、このアプリをアップデートしました。
https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=371256064&mt=8

iOS9で原因不明のクラッシュがあったので、ビルドしなおしました。かなり前のアプリなので、今の環境で動かすのにいろいろと時間がかかりました。C言語のプログラムを習い始めたころ、「intは使うな」という教えがありましたが、今回はそれを痛感しました。当時16bitと32bitのはざまでいろんな問題がおきましたが、今は32bitと64bit間です。やはり教訓は守らないといけませんね。
これ以外の過去のアプリもできるだけアップデートしていきたいと思っています。
あとこれに先駆けて新しいアプリもリリースしました。
“C Tones Learning”
https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1063098601&mt=8
(あまり一般的ではない特定用途向けのアプリですが・・)
今年は、新規のアプリもリリースしていく予定です。
http://iphone.iiv.jp/
教育用途向けのアプリとか作ってみたいです。
http://decode.red/ed/
本年もよろしくお願いいたします!
calling Haskell from Swift / Linux
By 12月 26th, 2015, under今月Swiftがオープンソースとして公開されました。何か試したかったのでC言語とのリンクをと思ったのですが、少し踏み込んでHaskellにしてみました。
環境: swift-2.2-SNAPSHOT-2015-12-22-a-ubuntu15.10.tar.gz / Ubuntu 15.10
Swiftインストール:
https://swift.org/download/#latest-development-snapshots
からダウンロードした上記ファイルを解凍して、usr/binにパスを通します。
usr/lib/swift/linuxにある、libswiftCore.soをLinuxの/usr/local/libにコピーします。
とりあえず簡単なテストをするだけなので、これだけにしました。
export PATH:~/swift/usr/bin
sudo cp libswiftCore.so /usr/local/lib
sudo ldconfig
Haskellインストール:
sudo apt-get install ghc
fib.hs
module Fib where
import Foreign.C.Types
fibonacci :: Int -> Int
fibonacci n = fibs !! n
where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
fibonacci_hs :: CInt -> CInt
fibonacci_hs = fromIntegral . fibonacci . fromIntegral
foreign export ccall fibonacci_hs :: CInt -> CInt
参考: https://wiki.haskell.org/Calling_Haskell_from_C
このコードをそのまま使い、Swiftから呼び出してみます。
fibsw.swift
import Foundation
hs_start()
var a: CInt = 12
let fb = fibonacci_hs(a)
print("fibonacci \(a) : \(fb)")
hs_end()
なんとダイレクトで呼び出せてしまいます。しかし、初期化処理とか必要になってくるので、Cのグルーコードを用意します。
fibc.h
#include "fib_stub.h" int hs_start(); int hs_end();
fibc.c
#include <stdio.h>
#include "fibc.h"
int hs_start()
{
int argc = 2;
char *argv[] = {"+RTS", "-A32m", NULL};
char **pargv = argv;
hs_init(&argc, &pargv);
return 0;
}
int hs_end()
{
hs_exit();
return 0;
}
fib_stub.hは、Haskellコンパイル時に自動生成されます。
#include "HsFFI.h"
#ifdef __cplusplus
extern "C" {
#endif
extern HsInt32 fibonacci_hs(HsInt32 a1);
#ifdef __cplusplus
}
#endif
ビルド:
ghc -c -O fib.hs
cc -c -o fibc.o fibc.c -I/usr/lib/ghc/include
swiftc -c -o fibsw.o fibsw.swift -import-objc-header fibc.h -I/usr/lib/ghc/include
ghc –make -no-hs-main fibsw.o fibc.o fib.o -o fibsw -lswiftCore
実行結果:

SwiftがLinuxで手軽に使えると、サーバ、クライアントともSwiftで開発ができるのでいろいろと便利かもしれません。
Perfect.orgなども要注目ですね。
Update iPhone App ‘PPPPiano’
By 5月 18th, 2015, under5年ぶりにiPhoneアプリをアップデートし、先週承認されました。(12日)
6年前にリリースした’Perfect Pitch Practice Piano’です。
https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=320982874&mt=8
iOS8で使えなくなった等のレビューがありましたので、対応させていただきました。
もっと早く対応したかったのですが、開発していたMacがクラッシュした事故もあり、リリースがかなり遅れました。
ユーザの皆様にはご迷惑をおかけしました。
また、iPhoneOS2の時代のプロジェクトファイルなので、APIやライブラリ、Xcodeのファイルが現在と大きく変わっていて、戸惑いました。画面オリエンテーション(ランドスケープにならない)や起動スクリーン(表示されない)に手間取りました。iOS側の変更でプログラムが動かなくなったとき、当時とXcodeの開発環境もかなり違うため、修正にかなり時間がかかります。長くサポートすることは大変なことですね。しかし動作したということは、よかったと思うべきかもしれません。
プログラム仕様は変更はありません。画面の部品が変わっているので、若干レイアウトをずらしました。
Macが使えなくなったとき、本当に気持ちが萎えました。他にAndroid,Windowストアアプリにも興味があったこともあり、そちらに行ってからはiOSにはほとんどノータッチ状態になってしまいました。復旧したハードディスクから過去のプロジェクトを新しいMacのXcodeで動くように少しずつ手をつけていました。最近仕事で再びiOSにかかわるようになって、モチベーションが少しずつ上がってきたのは、幸いでした。
他のアプリもできる限り対応していきたいと思っています。(互換性があやしいやつもありますが・・)
Swift : Functional ?
By 5月 3rd, 2015, underSwiftの関数型言語の特徴についてのメモです。私の好みの部分だけビックアップしています。
環境 : Xcode 6.3 / Mac OSX 10.10.3
ソースはGithub Gistにあります。
https://gist.github.com/systemsblue/526eb360ec2ffc57a8a9
・Generator
無限の数列を生成するクラスです。引数により有限も可能です。
・Curry
関数のカリー化です。Swift自身対応しているのですが(f2)、f1の方がいろいろと応用がききそうです。コメントのf1は、簡略化した表記です。Haskellみたいです。
・Pipe
F#のパイプ演算子のように記述できます。(便利なのでいろいろと使えます。一番上に定義)
g(f(x)) -> x |> f |> g
カリー化の部分適合の考え方を参考にすると、引数を与えられます。
参考:
http://undefinedvalue.com/2014/07/13/fs-pipe-forward-operator-swift
Swift : without C ? (2)
By 4月 24th, 2015, under前回、Swift, Objective-Cの相互呼び出しのテストをしましたが、CからSwiftの呼び出しについては、Objective-C経由で十分と考えていました。CとSwiftの「近さ」を実感するために、ここをもう少し踏み込んでテストしてみたいと思います。
環境 : Swift 1.2, Xcode 6.3 / Mac OSX 10.10.3
- (void) callSwift2 {
MySwiftClass *my = [[MySwiftClass alloc] init];
SEL method = @selector(disp:);
[my performSelector: method withObject:@"NS String 2 / Objc"];
}
- (void) callSwift3 {
MySwiftClass *my = [[MySwiftClass alloc] init];
SEL method = @selector(disp:);
IMP func = [my methodForSelector: method];
// C Function
((void(*)(id, SEL, NSString*))func)(my, method, @"NS String 3 / Objc");
}
主に上記二つのメソッド追加しました。
前回からSwiftもバージョンアップしたので、OSもXcodeもアップグレードして、再びビルドしました。
また、プログでは初めて、コードをgithubにアップしました。関連プログでもこれから活用していくつもりです。
https://github.com/systemsblue/CBridge
callSwift3で、Cの関数のようにSwiftのメソッドを呼び出しているところがポイントです。
さらに、Pythonのctypesを使って、Swiftのメソッドをダイナミックライブラリにして無理やり呼び出してみました。
add.swift
public func add(a:Int, b:Int) -> Int {
return a + b
}
コマンド
xcrun swiftc -emit-library -emit-object add.swift -o add.o
xcrun libtool -dynamic -lswiftCore -lsystem -o add.dylib add.o -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx
nm add.dylib
symbol table表示結果
0000000000000f70 T __TF4addf3addFTSiSi_Si
0000000000000f64 t __dyld_func_lookup
U dyld_stub_binder
0000000000000f50 t dyld_stub_binding_helper
メソッド_TF4addf3addFTSiSi_Siをpython(REPL)から呼び出す。
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> cdll.LoadLibrary('/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib')
<CDLL '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib', handle 7f83b9e010f0 at 10b5874d0>
>>> my = cdll.LoadLibrary('./add.dylib')
>>> my._TF4addf3addFTSiSi_Si(1,2)
3
>>>
やはりCなのですね。
Pythonのctypesは、Cの構造体にもアクセスでき、dylib(Mac), dll(Window), so(Linux)にアクセスするときによく使われます。(前回やったようにSwiftも構造体にアクセス可という点で似ています)
オブジェクト指向を取り入れたのが、Objective-Cなら、関数型言語の特徴を取り入れたSwiftは、Functional-Cと呼んでもいいくらい、Cに「近い」と感じました。(見た目はかなり違いますが)
Swift : without C ?
By 4月 4th, 2015, underしばらくご無沙汰していましたiOS開発を再び始めることになりました。
新しい言語のSwiftを使っていろいろと作っていますが、C言語との「距離」が意外と近い、という印象を強くうけます。
「わさび抜きわさビーフ」ではないですが、C抜きの(Cにみえない)C言語みたいな感じでしょうか。
関数型言語のアイディアをふんだんに取り入れた、高機能な言語に仕上がっているのは、もちろんですが、Objective-C, C との相互やりとりは簡単にできるようになっています。
そこで、相互呼び出しのテストをしてみました。
環境 : Xcode 6.2 / Mac OSX 10.9.5
main.swift
import Foundation
class MySwiftClass : NSObject{
func disp(str:NSString){
println("Swift : \(str)")
}
}
var my = MyObjcClass()
var str:NSString = "NS String / Swift";
my.disp(str)
my.callSwift()
var i:CInt = 0
var cstr = UnsafeMutablePointer<CChar>.alloc(10)
getStr(cstr)
println(String.fromCString(cstr)!)
getInt(&i)
println("number : \(i)")
var ii:CInt = 0
var cstr2 = [CChar](count:20, repeatedValue:0)
var cst1 = cStruct(name:&cstr2, number:ii)
getStruct1(&cst1)
println("\(String.fromCString(cst1.name)!) : \(cst1.number)")
var cst2:cStruct = getStruct2()
println("\(String.fromCString(cst2.name)!) : \(cst2.number)")
var cst3:UnsafeMutablePointer<cStruct> = getStruct3()
println("\(String.fromCString(cst3.memory.name)!) : \(cst3.memory.number)")
sub01.h
#import <Foundation/Foundation.h> @interface MyObjcClass : NSObject - (void) disp:(NSString*)str; - (void) callSwift; @end
sub01.m
#import "CBridge-Swift.h"
#import "sub01.h"
@implementation MyObjcClass
- (void) disp:(NSString*) str {
NSLog(@"Objc : %@", str);
}
- (void) callSwift {
MySwiftClass *my = [[MySwiftClass alloc] init];
[my disp:@"NS String / Objc"];
}
@end
CBridge-Bridging-Header.h
#import "sub01.h" #import "sub02.h"
sub02.h
#include <stdio.h>
#include <string.h>
void getInt(int *i);
void getStr(char *str);
typedef struct{
char *name;
int number;
} cStruct;
void getStruct1(cStruct *st);
cStruct getStruct2();
cStruct* getStruct3();
sub02.c
#include "sub02.h"
#include <stdlib.h>
#include <string.h>
void getInt(int *i){
*i = 1234;
}
void getStr(char *str){
strcpy(str, "C String / Clang");
}
void getStruct1(cStruct *st){
st->name = "name of cStruct1";
st->number = 1111;
}
cStruct getStruct2(){
cStruct *st = malloc(sizeof(cStruct));
st->name = "name of cStruct2";
st->number = 2222;
return *st;
}
cStruct* getStruct3(){
cStruct *st = malloc(sizeof(cStruct));
st->name = "name of cStruct3";
st->number = 3333;
return st;
}
SwiftからCの呼び出しは、UnsafeMutablePointerを使うところとC構造体がそのままSwift側で使えてしまうところが、ポイントです。
構造体は3とおりの呼び出しを試しました。
SwiftとObjective-Cとの相互呼び出しは、簡単にできてしまいます。
CBridge-Bridgeing-Header.hは、コードを追加するときに作成するか聞いてきます。ここにはC,Objective-Cのヘッダを読み込みます。
CBridge-Swift.hは、見えないのですが、暗黙のルールとして記述するようです。
以下、結果です。

実は、このCとの相互呼び出しは、Swiftに少し慣れてからテストしました。Optional型、関数型の特徴に興味があり、そちらを先に学習したので、(モダンなのに)Cとここまで近いとは気づいていませんでした。Swiftが最初に発表されたき、Objective-CでCのオープンソースをよくリンクして使っていたので、これがやりづらくなるのでは、という心配もありましたが、ダイレクトに呼び出せる(Objective-Cを経由せずの意味)のことでその懸念はなくなりました。
この言語、かなりパワフルです。
GNUstep
By 3月 14th, 2015, underObjective-Cといえば、Apple製品の開発言語ですが、Xcode上でiPhoneの開発をするときしか使ったことがありませんでした。LinuxでObjective-Cによる開発をする環境のGNUstepというものがあると知って、試してみました。
もともとは、NeXTstepというOS、このOSのアプリケーションの記述言語だったものを、Linux上に移したのがGNUstepということになります。
参考 :
http://www.gnustep.it/nicola/Tutorials/WritingMakefiles/node6.html
環境 : Ubuntu 14.04
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
int main()
{
NSAutoreleasePool *pool = [NSAutoreleasePool new];
[NSApplication sharedApplication];
NSRunAlertPanel (@"PanelTest", @"Hello from the GNUstep AppKit", nil, nil, nil);
[pool drain];
return 0;
}
GNUmakefile
include $(GNUSTEP_MAKEFILES)/common.make
APP_NAME = PanelTest
PanelTest_OBJC_FILES = Source.m
include $(GNUSTEP_MAKEFILES)/application.make
コマンド
apt-get install gnustep
apt-get install gnustep-devel
export GNUSTEP_MAKEFILES=/usr/share/GNUstep/Makefiles
make
openapp ./PanelTest.app
最近は、Swiftという言語が新しくあらわれ、以前から難解と言われているObjective-Cに変わろうとしていますが、個人的には、この言語とても好きです。
C言語に追加される形でモダンの機能が使えるようになっているからです。コードを混在させるという面でもC++より柔軟です。
混在をきらう人もいますが、文法の差異が大きいので、混在しても識別は容易です。
Cベースのキャリアの人は、好きになりやすいと思うのですが、とっつきにくさと使う機会の少なさから正しく評価させていないような気がします。
という私も使う機会がiPhone以外ないので、このGNUstepによって広がれば面白いかもしれません。
Co-Routine / Scheme
By 11月 25th, 2014, under以前コルーチンの記事Co-Routine / Pythonを書きましたが、Scheme(Lisp)でやってみました。最近、データ処理には「やはりLispが向いているかも」という気まぐれから、Schemeに再びはまっています。Schemeといえば、call/ccによる「継続」が有名ですが、ならばコルーチンでしょう、ということになりました。しくみがわかりやすいようにシンプルなものにしました。
#lang racket
(define cont #f)
(call/cc (lambda (return)
((lambda (yield)(yield 1)(yield 2)(yield 4))
(lambda (value)
(call/cc (lambda (c)
(set! cont c)
(return value)))))))
今回使ったこのDrRacketというツールは、初めて使ったのですが、とても高機能で使いやすいです。再びはまったのも、このツールによるところが大です。
http://blog.livedoor.jp/kosugip/archives/692821.html 参考
calling Clojure from Java
By 11月 6th, 2014, under前回の流れで、今回はClojureを呼び出してみました。
環境: Java 1.8.0_25, Clojure 1.6.0, Leiningen 1.0 / Windows 8.1
JavaMain.java
import clojuresub.core;
public class JavaMain{
public static void main(String[] args){
String str = "Java String";
core.sub(str);
}
}
lein new clojuresub
を実行の後、以下のようにプログラムコード、プロジェクトファイルを記述します。
core.clj
(ns clojuresub.core
(:gen-class
:name clojuresub.core
:methods [#^{:static true} (sub [String] String)]))
(defn -sub
[s]
(println (str "Clojure Message : " s)))
project.clj
(defproject clojuresub "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]]
:aot :all
:main clojuresub)
clojuresubディレクトリで、
lein compile
javac -cp .\target\classes JavaMain.java
java -cp .`;target\classes`;clojure-1.6.0.jar JavaMain
を実行します。
clojre-1.6.0.jarは、leiningenインストール時の.m2フォルダリポジトリ内の深いところからカレントにコピーしておきます。
lein uberjar
を実行してjarを作成し、下記のように実行することもできます。
参考:
http://stackoverflow.com/questions/2181774/calling-clojure-from-java
http://www.coderanch.com/t/601586/clojure/Calling-Clojure-Java-code
calling Scala from Java
By 11月 3rd, 2014, underPubSub / Redis Server
By 8月 10th, 2014, underRedisサーバでメッセージのPublish/Subscribeをやってみた。
環境 : redis-server 2.8.4 / Ubuntu 14.04 LTS
まずはRedisサーバのインストールから。
apt-get install redis-server
これだけでサーバも起動します。
WindowsからRedis Desktop Manager (http://redisdesktop.com/)を使いたかったたので、サーバをリモートからアクセスできるようにします。
service redis-server stop
vi /etc/redis/redis.conf
bind にリモートからアクセスするサーバのIPアドレスを設定
requirepass にpasswordを設定
service redis-server start
Subscribe用のクライアントを開きます。
redis-cli -h 192.168.11.11 -a password
まとめてしまいましたが、subcribeをして下のpublishを待ち、publish実行後subscribeでmessageを受信します。
以上、簡単ですがメモでした。
Co-Routine / Python
By 5月 28th, 2014, under超簡単にPythonでコルーチンを表現するのにす、わかりやすいと思われる例をメモしておきます。
def ro1(): for i in range(1,5): print i def ro2(): for i in range(101,105): print i ro1() ro2()
1
2
3
4
101
102
103
104
これを以下のようにすると、
def co1(): for i in range(1,5): yield i def co2(): for i in range(101,105): yield i i1 = co1() i2 = co2() for i in range(1,5): print i1.next() print i2.next()
1
101
2
102
3
103
4
104
今度は、コルーチンが得意なLuaでもっといろいろなテストをしてみたいと思います。
MQTT / RabbitMQ
By 3月 9th, 2014, under前回のRabbitMQでMQTT(MQ Telemetry Transport)の動作確認もしてみたので、そのメモをしておきたいと思います。
MQTTについては以下参照。
HTTPからMQTTへ – IBMが提唱するモノとモノがつながる時代に最適化したプロトコル&アプライアンス
http://it.impressbm.co.jp/special/2013/12/09/5313
AMQP(Advanced Message Queuing Protocol)と何が違うのか、どのように使い分けるのか、ということですが、MQTTは組み込み機器等で軽量M2M(Machine-to-Machine)の通信で使われるもの、と認識しています。
インストールは、前回の手順の続きで、プラグインを追加し、サーバを再起動します。
環境 : MacOSX 10.9
参考 : https://gist.github.com/voluntas/8238751
./sbin/rabbitmq-plugins enable rabbitmq_mqtt
./sbin/rabbitmq-server
次に、PublisherとSubcriberのプログラムをPythonで用意します。
(これは参考サイトのものをそのIPアドレスを変えて使いました。pub.py,sub.py)
以下モジュールをインストールします。
環境 : Windows7
pip install paho-mqtt
通信内容をキャプチャして内容を見てみたかったので、別のマシンからアクセスすることにしました。
コマンドプロンプトをPub/Subと別々にひらき、それぞれを実行します。(subから実行。複数可)
pubを実行すると、
my/topic/string 0 hello world
と表示されます。
「軽量」ということなので、どんなパケットだろうということでパケットキャプチャしてみました。

上はsub側のバケット部分を選択しています。下はpub側。

確かに少ないですね。
RabbitMQ / Mac
By 3月 6th, 2014, underErlangつながりで、MacでRabbitMQをうごかしてみたので、メモしておきたいと思います。
RabbitMQ(ラビットエムキュー)は、Advanced Message Queuing Protocol(AMQP)を使用した、オープンソースのメッセージ指向ミドルウェア。RabbitMQ Serverは、Erlang言語で記述されており、クラスタリングとフェイルオーバーのためにOpen Telecom Platformフレームワークで構築。
(by Wikipedia)
まずMac用Erlangを以下からダウンロードしてインストール
http://code.google.com/p/rudix/downloads/detail?name=erlang-R15B02-0.pkg
/usr/local/binにerlなどがイントールされます。
RabbitMQサーバは以下サイトから rabbitmq-server-mac-standalone-3.2.4.tar.gz をダウンロード
http://www.rabbitmq.com/install-standalone-mac.html
rabbitmq_server-3.2.4/sbinのファイルを実行します。
以下チュートリアルを使用
https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/erlang
チュートリアルの中に以下を展開します。
git clone https://github.com/rabbitmq/rabbitmq-tutorials
cd rabbitmq-tutorials/erlang
wget http://www.rabbitmq.com/releases/rabbitmq-erlang-client/v2.7.0/rabbit_common-2.7.0.ez
unzip rabbit_common-2.7.0.ez
ln -s rabbit_common-2.7.0 rabbit_common
wget http://www.rabbitmq.com/releases/rabbitmq-erlang-client/v2.7.0/amqp_client-2.7.0.ez
unzip amqp_client-2.7.0.ez
ln -s amqp_client-2.7.0 amqp_client
rabbitmq_server
プラグインを有効にします。
./rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
これで、ブラウザで管理画面が表示できます。(サーバ起動後 guest/guestでログイン)
サーバを起動します。
./rabbitmq-server
RabbitMQ 3.2.4. Copyright (C) 2007-2013 GoPivotal, Inc.
## ## Licensed under the MPL. See http://www.rabbitmq.com/
## ##
########## Logs: ./../var/log/rabbitmq/rabbit@N-no-MacBook-Pro.log
###### ## ./../var/log/rabbitmq/rabbit@N-no-MacBook-Pro-sasl.log
##########
Starting broker… completed with 6 plugins.
rabbitmq-tutorials/erlang
ls
README.md emit_log_topic.erl receive_logs.erl
amqp_client new_task.erl receive_logs_direct.erl
amqp_client-2.7.0 rabbit_common receive_logs_topic.erl
emit_log.erl rabbit_common-2.7.0 send.erl
emit_log_direct.erl receive.erl worker.erl
tutorial実行
./send.erl
[x] Sent ‘Hello World!’
./receive.erl
[*] Waiting for messages. To exit press CTRL+C
[x] Received <<"Hello World!">>
参考サイト
http://d.hatena.ne.jp/iwasakims/20130512/1368378919
http://opentechnica.blogspot.jp/2012/02/macrabbiqmq.html
ErlangでTCPプログラム
By 2月 9th, 2014, under「プログラミングErlang」(オーム社)この本を読むと、Erlangでいろいろと作ってみたくなります。
文法的にとっつきにくいところがあるのですが、実例が豊富にあり読み進めるにつれこの言語の魅力に引き込まれます。
私は関数型言語ということよりも、小さなプログラム同士を通信させながら大きなものをつくっていくという疎結合の特徴が魅力です。
そこでまず基本となる、TCPクライアント、サーバ通信のテストをしてみました。
本のサンプルを参考に、わかりやすくするためこれ以上ないくらいに余計な部分をそぎ落としました。
環境:Erlang R16B03(erts-5.10.4)[64-bit] Eshell V5.10.4 (otp_win64_R16B03.exe)/ Windows7
-module(socket_test).
-compile(export_all).
-import(lists, [reverse/1]).
start_client(Str) ->
{ok, Socket} =
gen_tcp:connect("localhost", 1234,
[binary, {packet, 4}]),
ok = gen_tcp:send(Socket, Str),
receive
{tcp,Socket,Bin} ->
io:format("Client received = ~p~n",[Bin]),
gen_tcp:close(Socket)
end.
start_server() ->
{ok, Listen} = gen_tcp:listen(1234, [binary, {packet, 4},
{reuseaddr, true},
{active, true}]),
{ok, Socket} = gen_tcp:accept(Listen),
gen_tcp:close(Listen),
loop(Socket).
loop(Socket) ->
receive
{tcp, Socket, Str} ->
io:format("Server received = ~p~n",[Str]),
gen_tcp:send(Socket, [Str]),
loop(Socket);
{tcp_closed, Socket} ->
io:format("Server socket closed~n")
end.
クライアントとサーバは同じプログラムを使います。コンソールを二つ立ち上げてそれぞれErlangシェルで実行します。
[サーバ側]
c(socket_test).
socket_test:start_server().
[クライアント側]
socket_test:start_client(“TestMessage”).
“TestMessage”がサーバ側のコンソールに表示されます。
それぞれの言語、それをとりまく環境の得意なところを知っておくことによって、より効率のよいソリューションを生み出すことができると常々思っています。このErlang、強力に創造性を刺激してくれそうです。
関数型言語
By 1月 30th, 2014, underSoftwareDesign 2月号で「関数型プログラミング再入門」という特集がくまれました。「再入門」とあるのがミソかなと思います。特集では、関数型言語Lisp、OCaml、Haskell、Erlangが取り上げられ、Python、JavaSE8、Rubyを利用した関数型プログラムが紹介されています。
関数型言語は昔から興味を持ち続けているのですが、習得がなかなか難しく、一度学んでもしばらく使わないとすぐに理解できなくなっていました。(仕事で使うことはほとんどありません) 最近は統計学、データ解析などがブームなのも後押しをして、私のモチベーションも「再び」上がり現在、F#、Hakell、Erlangを勉強中の身であります。ただ学ぶだけでなく、これを使って何かを作るという目的があると意欲がつづきます。このブログでも記事がかけたらなぁと思っています。この投稿はそのキックオフみたいな意味合いもあります。

しかしながらプログラム言語というのは、プログラマであればだれでも興味を持つ話題です。「これからはやる言語は何?」、「初めてプロクラムを組むんだけど何を学んだらいい?」、「仕事に有利な言語は何?」などなど、それぞれいろんな意見が飛び交います。今はたくさんありすぎて何から学んだらいいか本当に悩むところです。私自身がプログラムを初めてころは、Windowsもインターネットも一般的なものでなかった時代で、C言語とアセンブラでほとんど仕事をしていました。それからWindows等のGUIとともにC++、インターネットとともにJava、HTML、PHP、JavaScript・・・・などと現在に至るわけですが、テクノロジーの進化とともに時間的に緩やかに学ぶことができたのは幸運だったかもしれません。C++もJavaももっと前からあったのですが、大々的に使われだしたのは、それぞれ使われる環境がそろってきてからだと思っています。GUIのプログラムはオブジェクト指向がマッチし、ネットワークプログラムはJavaが得意とします。そして次に関数言語ですが、構文解析、並列処理を得意といます。これも昔からありますが、いよいよビッグデータの時代に「再び」脚光を浴びようとしているのではないでしょうか。
私は、F#でWindowsストアアプリ、Haskellでファイルコンバータ、Erlangでデータ処理用サーバを作ってみたいと思っています。
またまたひさびさの投稿でした。
Before iOS7, After iOS7
By 9月 28th, 2013, underWindowsストアアプリを初公開
By 6月 22nd, 2013, underこのブログ久しぶりになってしまいました。
今回初めてWindowsストアアプリを開発して、ようやく今日公開することができました。(広告の出方がよくないよう気が・・まだ直すところあるかも)
何度もリジェクトされたのは、プライバシーポリシーの表示の仕方に問題があったようです。チャームから参照できるようにするのと、ダッシュボードにもそれが書かれたURLを記述しないといけなかったみたいです。リジェクトコメントが機械的なので、どこが悪いのかわからないと何度も違うところを直して、リジェクトを繰り返すことになりますので注意が必要です。こういう場合は早めにサポートにメールした方がよさそうです。(日本人が相手ですし結構すばやく対応してくれます。)
あと申請してから時間がかかったことは、本人確認の認証のところです。クレジットカードで仮の支払金額(支払後返金することによって金額を明細にのせる)を入力する部分がありますが、カード会社によって支払と返金のプロセスが同時に行われた取引を明細に載せないことがあるので、この金額が確認ができないことがあります。これを知るためにはカード会社にいちいち問い合わせをしなくてなりません。この金額を入力しないと審査が全く進みません。いつまでたってもほったらかしにされます。こんなこともあってリリースまでになんと二か月もかかってしまいました。なんかもっと気をきかせて欲しいところです。
さてiPhone、Androidアプリと開発をやってきて、次はWindowsPhoneをやってみたい、と思っていましたが、日本ではWindowsPhone8が発売されなかったので、今一つ盛り上がることができませんでした。こういう開発は、仕事以外の時間を使ってやるので、モチベーションがあがらないと何も進みません。気持ちの盛り上がりが何よりも大切になってきます。幸いWindows8という新しいOSが出たことにより、新しいもの好きの私としては、技術的に大きな進化があるこのOSにとても興味を持ったため、ストアアプリの開発をするモチベーションにつながりました。WindowsPhone8の開発も同じ作り方でできるという点も大きな意欲となりました。

本題のアプリの内容ですが、PCを使っていないときに起動して時刻をメロディで告知するというシンプルなものです。(スクリーンセーバとして起動できればいいのですが・・よくわからなくて・・) はっきりいってあまり一般的なアプリでないかもしれません。(まあ私のものかこういったものが多いのですが・・)JavaScriptとSVGで、ちゃちゃと作りました。
Windowsの場合、元々他のプラットホームに比べて開発方法にたくさんの選択肢があります。その上今回新しいUIのが登場したこともあって、一つ二つのアプリではなかなかどのような開発スタイルが適しているかよくわからないのではと思っています。(現在開発中のものは、C# + XAMLで作っています。)ですのでいくつかアプリを作ってみる必要があると思っています。これからも何タイトルが作っていく予定です。
とりあえず今日は「赤霧島」で乾杯!
「Clocklavier」
http://apps.microsoft.com/windows/ja-jp/app/clocklavier/64cabc92-6777-4de5-a509-3947ba39abd3
iPhone5 ‘Beat Stop Camera’
By 11月 21st, 2012, underMy iPhone5 App is ready
By 10月 12th, 2012, under久しぶりのiPhoneApp新作です。メトロノームアプリ’Dr Metronome.01’をiPhone5でリリースしました。
開発のきっかけは、以前のメトロノームアプリのユーザのでDJの方から、小数点以下のBPMのものが欲しいというリクエストをいただいたことです。最初その必要性がよくわかりませんでしたが、最近私もDJに興味がありちょっとやってみると、小数点以下のBPMがあるといいなぁと思うようになりました。
iPhone5も出たことですし、何か作ってみたいということで、初心にかえりこのアプリを作りました。
また、海外からリモート同期メトロノームアプリ’Dr Metronome:Synchronicity’でバイブに対応してほしいというリクエストがありました。バンドの練習でうるさい中メンバー同士で同期をとるそうです。バグもあったためこれもバージョンアップしました。
しばらく開発から遠ざかっていると、開発環境や申請のいろんなルールがかわっていて戸惑うこともありましたが、やはりiPhoneの開発は楽しい、とあらためて思いました。
ということで、次はカメラをつかったものをやる予定です。
Xcode 4.5
By 10月 1st, 2012, underiPhoneアプリの開発を初めて、三年半ほどたちますが、ここ一年くらい一休みしていました。この間Androidの開発(個人アプリ、受託など)やソーシャルアプリなどの開発をしていましたが、iPhone5の登場でまた開発を再開することになりました。
# この間、サポートがろくにできず、不都合が生じたユーザの方には申し訳ありませんでした。
まず最初の仕事としては、昔のアプリをiPhone5に対応させることです。互換性がいいとはいえ、いくつか動作しないアプリがありました。(まだ調査中ですが・・)
昔のアプリはiPhoneOS2とかで作られているので、これを最新のXcode4.5で読み込んで動作させようとすると、なかなか一筋縄ではいきません。しかし最近はiPhoneの情報がネットでかなりあるので、Googleで検索して一つ一つ解決していましした。
問題となったのは、複数の開発マシンであるMacでのプロビジョニング、複数バージョンのXcode設定項目の差異、armv6非対応などなどです。
これらの問題をクリアしていくのに、Googleが必要というのも、ちょっと皮肉ですね。
Androidでは幅広いバージョンに対応することを、よしとするのですが、iPhoneは積極的に下位バージョンを切り捨てていくようです。Xcode4.5ではarmv6非対応、iOS4.3以上となります。過去のXcodeを使おうと思ったのですが、iPhone5を接続できなかったので、(できるのかもしれませんが他に時間がかかりすぎてあまり粘りませんでした)結局、Xcode4.5でビルドしたものを最新バージョンとして、昔のアプリをアップデータしました。
アップデートだけでなく、再スタートとして新しいアプリも申請中です。’Dr Metronome.01′ という簡単なメトロノームアプリですが、とりあえず何か作ってみたかったので、開発してみました。開発にはモチベーションの維持が重要なので、このような小さな目標を達成して次に進むというやり方をいつも心がけています。
アイディアはあるので、できれば年内にもう一タイトルつくりたいと思っています。
iPhoneアプリ申請
By 9月 30th, 2012, under久しぶりの投稿になりました。
この度iPhoneアプリ開発を再開しましたので、これらについてここに書いていきたいと思います。
いままで、 http://iphone.iiv.jp のブログに書き込んでいた内容は、ここに書いていく予定です。
とりいそぎまずはご報告でした。
NGK2011B でLT
By 12月 4th, 2011, under今日、名古屋合同懇親会でLTをさせていただきしまた! 100人は超えていたとのことですが、トップバッターでとても緊張しました。USTREAMもあります。
時間が5分で強制的に終了ということで、LT不慣れな私としてはとてもドキドキしました。時間をチラチラみながらやるのですが、説明に夢中になっているあっという間に時間がすぎているので、焦りました。後から思ったのですが、4分30秒くらいで第一合図があって、5分で終了のという形だったら、まとめに入り忘れるのを防げたかもしれません。今度もし機会があったら提案してみたいと思います。時間は計算したつもりでしたが、時間超過してしまいました。後でUSTを見てその原因がわかりました。
緊張してしまうと、言い間違いが増えるため、その言い換えに時間がかかっているのですね。もともと内容を詰め込んでいたので、余裕がなかったのもあって超過していまいました。いゃ〜やってみないと気づかないものですね。前回のLTで詰め込むのをやめよう、余裕をもった内容にしよう、としたのですが、なかなかこれだけ大勢の人に見てもらう機会もないだろう、ということで再度詰め込んだ内容でトライすることにしました。
しかし、こんなつまらない話を長々としているのは、今回のLTの目的がアプリの紹介だけでなく、プレゼンの勉強をしたかったのもあったからです。自分が発表しやすいテーマ、スライド、大勢のオーディエンスがそろった機会はとても貴重です。
このような発表会や勉強会って、内容も重要ですが、それ以外にいろいろと学ぶことがあると最近よく思います。こんなことやっている人がいるのか、こんなこと全然しらなかった、この人たちはこういうグループの人なんだ、とかいろいろと観察することもできます。しかしATNDを見ると、東京とか大阪など、もっと大勢の人を集めて、もっといろんな知らないことやっているんですよね。参加者->LT->主催者という立場、名古屋->大阪・東京というような行動範囲の拡大をこれからできたらと、密かに思っています。(密かになっていないけど・・)
最後に、時間切れではなせなかったことですが、やっぱり一人ではやれることに限界があると思います。一緒にやれる仲間を増やして価値あるものを作りたいという気持ちを強く持つようになりました。そのためにもこのような場に顔をだし、またはいろんな勉強会に参加して、大勢の人と情報交換できたらと思っています。
また来年からも、積極的に活動できたらいいなぁと思っています。
#しかしAndroidの勉強会は行きたいのに、なぜかいつも日があわない。つ部なのにiPhoneネタばかりでスミマセン。m(__)m
ps. 今日紹介させていただいたiPhone.iPadアプリはすべてこのページにあります。
http://iphone.iiv.jp/
初GeekBarでLT ‘Twicecast Radio’
By 11月 30th, 2011, under
今週月曜日、はじめての名古屋GeekBarでしたが、LTをさせていただきました! お酒を飲みながら(LT中は飲んでませんが・・)、ゆったりした雰囲気でLTするのって、とても楽しいですね。難点はお酒が回ると言うべきことを忘れたりしてしまうところですが。。またネタができたら、是非やってみたいです。
内容は、次の名古屋合同懇親会でご紹介する予定のものの関連アプリで、デモとかする時間がなさそうだったので、GeekBarでやってみた次第です。USTを確認したところ、ネットの調子が悪く一部分しか録画データがありませんでした(ある意味ほっとしてます)ので、ここで少し補足したいと思います。(前回投稿の続きもかねてます)
[Twicecast Radioとは]
インターネットラジオを聴くアプリ。
ユーザが自由に音楽配信できるプラットフォーム。
mp3,ogg ファイル・ストームを再生可能。
URLは、Twitterのタイムラインから取得。
Twitterのタイムラインが、音楽のプレイリストになる。
わざわざフォーマットを意識して、入力するのが手間の場合、またインターネットラジオ放送局を探して登録したい場合の、Webサービスもあります。
ToDo:
oggファイルストリーミングですが、Webにホスティングするとき、Apacheのバージョンにより、再生できないときがあることに気づきました。この問題が解決後またバージョンアップする予定です。
iPhone App ‘Twicecast Live!’
By 11月 20th, 2011, underhttp://iphone.iiv.jp/sound/index/L0028
他のアプリやサービスとの連携もありながら、それらのわかりやすい説明が今までありませんでしたので、少しまとめてみたいと思います。
まずは、このアプリ単体で使うときの使い方からです。
このアプリは、リアルタイムでiPhoneで録音した音声をストリーミング配信します。サーバ等を中継することなく、このアプリがサーバにもなり、クライアントにもなります。
サーバを起動して、Live!ボタンを押すだけです。現在の位置や、メッセージ、WebサイトのURL、なども知らせることができます。サーバURLの通知の方法としては、メールとTwitterがあります。
Twitterは別アプリの’Twicecast Radio’経由で起動するときに使います。
サーバURLの入力して、Playボタンを押すだけで、音声を聴くことができます。
URLを入力するのは手間がかかりますが、メールで通知を受け取ったときは、リンクをクリックするだけで、URLが入力された状態でアプリが起動します。またTwicecat Radio経由でも起動できます。(これは次回説明させていただきます)
同時アクセス数は最大25としています。これは負荷よりも回線状況に大きく左右されます。
C言語末尾再帰
By 11月 15th, 2011, under最近マイブームなので、ちょっと気になってテストしてみました。
以下末尾再帰関数の具体例のメモです。
実際にスタックを消費せずループしているかどうか。
動作環境はMac Snow Leopardのコンソール。
/*test.c*/
#include<stdio.h>
void loop(int x)
{
if(x == 0){
return;
}
printf("%d ", x);
loop(x + 1);
}
main()
{
loop(1);
}
cc -o test test.c でコンパイルした場合、261623で、Segmentation fault.
cc -o test -O2 test.c でコンパイルした場合、無限ループ
アセンブラコードを見てみると、前者は、
_loop:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
subq $16, %rsp
Ltmp2:
movl %edi, -4(%rbp)
movl -4(%rbp), %eax
cmpl $0, %eax
je LBB1_2
movl -4(%rbp), %eax
xorb %cl, %cl
leaq L_.str(%rip), %rdx
movq %rdx, %rdi
movl %eax, %esi
movb %cl, %al
callq _printf
movl -4(%rbp), %eax
addl $1, %eax
movl %eax, %edi
callq _loop
後者は、
_loop:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
pushq %r14
pushq %rbx
Ltmp2:
leaq L_.str(%rip), %rbx
movl %edi, %r14d
jmp LBB1_1
.align 4, 0x90
LBB1_3:
leal 1(%r14), %esi
xorb %al, %al
movq %rbx, %rdi
callq _printf
addl $2, %r14d
LBB1_1:
testl %r14d, %r14d
je LBB1_4
xorb %al, %al
movq %rbx, %rdi
movl %r14d, %esi
callq _printf
cmpl $-1, %r14d
jne LBB1_3
LBB1_4:
popq %rbx
popq %r14
popq %rbp
ret
確かに関数呼び出しがなくなっている。
最適化しないと末尾再帰にならないみたいである。
実例に学ぶスマートフォンアプリ開発【MeetUP】
By 11月 13th, 2011, underhttp://atnd.org/events/20951
先週にひきつづきエイチームさんに、行ってきました。
実際に開発したアプリ、そして運用しているサービスについてのノウハウを聞くことができて、とても勉強になりました。今まで何回か勉強会でここに来させていただきましたが、今回は、エイチームさんが主催ということで、実践的な内容でした。
スマートフォンというと、個人ディベロッパーが多くいますが、これは個人が手軽にアプリケーションを開発、全世界にリリースできるという魅力があるからだと思っています。また企業が本腰を入れて開発してくるアプリもあり、これらが混在している状況であります。
以前、携帯電話公式メニューのサービスを手がけていたことがありますが、メニューにのるためには、法人でなくてはならなかったり、法人であっても過去の実績がなければ、メニューの上位に掲載されなかったりと、日本的なビジネス習慣を実感させられたことがあります。しかしiPhoneアプリをリリースしてみて、大手ゲーム会社のアプリと、自分のアプリが同じランキングの中にいるのをみたとき、壮快な思いをしたのを忘れられません。なんとフェアなのか、さすがアメリカ的、と思いました。
今回の勉強会(?)では、その企業の開発スタイルを垣間見ることができて、とても興味深かったです。3Dグラフィックツールを使った(コストのかかる?)開発手法などは、やはり企業らしい手法で開発されているのだなぁと思いました。これはPlayStationなどのゲームソフトを作るのと同じで、開発者もこの出身者のようでした。(一応私もですが^^;) ゲーム機開発をしていた人がやはりこのジャンルに流れてきているのでしょうね。逆に言えばこのような手法でやらないと、(個人ディベロッパーと同じことをやっていてはだめという意味で)ビジネスにならないのかもしれません。
あと開発会社としての興味以上に、毎週のようにいろんな勉強会に広い会場を無料で貸しているエイチームさんには、とても興味がありました。(途中社長さんのお話が急遽聞けたのもラッキーでした) 地域柄お固い会社が多いこの名古屋に、こんな開かれた魅力的な会社があるんだなぁと・・
今日は本当に有意義な日でした。
LL Nagoya
By 11月 6th, 2011, underLL Nagoya参加してきました!
http://partake.in/events/09bb8de2-5c8e-4515-83d7-70e7406b47ff
一言でいって、内容がすごい振幅のある勉強会でした。ははは・・
もともとライトウェイト言語の勉強会ですが、’LL’という文字が入ってれば、なんでもいいといった内容で、次に何が出てくるは全く予想がつかない、ドキドキ感がたまりませんでした。
しかしたくさんの発表が聞けたことは、とても有意義でした。まったく知らないことを知ることができるというのは、こういう機会がないとありませんね。
発表を聞いてみて、HaskellとSmalltalkはまた勉強したくなりました。.NETのDLR,Alloy Analyzeの話は、もっと時間をかけて聞きたかったです。Schemeの話は、全くついていけませんでした。
しかしよくこれだけの発表者をそろえたなぁと、驚きました。名古屋すごい! まあところどころ無茶ブリだと愚痴っている発表者もおられましたが、でもこのイベントが行われたことに意義を感じます。
また次回期待したいと思います!
またもコンピュータ界大物の訃報
By 10月 25th, 2011, underLispの創案者、ジョン・マッカーシー逝去(84歳)
http://jp.techcrunch.com/archives/20111024creator-of-lisp-john-mccarthy-dead-at-84/
Appleのスティーブ ジョブス、C言語、UNIXの父デニスリッチー、そしてLISPの創案者と今月は、なんという月なんだろうか。正直なところジョン・マッカーシーという名は、他の二氏とちがってすぐ思い浮かぶ名前ではありませんでしたが、Lispという偉大な言語は、この仕事をしてきていつも特別な存在でした。「天才というのは、こういうものを作る人だ」と、いつも思っていました。歴史は古いのに、いまだに最先端言語なのです。
最近は、再びLisp言語(Clojure)を学んでいることもあり、とても身近な存在です。
この10月は本当に忘れられない、月になりそうです。
まるで、Jobsが連れていってしまったみたい・・
天国で何かやらかす気なのかも・・
iPhoneDeveloper勉強会 名古屋 #2
By 10月 22nd, 2011, under本日は、LTさせていただきありがとうございました。
勉強会も、新しいiOS5の話題が中心とよく考えられた内容でした。発表された方は時間や情報量が少ない中調査されたことだろうと思います。お疲れ様でした。またTestFlightの話題は、全く知りませんでした。これは使えますね。
私のLTですが、ちょっと詰め込みすぎたせいで、かなりハイペースにやってしまいました。あせってしまいわかりにくい説明をしてしまいました。もう少し的を絞った方がよかったと反省しています。
発表内容のムービーですが、ここのサイトにあるものと、後以下のサイトにあるでもムービーを編集したものです。
リンクがわかりにくいので、ご案内させていただきます。
http://iphone.iiv.jp/sound/index/L0003
いや~本当に今日は勉強になりました。
皆様ありがとうございました。
Live Music Coder M^2 OSC with MAX/MSP
By 10月 21st, 2011, underiPad アプリ M^2とMAX/MSPを使ったOpenSoundControlのデモです。WiFi経由でMacの音源を鳴らしています。
LT用
Dear Jobs ….
By 10月 8th, 2011, underLazy K
By 9月 4th, 2011, under関数型プログラム言語のひとつです。
組み込み関数が3つしかないとてもシンプルな構造をもつ言語です。
しかしこれだけでプログラムを組むことは、ちょっと非現実的で、Scheme言語(LISPの一種)から変換された形のものを実行します。
この話になった経緯ですが、最近関数型言語Clojure(Lispの一種)の必要性を感じ勉強していたところ、もう少しさかのぼってLispを勉強しようと思い、Scheme周辺の情報収集をしているときに見つけました。たったこれだけの記号でプログラムを表現できる(関数表現)のが面白く、実際に動かしてみたくなりました。
Lisp言語はとても古い言語なので、長くプログラマをやられている方なら、一度は興味を持たれたことがあると思います。私が興味をもったのは、随分前にMacでLispを使ったアルゴリズムコンポジションを知ったときでした。音楽データもリスト表現できるので、Lispには相性がいいのでしょう、結構ネットでも資料が見つかります。(Common Lisp Musicなど)
そのうち関数型言語が話題になり(Haskell)、またLispが脚光を浴びるとまた勉強したりしましたが、一時興味をもっても使わないとすぐに忘れてしまい、なかなかこの言語が身に付くことはありませんでした。書籍はかなりたまりましたが^^;
そして、今回Clojureです。CPUのマルチコア化に伴い、このような言語レベルで並列性が実現できる関数型言語がさらに必要とされてきた上、JVMで走るということで、急速に(私のまわりだけかもしれませんが)注目を集めています。まだ少ししか勉強していませんが、結構実用的に感じます。
今度は、長続きすればいいのですが・・必要と思ったときしか勉強しない、遅延評価的??
これは趣味にちかいですが、Lazy Kを実際に動かしてみました。
参考ページ
http://e.tir.jp/wiliki?%CB%DD%CC%F5%3A%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%ECLazy_K
Schemeは、Ubuntuでmit-schemeをインストール
Lazy-K は上記リンクよりWindows版をインストール
(load “./lazier”) ;Windows版からもってくる
(load “./prelude”) ;ネットから取得
(lazy-def ‘(test x) ‘(cdr x))
(print-as-cc (laze ‘test))
と実行すると、
SI(K(KI))
を出力
これをWindowsで、
lazy -e “SI(K(KI))”
と実行して、キーボードから
1 2 3 4
と入力してリターン
すると
2 3 4
と表示します。
(lazy-def ‘(test x) ‘(x))
に変更すると、
I
なんと一文字だけ出力します。(もっとも短いプログラム)
これは、標準入力をそのまま標準出力にエコーします。
上記リンクには、もっと長いサンプルコードがありますが、S,I,K,(,)しか使っていません。
今回、標準入力を出力しているのでいいですが、文字列とか表現しようと思うと大変そうです。
これだけシンプルなので、数字すら定義されていません。prelude.scmをみると、数字を関数表現しているのが面白いです。
Qt Nagoya
By 7月 16th, 2011, underこの前の日曜日Qtのセミナーにいってきました。(遅いレポートですみません;)
Qt(キュート)は、マルチプラットホームの開発環境で、結構昔からあり、私もSHAPのLinuxZaurusの開発のとき、使う機会がありました。Qtopiaという組み込みのものだったと思います。
詳しくはWikiPediaなどで・・
Qtの最近の動向に、とても興味があったので参加しました。マルチプラットホームでアプリを作ろうとすると、FlexAIRがまず候補にあがりますが、便利な機能を使おうとすると製品を買わないとできなさそうなので、どうしても本腰を入れられませんでした。Qtの存在は知っていたはずですが、古いということで、忘れていたのが正直なところでした。
セミナーを聞いて、まだまだ現役ではないか、というのが第一印象です。それどころか、QMLを使ったアプリ開発は、先端をいっています。AndroidやiPhoneの開発は現在サポートしていないようですが、そのようなコミュニティはネットで調べるとあるようです。
私もインストールしてサンプルを動かしてみましたが、開発環境の完成度が高いのに、とてもモチベーションがあがります。最近はじめたAndroidの開発環境はお世辞にもいいとは言えず、惜しい気がしていました。
iPhoneには、Xcodeという開発環境、Windows 7 PhoneもMicrosoftの完成された開発環境があり、そしてこのQtもそれに負けないくらいの環境があります。この回のセミナーでは、MeeGoというプラットホームを初めて知りましたが、これにもQtは使われて、インターフェイスがすばらしかったです。MeeGoに関しては先行きがあまり明るくないようなことを言われていましたが、Qtの開発環境を見れば、もっと行けそうな気がしてしまいます。開発環境というのはただ便利とか使いやすさのことだけでなく、UIも含みます。だいたい優れたUIのツールから生まれるアプリは、UIもすばらいとものと思っています。
あと、WebKitとの絡みをもっと知りたかったですが、これはネットで調べたいと思います。しかしいろいろと勉強になりました。
講師のみなさんおつかれさまでした。
それから、このようなセミナーでは(前回のTiも)、やはりTwitterがあった方が便利だと思い、最近はじめました。
@B1TL1FE
よろしくお願いします!!
Titanium Mobile
By 6月 19th, 2011, under土曜日、名古屋Android勉強会Titanium Mobileハンズオンに参加してきました。
Titanium Mobileとは、簡単に言えば、iPhone,AndroidのアプリケーションをJavaScriptを使って、開発する環境です。
http://www.appcelerator.com/products/titanium-mobile-application-development/
開発効率の面で、このようなツールを使うことのメリットは多大だと思いました。同様のツールは他にもありますが、選択肢が多いのはいいことですね。
自分の場合は、特に言語は何でもこだわりませんが、JavaScriptからネイティブの機能にアクセスする仕組みは、以前から興味がありましたので、このTitaniumは、まさに好みのソリューションでした。
実際にそれを感じたのは、iPhoneのWebViewである特定のURLのみ違う挙動をするようなしくみを使ったときでした。アプリリンクから、AppStoreに誘導するしくみにこれを使うことも多いかと思います。
つまりHTMLベースの記述からiPhoneの挙動をコントロールできることになります。Titaniumにない機能はネイティブコードで拡張できるということですが、このあたりとても面白そうです。
今回のハンズオンで、何より興味深かったのが、講師増井氏のキャリアでした。Appcelerator入社に至る経緯が、とてもチャレンジ精神にあふれていて、聞いていてとても元気をもらいました。またこの業界急速に変化しているのが、よくわかります。私もシリコンバレーの会社を訪問したり、またその会社とも仕事をしたことがあり、今でもとても憧れる世界です。あちらではとてもドライな関係で契約・仕事を進めていきますが、開放的な環境が魅力でした。
ひさしぶりにまたわくわくした気分になりました。
Androidも一応2タイトル作ったわけですが、次はこのTitaniumを使ってみようかなと思っています。
それから、「AndroidSDK開発のレシピ」は、とても説明がわかりやすく参考になりました。
これから始める方、必見ですね!
2nd Android Application ‘TwitterTalker’
By 6月 14th, 2011, underTwitterのサーチ結果を音声合成で読み上げるアプリケーションを作りました。
iPhoneにはない機能を使いたいと思っていたので、音声合成を利用してみました。英語のみなのですが、興味のあるキーワードの検索結果を音声で読み上げるのは、ニュースをラジオで聞いているみたいで、結構楽しいです。
特徴は、検索結果をすべて読み終えた後、自動的に再度検索して、読み上げます。常に最新の情報を無限に読み上げることができます。
注)お使いの端末に、音声合成用のサウンドデータがインストールされていない場合、アプリケーションの起動時に、インストールにいきます。(決して怪しいアプリではありませんので安心ください:-) )
Android Application ‘Subnet’
By 6月 3rd, 2011, underはじめてAndroid アプリ’Subnet’を公開しました!
https://market.android.com/details?id=jp.iiv.droid.app01
ネットワークのサブネットを計算する簡単なツールですが、まず公開までのプロセスを経験したかったので、シンプルすぎる内容ですがリリースしてみました。
使い方は、IPアドレスを入力して、あとはスライダーでビットマスク値を左右に変化させるだけです。ネットワーク数、ネットワーク開始アドレス、終了アドレスをリアルタイムに計算して表示します。
アプリの公開について、どうしてもiPhoneのときと比べてしまいますが、登録して後、すぐにAndroid Marketで検索して見つかったのには、とても驚きました。こんなに簡単にできてしまっていいのだろうか、と思うくらいです。
Subnetを計算するアプリは他にもたくさんあるようですので、このような簡単なツールを手軽に開発して公開できるというのは、プログラムを作る楽しみを感じますね。Appleのように審査がないためでもありますが、これはこれでいいと思います。
あと開発していて思ったのですが、レイアウトツールがiPhoneにくらべると格段に貧弱ということです。これからの課題だと思いますが、もしこれが改善されれば、さらに簡単にアプリを作ることができるのにと思います。なぜGoogleがこのようなツールを作らないのか不思議なくらいです。
シンプルすぎて恥ずかしいですが、一応スクリーンショットをのせときます。
iPad App : Live Music Coder M^2 OSC
By 5月 4th, 2011, underこのアプリケーションは、UNIXのようなコマンドラインインターフェイスを使って、変数に数列や数式を代入して、音楽を奏でます。
ここでは、アプリのウェプサイトの内容より、より詳しく説明をしていきたいと思います。
こ のアプリでこだわったのは、1ラインでコーディングするルールです。通常のプログラム言語で記述すると、どうしても複数の行で音の演算式を記述することに なりますが、一回のリターンキーでプログラムを記述しリアルタイムに実行するというシンプルなオペレーションにこだわっています。(シンプルなのに複雑な 表現)
1ラインといっても、条件分岐や演算ができます。もちろん不自由なところもありますが、そこに創造性を見いだせないか、というチャレンジする思いもあります。(制限の中の自由)
iPhone版は既にリリースされていますが、機能はOSCを除いてほとんど同じです。
iPhone版との違い
・スクロールする方向が逆
iPhoneでは、小さい画面の中たくさんの情報を表示するために、あえて逆スクロールにしました。使っていただくとその理由がおわかりになると思いますが、データを入力するときはキーボード領域を拡張して、スクロール領域を使えるようにしているからです。
・配列の拡張
1ラインで全ての表現するため、iPadではその領域が広がっています。機能には違いはありません。
・OSC
iPad版では、Open Sound Controlを実装しています。対応したアプル等があれば外部音源等を操作することができます。
・キーボード配列の変更
画面がひろくなった分、キー配置に余裕ができ、より操作がしやすいようにキーを増やしています。機能には違いはありません。
デモムービーの解説
デモムービーでは、a0=x によるランダムミュージックを再生した後、以下のデータを再生しています。
r1=1 1 0 0 5 5 0 0 12 10
r2=1 5 8 0 12 15 18 0
a0=r1+s
b0=a2?>0+12
c0=b3?>0+12
d0=r2
・r1, r2はノート番号の配列を格納する変数で、それぞれ独立して順番に再生してループします。ゼロは無音です。
それ以外の変数は、そのときのTickのノート番号のデータが入ります。
a0,b0,c0,d0 は、サウンドトラックです。4音同時発音できます。
・a=r1+s
配列の音に、スライダーの数値を加えます。(デモではSスライダーを使うのを忘れてました)
・b=a2?>0+12
これは、C言語で言えば、
if(a2 > 0){
a2 += 12;
}
b = a2
となります。a2は、a0の1Tick前の音が入っており、ディレイ音を重ねるときに便利です。
・c=b3?>0+12
bの1Tick遅れの音に、さらに1オクターブの音をたしています。
・d0=r2
配列2の音を重ねます。
デモでは、配列の音を一つずつ削除していってループする音数を減らしてフレーズに変化を出しています。
そして、オリジナルのデータを再生中に再度ロードして、データを復元しています。
App Website : http://iphone.iiv.jp/
iTunes : http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=402178723&mt=8





























