アーカイブ

‘プログラミング’ カテゴリーのアーカイブ

The International Obfuscated C Code Contest – 国際わかりにくいC言語プログラムコンテスト

2010 年 8 月 22 日 kadoppe コメントはありません

(C)
Creative Commons License photo credit: pigpogm

Code Readingという本を読んでいて、「The International Obfuscated C Code Contest」という面白いコンテストの存在を知りました。

どんなコンテスト?

直訳すると「国際わかりにくいC言語プログラムコンテスト」。

コンテストの目的がホームページに掲載されていたので訳してみました。

  • 以下のルールに則って、一番不明瞭でわかりにくいC言語プログラムを書く
  • 皮肉的な方法で、プログラミングスタイルの重要性を示すこと
  • 普通じゃないコードでCコンパイラに負荷をかけること。
  • ある種のC言語の緻密さ・巧妙さを示すこと
  • 残念なC言語プログラムのための議論の場を提供すること

あえて理解しにくいコードを書くことによって、適切なプログラミングスタイルに則ってコードを書くことの重要性を世に広める、ということが主な目的のようです。
(ジョーク的な意味合いも強いのかも)

わかりにくいプログラムって?

具体的にわかりにくいプログラムってどういうものなのでしょうか?

歴代のコンテスト勝者のコードが以下のページからダウンロードできますので、その中から2000年度大会の勝者の一人「Glyn Anderson」さんのコードを例としてあげてみたいと思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
 
char
*T="IeJKLMaYQCE]jbZRskc[SldU^V\\X\\|/_<[<:90!\"$434-./2>]s",
K[3][1000],*F,x,A,*M[2],*J,r[4],*g,N,Y,*Q,W,*k,q,D;X(){r  [r
[r[3]=M[1-(x&1)][*r=W,1],2]=*Q+2,1]=x+1+Y,*g++=((((x&     7)
-1)>>1)-1)?*r:r[x>>3],(++x<*r)&&X();}E(){A||X(x=0,g       =J
),x=7&(*T>>A*3),J[(x[F]-W-x)^A*7]=Q[x&3]^A*(*M)[2         +(
x&1)],g=J+((x[k]-W)^A*7)-A,g[1]=(*M)[*g=M[T+=A            ,1
][x&1],x&1],(A^=1)&&(E(),J+=W);}l(){E(--q&&l              ()
);}B(){*J&&B((D=*J,Q[2]<D&&D<k[1]&&(*g++=1                ),
!(D-W&&D-9&&D-10&&D-13)&&(!*r&&(*g++=0)                   ,*
r=1)||64<D&&D<91&&(*r=0,*g++=D-63)||D                     >=
97&&D<123&&(*r=0,*g++=D-95)||!(D-k[                       3]
)&&(*r=0,*g++=12)||D>k[3]&&D<=k[                          1]
-1&&(*r=0,*g++=D-47),J++));}j(                            ){
putchar(A);}b(){(j(A=(*K)[D*                              W+
r[2]*Y+x]),++x<Y)&&b();}t                                 ()
{(j((b(D=q[g],x=0),A=W)                                   ),
++q<(*(r+1)<Y?*(r+1):                                     Y)
)&&t();}R(){(A=(t(                                        q=
0),'\n'),j(),++r                                          [2
]<N)&&R();}O()                                            {(
j((r[2]=0,R(                                              ))
),r[1]-=q)                                                &&
O(g-=-q)                                                  ;}
C(){(                                                     J=
gets                                                      (K
[1]))&&C((B(g=K[2]),*r=!(!*r&&(*g++=0)),(*r)[r]=g-K[2],g=K[2
],r[
1]&&
O())
);;}
main
(){C
((l(
(J=(
A=0)
[K],
A[M]
=(F=
(k=(
M[!A
]=(Q
=T+(
q=(Y
=(W=
32)-
(N=4
))))
+N)+
2)+7
)+7)
),Y=
N<<(
*r=!
-A))
);;}

うん、まずはきれいに整形することから始めないとですね!
リファクタリングの基本!

まとめ

2006年から2007年にかけて行われた第19回大会を最後に開催されていないみたいですが、完全になくなってしまったわけではなく、今後も開催される可能性がありそうだとのこと。

Code Readingにも書いてありましたが、上記のようなコードをわかりやすくリファクタリングしていくことによって、自分自身のリファクタリング力のトレーニングになりそうですね!

うーん、世の中には面白いことがたくさんあるなぁ。
それでは!

カテゴリー: プログラミング タグ: ,

[Cocoa] NSMutableArrayのインスタンスを”Mutable”なまま複製したいときは”mutableCopy”メソッドを使おう

coo coo
Creative Commons License photo credit: alberthuynhphoto

iPadアプリの開発をしていて少しハマってしまったのでメモ。
最近よくハマるので、どんどんブログ記事にしてまとめていきたいと思います。

問題

NSMutableArrayのインスタンス(つまり変更可能な配列)を複製して、複製先の配列にオブジェクトを挿入しようとしたときのことです。

下記のようなコードを実行すると途中で例外が発生し、プログラムが停止してしまいました。

NSMutableArray* originalArray;
NSMutableArray* duplicatedArray;
 
originalArray = [[NSMutableArray alloc] init];
duplicatedArray = [originalArray copy];
 
[duplicatedArray addObject:@"str"]; // NSInvalidArgumentException

具体的には、最後の行で「duplicatedArrayにはaddObjectなんていうメソッドは存在しないよ」と怒られてしまいます。

duplicatedArrayはNSMutableArrayクラスのインスタンスとして宣言しているはずなのに・・。
どうしてでしょうか?

原因・解決

どうやら、copyメソッドを呼び出してNSMutableArrayクラスのインスタンスを複製しようとした場合、生成されるのはNSArrayクラスのインスタンスになってしまうみたいです。

NSArrayクラスは変更不可能な配列であり、addObjectメソッドは宣言されていないため、先程のような例外が発生してしまいます。

色々調べたところ、NSMutableArrayクラスのインスタンスを”Mutable(変更可能)な状態のまま複製するためには、どうやらcopyメソッドではなくmutableCopyメソッドを使えばいいみたいです。

早速先ほどのコードを以下のように修正してみます。
すると、無事に配列にオブジェクトが追加できることを確認できました。

NSMutableArray* originalArray;
NSMutableArray* duplicatedArray;
 
originalArray = [[NSMutableArray alloc] init];
duplicatedArray = [originalArray mutableCopy]; // copy から mutableCopyに変更
 
[duplicatedArray addObject:@"str"]; // 無事配列にオブジェクトを追加できた。

まとめ

結構些細なことが原因なのに、小一時間このことについて悩まされてしまいました。

ちゃんとリファレンスにしっかり目を通しておかなきゃいけないな、と再確認させられた僕なのでした。。
それでは!

カテゴリー: プログラミング タグ: , , ,

iOS 4とiPhone OS 3.xにおける[UIImage imageNamed]の動作の違い

my iPhone family pile
Creative Commons License photo credit: blakespot

iPhoneアプリを開発していて、少しハマってしまったのでメモ。

UIImageクラスのimageNamedメソッド

指定した名前の画像ファイルを読み込み、UIImageクラスのオブジェクトを生成するためのメソッドです。
このメソッド、OSのバージョンが3.x系かiOS 4かで、微妙に動作が違ってくることがわかりました。

On iOS 4 and later, the name of the file is not required to specify the filename extension. Prior to iOS 4, you must specify the filename extension.
iPhone OS Reference Library : UIImage Class Reference

iPhone OS 3.xまで

iPhone OS 3.xまでは、以下のように拡張子も含めたファイル名を引数としてimageNamedメソッドに渡していました。
拡張子は必ず含めなければなりません。

1
UIImage* image = [UIImage imageNamed:@"face.png"];    // iPhone OS 3.x
iOS 4から

一方、iOS 4では、下記のように拡張子を含めなくても画像を読み込めるように修正されました。
(従来のiPhone OS 3.xの方法もサポートされています。)

1
UIImage* image = [UIImage imageNamed:@"face"];    // iOS 4

何が問題?

せっかく作ったアプリが、OS 3.x系端末で動かない…

「iPhone SDK 4でアプリを開発したけど、iPhone OS 3.x系がインストールされた端末でも動かしたい」
こういう要望・希望もまだまだあるかと思います。

ですが、iPhone SDK 4でコンパイルしたアプリケーションに、上述の拡張子を含めない方法で書かれたコードが含まれていた場合、そのアプリはiPhone OS 3.xがインストールされた端末では動きません。

拡張子ぐらい書こうぜ!

画像ファイルの拡張子なんてピリオドいれて、せいぜい4~5文字程度。
もし、どちらのバージョンでも動作するアプリを作りたい場合は、面倒くさがらずに、きちんと拡張子を含めて画像のファイル名を指定するようにしましょう。

と、自分に強く言い聞かせてみたのでした。。
それでは!

カテゴリー: プログラミング タグ: , ,

MacPorts (Snow Leopard) でPHP 5.2.13をインストールしようとしたらエラー → 一応解決

The Robot compilando unas patatas y friendo un compilador de Haskell, o no sé qué
Creative Commons License photo credit: sporras

※ 2010.6.3 追記
現在は問題なくインストールできるようです。

MacPorts (Snow Leopard)を使ってPHP5.2.13をインストールしようとしたら次のようなエラーが発生してしまいました。

$ sudo port -d install php52 +apache2 +mysql5 +pear
(中略)
Undefined Undefinedsymbols:
   "_zif_setlocale", symbolsreferenced:
from :
"   _zif_setlocale " ,  _basic_functionsreferenced  infrom :basic_functions.o
ld:
symbol  ( s) not found
_basic_functions in basic_functions.o
ld: symbol(s) not found
collect2: collect2: ld returned 1 exit status
ld returned 1 exit status
make: *** [sapi/cli/php] Error 1
make: *** Waiting for unfinished jobs....
make: *** [libs/libphp5.bundle] Error 1

色々調べてみたところ、gettextというパッケージが悪さをしていることが判明しました。

どうやら、gettextのバージョンを0.18から0.17に下げる必要があるみたい。

以下のコマンドを実行し、gettextをダウングレードします。
(参考:【port / MacPorts】古いバージョンのパッケージをインストールする方法 sakatam blog

$ sudo port deactivate gettext
$ cd ~/Downloads
$ svn co -r 30842 http://svn.macports.org/repository/macports/trunk/dports/devel/gettext
$ cd gettext
$ sudo port install

gettextをダウングレードしたので、gettextパッケージに依存しているすべてのパッケージをリビルドする必要があります。

autoconfが依存するgawkというパッケージに関しては、MacPortsでインストールされるのが少し古いバージョンなので、アンインストールしてシステムにデフォルトでインストールされているものが使われるようにします。

$ sudo port deactivate gawk
$ sudo port clean gawk
$ sudo port -n upgrade --force autoconf

他のパッケージもリビルドしていきます。

$ sudo port -n upgrade --force libidn
$ sudo port -n upgrade --force curl

これでインストールの準備は完了、と言いたいところですが、まだしなければいけないことがあります。

このままMacPortsでインストールを実行するとautoconfの部分でエラーが発生してしまうので、手動でautoconfを実行しなければなりません。
MacPortsでインストールしたautoconfを使っていることがエラーの原因なので、システムにデフォルトでインストールされているautoconfを使ってコンフィグレーションファイルを作成します。

$ sudo port clean php52
$ sudo port -d configure php52 +apache2 +mysql5 +pear
$ cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_php52/work/php-5.2.13/
$ sudo autoconf

さらに、手動で./configureも実行してしまいます。

# めちゃくちゃ長いコマンドです。MacPortsによる自動インストールの時に実行されるコマンドと全く同じものです。
# このコマンドはphp52パッケージインストール時に指定するvariantsによって変わってきます。(下の例は僕の場合)
# 実際のコマンドは「port -d configure php52 <variants>  」を実行した時の出力で確認することができます。

$ sudo ./configure --prefix=/opt/local --mandir=/opt/local/share/man --infodir=/opt/local/share/info --with-config-file-path=/opt/local/etc/php5 --with-config-file-scan-dir=/opt/local/var/db/php5 --enable-calendar --with-iconv=/opt/local --enable-exif --enable-ftp --enable-wddx --with-zlib=/opt/local --with-bz2=/opt/local --without-sqlite --without-pdo-sqlite --with-libxml-dir=/opt/local --with-gettext=/opt/local --with-libexpat-dir=/opt/local --with-xmlrpc --enable-soap --enable-bcmath --enable-mbstring --enable-dba --enable-zip --with-openssl=/opt/local --with-mhash=/opt/local --with-mcrypt=/opt/local --with-mime-magic --with-xsl=/opt/local --with-curl=/opt/local --with-pcre-regex=/opt/local --with-gd --with-jpeg-dir=/opt/local --with-png-dir=/opt/local --enable-gd-native-ttf --with-freetype-dir=/opt/local --with-ldap=/usr --with-kerberos=/usr --with-iodbc=/usr --with-apxs2=/opt/local/apache2/bin/apxs --with-mysql=/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_php52/work/mysql5 --with-pdo-mysql=/opt/local/bin/mysql_config5 --with-mysql-sock=/opt/local/var/run/mysql5/mysqld.sock --with-mysqli=/opt/local/bin/mysql_config5 --with-pear=/opt/local/lib/php

これでようやくPHPをインストールする準備が整いました。
以下のコマンドを実行して、PHP 5.2.13をインストールします。

$ sudo port -d install php52 +apache2 +mysql5 +pear
$ sudo cp /opt/local/etc/php5/php.ini-dist /opt/local/etc/php5/php.ini
$ sudo /opt/local/apache2/bin/apxs -a -e -n "php5" /opt/local/apache2/modules/libphp5.so

エラーが表示されなければ、無事インストール完了です。

autoconfのあたりが少々スマートじゃないですが、一時的な対応策ということでよしということにしておきます。
早く、gettextの開発者が対応してくれるといいですね!

それでは!

カテゴリー: プログラミング タグ: , , , ,

HTML5 Hackathon in Kyoto に参加してきました。

2010 年 5 月 19 日 kadoppe コメントはありません

Gabor
Creative Commons License photo credit: AndyArmstrong

京都GTUG主催のHTML5 Hackathon in Kyotoに参加してきました。

一週間に行われたIdeathonの様子はコチラ

チームメンバーのみんなで一丸となって作品作りに取り組んだ結果、最後に行った投票で僕たちの作品は見事9チーム中2位に選ばれました!いえーい!やったぜ!

作ったのはDJが使うターンテーブルのようなWebアプリです。
主な機能として、

  • 二つのレコードが同時に再生できる
  • 再生中はレコードが回転する
  • 音量やミックスのバランスを調整できる
  • スクラッチ機能(マウスドラッグによるレコードの回転、スクラッチ音が鳴る、回転させた分だけ再生位置が戻ったり進んだりする)
  • レコードを交換できる

を実装しました。

僕が参加したチームにはプログラマが一人(僕)しかいなかったので、ちゃんと実装出来るのか、正直少し不安でした。

ですがそんな不安をよそに、チームメンバーがお互いの足りない部分をおぎないながら、上手く作業を分担して作品作りに取り組むことができたので、なんとか完成度の高い作品を作り上げることができました。

本当に良いチームだったと思います。チームメンバーのみなさん、本当にありがとうございました!

さて、Hackathonに参加してよかったと思った点を簡単にまとめてみます。

  • 色んな人のアイデアや作品を見ることでモチベーションが上がった
    ブラウザでVNCクライアント(のようなもの)を作ったチームがいましたが(投票結果1位) 、「すごい!」と思うのと同時に何だか悔しい気持ちになりました。
    「次参加するときは絶対に1位になれるように頑張って勉強するぞ!」と、モチベーションがぐーんと上がりました。
  • JavaScriptがある程度書けるようになった
    今までほぼ書けなかったのでこれは大きな進歩。いいきっかけになりました。
  • 普段のコーディングスピードが上がった
    今まで「当日中に作品を完成させなければならない」ようなシビアな時間制限の中でコーディングをした経験があまりなかったので、とてもいい経験になりました。
    翌日、会社でコーディングをしていると、「あ、俺、速くなってる」と実感することができました。
  • チームメンバーをはじめいろんな人と出会い、いろんな事を話せた
    チームメンバーはもちろん、懇親会でもいろんな人と楽しくお話できました。技術的な話が多く、タメになりました。そろそろ人見知りもマシになってきたかな?

こんな感じでいいことずくめ!
次回も是非参加して、次こそは1位になれるように頑張りたいと、いまから闘争心を燃やしています。

みなさんも一度参加してみてはどうでしょうか?
いい経験になると思いますよ!

それでは!

HTML5 Hackathon in Kyoto 事前ミーティングに参加してきました

2010 年 5 月 9 日 kadoppe コメント 2 件

Our mighty volunteer army
Creative Commons License photo credit: Igal Koshevoy

2010年5月8日に京都リサーチパークで開催された、Kyoto Google Technology User Group(京都GTUG)主催のHTML5勉強会 & HTML5 Hackathon in Kyoto 事前ミーティング(Ideathon)に参加してきました。

Hackathonは、参加者が一日中ひたすらコーディングをし、あるテーマに沿ったソフトウェアを開発するイベントです。
Hackathonにはたいてい開催日前に勉強会とIdeathon(Hackathon当日に何を作るのかを話しあうミーティング)が用意されており、今回僕はそれに参加しました。

参加者は大体40人くらいだったかな?
それだけHTML5って注目されているんですね!

ちなみに僕は今回がHackathon初参加です。
HTML5やJavaScriptに関する知識も、「興味がある」という程度でほとんど持っていないので、若干緊張した気持ちで参加しました。

以下、簡単なレポート。

HTML5勉強会

村岡正和さんによる「HTML5で広がるリッチインターネットアプリケーション開発の未来」というタイトルでの発表。

HTML5で強化される点のうち、RIA開発に関係する部分に焦点をあてて紹介されてました。

RIA開発用にHTML5で追加されたAPIの概要に加えて、それらのAPIを使ったデモサイトも併せて紹介されていたので、聴いていてとても面白かったです。
発表が進むにつれて、僕の中のHTML5に対する期待がどんどん膨らんでいきました。

紹介されていたHTML5のデモのなかでも、一番僕がすごいと感じたのは次のデモ。

動画の周りに、スクリーンの光が周りに反射しているような効果が表示されてます。
なんとこれ、動画の描画情報をリアルタイムにcanvas要素にコピーして、そのcanvas要素を拡大して動画にマスクすることで実現しているみたいなんです!(間違っていたらごめんなさい)

今までのWebにおける動画ってFlashで完結してしまってたけど、HTML5で標準化されることで他のHTML要素との連携が簡単になり、単に「動画を再生する」ということ以上のモノが実現できるんですね!

HTML5の可能性と、その可能性を最大限引き出すためのJavaScriptの必要性を実感することができた勉強会でした。
これだけでも参加してよかった!

Ideathon

勉強会の後はIdeathonです。

まず、参加者が作りたいと思っているものによって大まかにチーム分けが行われました。
あらかじめ9つのグループが用意されていたので、参加者はどれか一つを選択する感じ。
(用意されていたのは、Game, Multimedia, GWT, Tool, Geolocation, Other, Graphic, Network, 入門、だったかな?)

僕はHTML5のオーディオ再生機能を使って「あるモノ」を作りたいと思っていたので、Multimediaチームを選択しました。

個人での開発を基本とするHackathonもあるみたいなんですが、今回のHackathonはGTUGの方針でチーム開発を重視しているそうです。

最初、Multimediaチームは僕1人でどうなることかと不安でしたが、主催者様のお気遣いにより晴れて3人チームを組むことができました。

各チーム30分の議論ののち、みんなの前でアイデアの発表。

どのチームも面白いものを作ろうとしていて、とてもいい刺激になりました。
中には「本当にできるのかなぁ?」というすごいアイデアもあったり(笑)

最後に参加者全員による投票を行い、一番面白かったアイデアを考えたチームには商品が贈呈されていました。

まとめ

今回の勉強会 & Ideathonに参加して、HTML5の可能性も実感することができたし、Hackathonに向けてその周辺技術を習得しなければならない状況に自分を追い込むこともできたので、本当によかったと思います。

何よりIdeathonでの色んな人達の様々なアイデアを聞くことができて、自分のモチベーション向上につながったのが良かったです!

僕たちMultimediaチームのアイデアは投票であまり人気がなかったけど、その下馬評を覆すような作品を作って、みんなの前で発表できるように頑張りたいな。

そのためにはまずHTML5とJavaScriptの勉強をしなければ!

頑張るぞー!!

Cocoa勉強会関西に参加します

2010 年 4 月 22 日 kadoppe コメントはありません

Hot Chocolate and Truffles
Creative Commons License photo credit: Digital Sextant

先日、Cocoa勉強会関西というコミュニティに、メンバーとして参加させていただくことになりました。

Cocoaというのは、Mac OS Xのクライアントアプリケーションや、iPhoneアプリケーションを開発する際に用いるフレームワークです。

仕事で、MacアプリやiPhoneアプリの開発に関わることになったのと、趣味で個人的にiPhoneアプリをリリースしてみたいと思っていたことから、関西でCocoaを扱っている勉強会をWebを探していたのですが、僕の求めているコミュニティとほぼドンピシャなところが見つかりました。

Cocoa勉強会関西は、関西で活動しているIT勉強会の中では比較的昔から存在するコミュニティです。二ヶ月に一度開催される例会はすでに32回も開催されています。

まずは見学からということで、2010年4月3日に開催された例会を見学させていただきました。見学した結果、Xcodeを使った開発やiPhoneアプリを開発する時に役立ちそうな濃い内容の発表をたくさん聞く事ができたので、今後もこの勉強会に参加させていただくことに決めました。

まだまだCocoa初心者な僕ですが、ゆくゆくは自分も発表者として他の参加者のみなさんにとって役に立つような発表ができるように、頑張って勉強していきたいと思います。仕事ももっとサクサクできるようになりたいですしね!

今後ともどうぞよろしくお願いいたします。

[Java] StringBuilderとStringBufferの速度差

Riflessi

Javaには、変更可能な文字列を表すクラスとして、StringBuilderとSringBufferの2種類のクラスが存在しています。

StringBuilderは非スレッドセーフ、StringBufferはスレッドセーフ、その分StringBuilderの方がStringBufferより動作速度が速い、という点が二つのクラス間の大きな違いのようです。

いったいどれくらい速いのか、ということについて気になったので、以下のコードを実行して調べてみました。StringBuilderとStringBufferを用いて”Hello, world!”という文字列を100万回結合し、その所要時間を計測しています。

ちなみに、環境はMac OS X 10.6 + JDK5です。

StringBuilder実験用コード

public class StringBuilderTest {
     public static void main(String[] args) {
          StringBuilder sb = new StringBuilder();
          long start = System.currentTimeMillis();
          for (int i = 0; i < 1000000; i++) {
               sb.append("Hello, world!");
          }
          long end = System.currentTimeMillis();

          System.out.println("required time: " + (end - start));
     }
}

StringBuffer実験用コード

public class StringBufferTest {
     public static void main(String[] args) {
          StringBuffer sb = new StringBuffer();
          long start = System.currentTimeMillis();
          for (int i = 0; i < 1000000; i++) {
               sb.append("Hello, world!");
          }
          long end = System.currentTimeMillis();

          System.out.println("required time: " + (end - start));
     }
}

結果

上記のプログラムを10回ずつ実行し、所要時間の平均値を計算したところ、結果は以下のようになりました。

  • StringBuilder:平均132.6 msec
  • StringBuffer:平均170.7 msec

StringBuilderはStringBufferの約78%の時間で処理を完了出来ていることがわかります。

Javaプログラマからすれば常識のようなのですが、上記の結果からもマルチスレッドからの文字列操作を行わない場合は、基本的にStringBuilderを使うのがよい、ということが言えそうです。一つ勉強になりました。

カテゴリー: プログラミング タグ: ,

「休日Webアプリクリエイターズ(仮)」のようなコミュニティを作りたい or 参加したい

2010 年 2 月 11 日 kadoppe コメントはありません

48 hour challenge, second day

このところ、新しいWebアプリのアイデア創出、開発、公開、運営を、本業(仕事 or 学業)とは別にメンバー各人が休日に行えるようなコミュニティがあればいいのに、と考えるようになりました。

僕としては、以下の項目に該当するような人たちが集まっていて、自分が出来る範囲で活動にコミットできるようなゆるい感じのコミュニティをイメージしています。

  • Webアプリのアイデアが持っている、けど一人で作れるかどうか不安。
  • プログラミングがしたい、けど作りたいもののアイデアが特にあるわけではない。
  • オープンソースプロジェクトに参加するのはまだ少し敷居が高く感じる。

それを仕事とするのではなく、あくまで趣味の範囲での活動です。起業とも関係ありません。

Twitter上で色々な方とお話していると、作りたいWebアプリのアイデアがポッと湧き出てくることがあります。そういうアイデアをTwitter上でゆるい感じで知り合った皆さんと協力して具現化できるような枠組みがあれば面白そうだ!とふと思ったのが、今回の件を考え始めたきっかけです。

「ある特定の場所に住んでいる人」のように限定されたコミュニティである必要はないと思っています。たとえ離れていても、必要なミーティングはSkypeなどを用いてビデオでもチャットでも行うことができますし、開発もきっとできるはず?

とまぁ、ものすごく漠然としているのですが、僕が今考えていることはこんな感じです。

もし、すでに同じコンセプトで活動されているコミュニティがあればどうか入れてください。まだ、そういうコンセプトのコミュニティがないのであれば、頑張って作ってみたいと思います。

「そんなコミュニティいらねぇよ」「一緒にやってみたい」「こんなコミュニティがあるよ」など、コメント・ツッコミ等いただけると幸いです。

どうぞ、よろしくお願いいたします。

カテゴリー: プログラミング タグ:

[PHP] 現在のUnixタイムスタンプをマイクロ秒単位で取得する方法

2010 年 2 月 10 日 kadoppe コメントはありません

PHPで現在のUnixタイムスタンプをマイクロ秒単位で取得したい時は、microtime()関数を使うとよいそうです。最初、どうすればよいかわからなかったので一応メモしておきます。

使い方は以下の通り。

$time = microtime(true);
echo $time;    // output: "1265774277.5366"

引数に「true」を渡すことで戻り値がfloat型になります。

引数に何も渡さない場合 、または「false」を渡した場合は、以下のようにマイクロ秒とUnixタイムスタンプをスペースで区切った文字列が出力されるので注意が必要です。

$time = microtime();
echo $time; // output: "0.53658800 1265774277"
カテゴリー: プログラミング タグ: ,