2012年10月31日水曜日

Windows phone 8 SDKをインストール中に再起動にてフリーズする問題

Windows phone 8が正式に発表され、SDKがリリースされました。

インストール中に再起動を要求されるのですが、そこで問題が発生しました。

問題点

インストールの際に命じられう通り、再起動をしたらWindowsが立ち上がらなくなる。


なぜ問題が起きるか

Twitterなどで検索をかけると、一人該当していましたが、解決策は書かれていませんでした。

少し調べていると、どうやらGigabyteのマザーボードに問題があるらしい。

windows phone 8 SDKは、エミュレータでhyper-Vを利用する。

再起動の直前でhyper-Vについて聞いてくる

ここで問題が発生するようである。

Microsoftのサポートページにも書かれている。

Boot failure after installation of Hyper-V role on Gigabyte systems

解決策

上記ページに書かれている通りである。

BIOSを立ち上げ、USB3.0を切る。つまり、EnableをDisableへと切り替えてあげる。

なお、注意点としては、USB3.0のポートに指している物が使えなくなります。キーボード・マウスなどを繋げている場合は、再起動後に使えなくなります。

私はここで詰まりました。

ちなみに使っているマザーボードは、Z68A-D3H-B3です。

以下のやり方で、USB3.0を切れます。

  1. GIGABYTEロゴにて、Deleteを押す
  2. Integrated Peripheralsを選択
  3. Onboard USB 3.0 Controllerを選択
  4. Enabledを選択し、Disableに切り替えます
  5. Save & Exit setupを選択

これにて再起動より前に進むことが出来ます。

Gigabyteめ・・・

2012年9月5日水曜日

直書きした電話番号がIEなどで、Skypeのアドオンにより変更されデザインが崩れる問題

Skypeをインストールした環境でInternet Explorer(IE)にて、電話番号っぽい数字があるところを見ると以下のように見える。

SkypeのIEアドオンであるSkype Click to Callがお節介をしているらしい

電話番号:◯◯-◯◯◯-◯◯◯と変更されるアイコンと同じぐらいのサイズならば特に悪さをしない。

しかし、例えば通販サイトなどページ上部にデザインとして目立たせる為、フォントサイズ40などで電話番号を書いていた場合でも勝手に判断され小さくなる。

最悪、デザインが崩れてしまう。

訪問してくれるユーザがIEのアドオンをオフにしてくれれば回避できるが、全員がしてくれるわけではない。

手っ取り早い解決策は画像にすることであるが、今回はそれ以外の制作側が行える解決策について、 こちらに書かれていました。

方法1:空白タグで解決


­ 空白タグ

を利用します。以下のように使います。


<span>08&shy;-000-111</span>

同一ページ内にたくさん電話番号がある際などは、これだと面倒だと思います。

そこで、一発で解決できる方法も記しておきます。

方法2:Metaタグを使う方法


<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />

これをHeadに記してください。この命令により、Skypeアドオンはページ内の電話番号を全て無視します。


以上で解決です。めでたしめでたし

Windows8の標準のModern(Metro)UI AppにてProxyが通らない問題

Windows8正式版をMSDNにて取得し、インストールしてみました。

全体的に使いづらいのですが、Proxyがある環境でWindows8の売りでもあるModern Appがネットに繋がらないという問題がありました。(Modern アプリのIEは接続可能。ニュースや天気予報などが接続不可)

恐らくデスクトップでは右下、Modernでは右に出てくるネットワークの様子が以下の写真のように制限ありになっていると思います。

そこで、直し方についてです

IEのProxyをWinHTTPに適用させる

microsoftのフォーラムにて凄く議論されていました。

windows8ではデフォルトでは、IEのインターネットオプションから設定したproxyがWinHTTPに適用されません。ModernUIアプリはココを見に行っているようです。

なので、コマンドプロンプトからWinHTTPのプロキシを明示的に適用したいと思います。

まぁコマンドプロンプトが何処にあるかで五分ぐらい悩みましたが…

  1. IEのインターネットオプションからいつも通りproxyを設定する
  2. Modernアプリのタイル画面に戻ります。
  3. 何も無いところで右クリック
  4. 下から出てきたバーの右下に全てのアプリとあるはずなのでクリック
  5. 遷移した画面先でWindowsシステムツールにあるコマンドプロンプトを探します
  6. さらに右クリックをし、管理者として実行を選択

次に、適用させるためのコマンドを打ち込みます


netsh
winhttp
import proxy source=ie

これで一応再起動を行うと、Modernアプリでも使えるネットが使えるようになるはずです。

また、ネットワークの状態も正常になると思います。

一応、WinHTTPのproxyをデフォルトからリセットする方法も書いておきます。


netsh
winhttp
reset proxy

蛇足ですが、他にも・・・

netsh winhttp show proxy 現在のproxyの設定を確かめる

netsh winhttp set proxy proxy-server="プロキシサーバ名:ポート番号" bypass-list="バイパスリスト" proxyを設定する(バイパスリストはプロキシを使用しないアドレスで、;で区切ります)

Windows8は、使いづらいです。しかし、7までの小さなスタートメニューでアプリを探すより、全画面使って探させてくれる所がいいなぁーって感じています。

どうやって電源切るのか分からないとか、明らかにやりたいことに対してクリックの回数が増えているとか、ウィンドウが四角いとか退化した箇所が多いですが…

2012年7月30日月曜日

Mountain Lionにおいてphpが使えなくなる問題

前回、Mountain LionにアップデートすることによるWeb共有の消滅について書いた。

確認の際に拡張子htmlのページしか確認しておらず、拡張子phpについては全く意識していなかった。

phpのページを開いたところ、ソースが全文表示され驚いた。

セキュリティ的な問題でWeb共有を消したんだろうが逆にソース丸見えになっていたとは…

で!

phpを再度利用するための解決方法

コンソールを立ち上げ、apacheの設定ファイルであるhttpd.confを書き換えます。

sudo vim /etc/apache2/httpd.conf

モジュール読み込みの箇所までスクロール、もしくは検索をします。

#LoadModule php5_module libexec/apache2/libphp5.so のコメントアウトを外します。(#を外します)

これで上手く行くだろうと、Apacheを再起動するが今度は何も見えない。

そうですphp.iniも問答無用で消滅しています。

php.iniの復活

cd /etc/phpに移動、lsコマンドでファイル一覧を見てみます。

php.ini-5.2-previous おそらくこれはアップデート前Lion時のphp.iniのバックアップファイル

php.ini.default こちらは、php.iniの純粋なバックアップ

自分は特にデフォルトから変えていないのでどちらでも良いです。

sudo cp /etc/php.ini-5.2-previous /etc/php.ini

これでphp.iniという名前でコピーが生成されます。

最後に、chmod +w /etc/php.iniとし書き込み権限を渡します。

ls -l /etc/php.iniとすることで、権限を確認。

-rw-r--r--

Apacheを再起動させます。

apachectl restart

phpのページを開けば、動作していると思います。

2012年7月27日金曜日

Mountain LionにおけるWeb共有の消滅と403 Forbiddenの解決策

Mountain Lionがとても良いです。

しかし、Web共有がシステム環境設定の共有より消えました。

何もしなくても、Web系の開発が楽なのがMacの良い所でもあったのに、これだと困る。

しかし、Apacheは標準で搭載されているようで、ターミナルにて

sudo apachectl stop でWeb共有の停止(Apache停止)

sudo apachectl restart でApache 再起動

sudo apachectl start でWeb共有の開始(Apache起動)ができます。

ワ─イ♪└┤*´∀`*├┘ワ─イ♪と思ったのもつかの間、ページが見られない。

Lionまでは、Web共有のスイッチを入に変え、

http://localhost/~USERNAME/

にアクセスすると/Users/USERNAME/Sites/にあるファイルへアクセスが出来ていました。

しかし、Mountain Lion(10.8)で、http://localhost/~USERNAME/にアクセスすると、

Forbidden
You don't have permission to access

と出てくる。

403エラー。つまりは、てめぇには権限が無いから見せねえよ!っていうエラーです。

解決方法

解決方法ですが、ココに書いてありました。

ターミナルを開いて、以下のアドレスのファイルを製作(もしくは変更)します。

sudo vim /etc/apache2/users/USERNAME.conf

(USERNAMEは変更してください。vimが無い場合は他のエディタで)


<Directory "/Users/USERNAME/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

と書いてください。(USERNAMEは、各自自分のに変更)

ちなみに空白はタブキーで入れないでくださいね。

このあと、Apacheを再起動すれば終わり。コンソールにて、

apachectl restart

これで解決。

追記で、phpも消滅していたので書きました。

Mountain Lionにおいてphpが使えなくなる問題

2012年4月7日土曜日

Mac搭載のApacheが再起動しない

Mac OS Lionにての話
標準で搭載されているApacheを再起動しようと,
りんごマーク->システム環境設定->共有->Web共有
を開き,チェックをオフにし再度オンにしようとするが,印を入れても,すぐにオフになってしまう.

さっきまで動いていたじゃーんって思うが,なぜか上手く動かない.
ターミナルを開いて,
apachectl configtest
これで,https.confの文法などを調べることが出来る.
httpd: Could not reliably determine the server's fully qualified domain name, using **********-no-MacbookAir.local for ServerName
Syntax OK
文法はあっているが,問題は
httpd: Could not reliably determine the server's fully qualified domain name
ですね.

対策です.
vim /etc/apache2/https.conf
を開く.
Vimは /文字列 が検索として使えるコマンドのため
/ServerName
として検索
#ServerName ドメイン:ポート番号
となっている部分のコメントアウトを外し,
ServerName localhost:80
また,下の
DocumentRoot 以下のパスをファイルが置いてあるフォルダに変更しました.

これによって,ちゃんとオンにすることが出来ました.

なんで前まで動いていたのだろうか・・・.

2012年2月27日月曜日

Pandaboard ESを買ってみた(入れたのは、Ubuntu11.10)

Pandaboard ESを買ってみました。
前から興味あったのですが、お金の問題で買えなかったのを、問題解決していないのに衝動買い。

購入先は、みんな大好きDigi-Keyです。
2月15日辺りに注文を入れたのですが、在庫が無く待つことになりました。
2月24日に無事アメリカから出荷したぜ!っていうメールを受け取り以下のような感じで自宅に届きました。
2/23 UPSがDigikeyから受け取り
2/25 成田空港着
土日の為、27日の午前に家へヤマト運輸が届けてくれた


次に簡単なセットアップのメモを残しておきます。

まず物理的に必要なモノ
Pandaboard ESは、本当に本体しか入っていません。
電源: 2.1mmプラグの5V ACアダプタ (私は3Aタイプ買いました。秋月で750円。友達がバイトしてた。)(追記4Aに変えました。安定しなかった・・・)
HDMI-DVIコネクタ:1680円(九十九電機。めんどくさくて多少高くても良いから九十九で買っちゃった。)
SDカード:4G以上必要らしいです。16G購入(KINGMAX CLASS10で1500円ぐらい。)(追記 KINGMAXから東芝8Gに変えました。これまた安定しなかった・・・)
SDカードリーダ:あきばおー400円 42種類書き込めるらしい。SD以外用ない。
USBキーボード、マウスは家にあったのを使った。
画面:床に転がっていたのを使った。

次にOSの書き込み
Ubuntu走らすか、Android 4.0走らすか悩んだのですが、とりあえずUbuntuの環境が欲しかったので、Ubuntuを走らせて見ることにしました。

ここを読むとPandaboardのテストとか出来るらしいですが、めんどくさいのでパス。
壊れていても、泣かない!

OSは、ARM(OMAP4)対応のものを落としてきます。

1. PandaBoard Prebuilt Ubuntu binaries
2. Ubuntu 11.10 Release の Texas Instruments OMAP4 preinstall desktop image

どちらか好きな方で・・・。

私はMacにてVM ware Fusionを使い、その上で走らせたUbuntu上で書き込みました。
パソコンにSDカードリーダを挿し込み、SDカードを挿入。
オートマウントされると思うので、
ターミナルよりdfと打ち込む。
現在マウントされている奴一覧が出てくると思います。(dmesgでも良いかも)

/dev/sde1     ******   ********  1%  *******とか出てくると思うので。*は数字でsdeとかは環境により違う。

SDカードだと思うものをアンマウントします。

sudo umount /dev/sde1

ダウンロードしたファイル(ubuntu-11.10-preinstalled-desktop-armel+omap4.img.gz)が置かれている箇所にて、

gzip -d -c ubuntu-11.10-preinstalled-desktop-armel+omap4.img.gz | sudo dd bs=4M of=/dev/sde
展開してSDの箇所に突っ込みます。なので、/dev/sdeは環境により変化します。

早ければ5分ぐらいで終わると思います。

ここでパソコンの出番は終わりです。

PandaboardにSDカードを差す。
キーボードやらディスプレイやらマウスやらを全部つける。
そして5Vのプラグを挿すと起動します。

しばらくすると、私の環境ではペンギンが二匹出てきて、Ubuntu起動、領域作成、チェック、ウィザード起動とプロセスが進んで行きました。
放置で大丈夫です・・・。


一度、書き込んだイメージが壊れていたらしく、領域作成の段階でエラーを吐きました。
PCに差してフォーマットかけてみたら、70MBの空き容量のSDカードが登場して焦った。
このような自体に陥った際は、SDカードに作られたパーテーションを壊してください。Macでしたら、ディスクユーティリティから消せます。
二度フォーマットかけて再挑戦しています。
手順は毎回同じなので、何が原因かは良くわかりません・・・。

とりあえず、上手く行ったので遊びたいと思います。


追記、
電源とSDカードを変えました。よくファイルシステムがぶっ壊れて使い物にならなくなるので・・・。
公式ページを読んでいると、5V4A以上が推奨であり、また何となくSDカードを東芝製に変えました。
使っていて思ったのですが、日本語環境に直すと変になることが多い気がします。
英語でも別に支障ないので、英語で使うことにしていますが・・・。
また、よく壊れる原因として、SDカードに書きこむ際に失敗している事が多いみたいです。
何度もリブートを繰り返したり、インストール段階で先に進めないなどの場合は再度SDをフォーマットして最初からやり直すとうまく行きます。

2012年2月24日金曜日

GO FOR IT

目を疑った、エンジニアが話したいと思っている優秀者に自分の名前があった。
3問解いたが、1問目に関してはmozcのソースからBSDライセンスの文をパクった為に、
送った時点では製作者にgoogle inc.と入っていた。さらに、GO FOR ITでなくGOF FOR ITというGang of for for itという誤字のまま送ってしまった。また、徹夜明けにやったため文章は支離滅裂、UMLに関しても間違えている。(UMLとSysML組み合わせな感じになっちゃっているけど)
テストケースを書いて、いろいろバグが無いか試していたが提出直前にバグが見つかり応急処置で出したプログラムであった。

2問目に関しては、これは知っていたから数式をバラして書いた。何も悩まなかった。WolframalphaとGoogleで答えを確かめ終えた。

3問目に関しては、綺麗なコードって何だろうと思いながら、C++で下手に長いプログラムを書いた。急用が重なり提出まで時間がなかったため、普段は使わないSTLを組み合わせて課題を終わらせた。3問目に関して一番悩んだ事は、30万語が正しく展開されているかをメモ帳で確認すると横幅が足りない。秀丸でやっても足りない。何しているんだろうって思いながら確認していた。しかも、小問2で書いた高速化にいたっては、予想はしていたが最初の方が早いという何とも言えない感じになってしまった。

4、5問目に関しては、4は音楽のトラウマが蘇ったけど、5に関しては解きたかった。

このGO FOR ITを通じて、自分に色々と足りない所も分かった。それに他の優秀者のハンドルネームからブログをググってみると、python使って凄く短い尊敬できるプログラムを書いている方々が多く世の中の広さを知った。あと、自分がなぜ優秀者に名前があるのか分からないなと思った。電気工学出身で、プログラムはマイコン周りの知識の延長線という感じですし。
しかし、エンターテインメント系やら最近で言うとメディカル系にも手を出しているソニーのエンジニアと話せる機会が与えられた事はありがたいです。Smart ARをソニービルで公開していたときに話したエンジニア(デザイナ?)の人も知識と人生経験豊富で、ソニーのCVに関する歴史の話が凄く面白く、今でも参考になっています。(お名前も知らないのですが・・・)

こんな機会を設けて貰い、どうもありがとうございました。
エンジニアだけでなく、他の方々にも会える(?)ことを楽しみにしています。
あとプログラミングコンテストって面白いね!

2012年2月23日木曜日

C言語と動的ローディングのメモ

.soファイルの作り方をメモしておく。
時々忘れて、汚いファイル群から検索するはめになるので・・・。
環境は、Ubuntu 10.04、CMake、gccですよ。
.soはshared objectの略である。
pythonとC++の連携などで必要になるらしいので・・・。(私は、Pythonは趣味以下のレベル)

共有ライブラリファイル(.so)の作り方
適当にプログラムを書く

(sampleSo.c)
#include
void function1()
{
  printf("function1\n");
}
void function2(int i)
{
  printf("%d function2\n",i);
}

(CMakeLists.txt)

cmake_minimum_required (VERSION 2.6)
project (sampleSo)
add_library(sampleSo SHARED sampleSo.c)

重要なのはCMakeLists.txtだけですけど・・・。

ビルドのための簡単なコマンドは、
cmake .
make -f Makefile

これで、libsampleSo.soというファイルが生成されるはずです。
とりあえずは、ここまでで良いと思いますよ。

以降は、これをCで使う場合です。

(main.c)
#include //動的ローディングのためのヘッダ
int main()
{
  int tmpValue = 5;
  void* handle = dlopen("./libsampleSo.so",RTLD_NOW);
  void (*func)() = dlsym(handle,"function1");  //関数ポインタ
  void (*func2)(int) = dlsym(handle,"function2");  //引数あり
  (*func)();
  (*func2)(tmpValue);
  dlclose(handle);
  return 0;
}

次に新たにCMakeファイルを書く
(CMakeLists.txt)
cmake_minimum_required (VERSION 2.6)

project (main)
SET(CMAKE_C_FLAGS "-ldl")
add_executable(main main.c)

ビルドはおなじみ
cmake .
make

実行させてみると
function1
5 function2
と出ているはず。
とりあえず、こんな感じ。


2012年2月17日金曜日

Tortoise hgとMercurialでバージョントラブル

去年の記事でTortoise hgをubuntu10.04で使うとか書いてあったのですが,
パッケージ管理ppaだけだと,mercurialとtortoise hgでバージョンの違いから問題が発生するということが身の回りで起きていた.
つまりは,mercurialのバージョンを2.1に確かめずに上げると,tortoise hg 2.2はmecurial 1.9〜2.0までで動作するので動かずバグ報告を出してしまう.(tortoise hgは,当時は2.2だったため,2/17の時点でもppaには含まれていなかった)

自分も少し前に体験したので,解決策は知っていたけどメモっていなく迷ったから同じ間違いをしないようにメモ.

1)tortoise hgをソースからインストール
tortoise hg->Download http://tortoisehg.bitbucket.org/ja/download/index.htmlからソースを落とす.
フォルダを解凍し(tar xvzf ファイル名) pythonなので,
python setup.py build
sudo python setup.py install
これでパッケージ化されていない最新版が手に入ります.
tortoise hg 2.3はmercurial 2.1で動作可能です.

2)mercurialやらtortoise hgをバージョン指定してインストール
1の方が楽です.
apt-cache showpkg パッケージ名
バージョンがズラッと出てきます.
apt-get install パッケージ名=バージョン名
これで好きなバージョンが入れられます.
なるべく最新を使ったほうが良いと思うけど.

2012年2月13日月曜日

SONY GO FOR IT 3問目:暗号検索の高速化

1)問題文



文字列の中に現代の出来事が暗号化されているという、映画や書籍が話題になりました。この暗号は、文字列を特定のスキップ数ごとに改行を入れて折り返すと、関連のある文字列が近い距離に配置されるというものです。
たとえば、r=16、i=0を初期値として、下記を300000回繰り返して生成した、’a’から’z‘までの文字をランダムに含むアスキー文字列rand_str[]には、先頭208728文字目から4162文字スキップで"sony"の文字列が存在します。


r ← ( r * 1103515245 + 12345 ) & 0xFFFFFFFF
rand_str[i] ← 0x61 + ( 26 * ( r / 0x10000) ) / 0x10000
i ← i + 1


この文字列を4162文字ごとに改行を入れて折り返し、"sony"の文字列が中央付近に配置されるように、19桁10行の範囲を抜き出すと、下記のようなマトリクスが得られます。
--省略--

このマトリクスには、"alpha"の文字列が等距離スキップで存在し"sony"の文字列と近い距離にあります。この暗号では最小スキップの文字列が重要な意味をもち、2文字以上のキーワードがランダム文字列中のどこにあるかを最小スキップ順に高速に求めたいと思っています。


なお、高速実行可能であれば使用プログラミング言語や入出力仕様は問いません。たとえば、キーワードをコマンドラインで指定し、ランダム文字列を標準入力から得て、スキップ数と位置をカンマで区切ったものを改行し、標準出力するようなプログラムを作成してください。


・ スキップ数が短い順に出力してください。
・ スキップ数が同じ場合は、ランダム文字列先頭に近いものから出力してください。
・ キーワード文字列が逆順にマッチした場合も出力してください。


※ たとえば前述のランダム文字列から、"sony"の逆順の"ynos"を探す場合には、「4162,208728」が出力されるようにしてください。 


2)解き方
例えばSONYであれば、Sを見つけその位置を記録、次にOを見つける、そして2つの差分×2と3でNとYに辿りつけたら、それは等距離スキップということになる。
それをC++を用いて記した。
また、2つ目の解き方として、SONYならば、(S+Y)%3 = 0であるとき、(S+Y)/3 = 距離スキップ。これを用いて、S、S+等距離スキップ、S+等距離スキップ*2・・・・とやれば上記より早く出来るのではないかと考えた。結果として一つ目の方が早かったんだけどね。


3)ライセンス
BSDライセンス


4)ソースファイル
1つ目・・・)main(ソース) 検索部分クラス(ヘッダソース) ランダム文字列作成クラス(ヘッダソース)
2つ目・・・)main(ソース) 検索部分クラス(ヘッダソース) ランダム文字列作成クラス(ヘッダソース)

2012年2月8日水曜日

SONY GO FOR IT 2問目:実数の階乗

1)問題文


ある検索サイトに5!と入力するとその計算結果である120が表示されます。
その検索サイトに2.5!と入力するとなんと3.32335097と表示されます。
さらにその検索サイトに(-1.9)!と入力すると-10.5705641と表示されます。
きっとそれらの仕組みはとても難しくて企業秘密に違いないので是非ともこれらを実行するプログラムを作ってほしい。
ただし、君のPCは古いのでネットワークや便利で高度な数学関数は入っていません。
入っている数学関数はsin,cos,tan,log,pow,floorなどの初歩的な関数のみです、残念ながら。
                                                                                                                              
i)入力された整数a(0<=a<=10)の階乗を求めるプログラムを作ってください。
ii)入力された実数a(0<=a<=10)の階乗を求めるプログラムを作ってください。
iii)入力された実数a(-1.9<=a<=-1.1)の階乗を求めるプログラムを作ってください。

2)解き方
ガンマ関数使います。上手く関数が動いているかの答え合わせはグーグルに聞くと良いでしょう。
-の時は(-1.6)!としないと私みたいに頭抱えます・・・。
ガンマ関数と、対数ガンマ関数を用いて計算を行います。
また、マイナスの際は、サイン関数とガンマ関数の関係式から変換をしてください。

3)疑問点
 特に無いです。カッコ付けずにグーグルに質問して焦っていたぐらいです。
ガンマ関数のいい勉強になりました。

4)苦労したところ
 式が汚い。カッコが多くなってしまって、何処が何処を優先しているか分かりづらくなってしまったが動いたから放置している。これはマズイと思う。

5)ライセンス
 BSDラインセンス

6)出力ファイル
1)入力された整数a(0<=a<=10)の階上
5を入力
120
2)入力された実数a(0<=a<=10)の階上
4.5を入力
52.3427777845535
3)入力された実数a(0<=a<=10)の階上
11.5を入力
範囲外
4)入力された実数a(-1.9<=a<=-1.1)の階上
-1.8を入力
-5.7385546399985
5)入力された実数a(-1.9<=a<=-1.1)の階上
-1.45を入力
-3.5913872638524

7)ソースファイル
今回は短いだろうってことで、一個のファイルにまとめた。
プログラム
ソースなんですが、return 0付け忘れています。
テストコードを消した際に一緒に消しちゃったっぽいですよん。

SONY GO FOR IT 1問目:人生の時計

問題文
1)人生の時計


あなたの一生を24時間にたとえると今日は何時何分何秒ですか?
ただしあなたはあなたの誕生日(a年b月c日)の0時ちょうどに生まれてn歳まで生きる(n歳のときは生きていてn+1歳にはなれない)とし、bとcは一般的な月日の範囲とします。
i) 1990<=a & a<=2000,n=80のとき、今日は何時何分何秒ですか?
ii)  1900<=a & a<=2000 ,n=200のとき、今日は何時何分何秒ですか?

2)解き方
C++を利用して解いた。
有名なヘッダファイルであるctimeは、Unix時間という制約がかかるため、tm構造体だけを利用した。
(死ぬ時間 - 生年月日) : (現在時刻 - 生年月日) = 24時間 (24*60*60秒) : x時間
であり、このx時間を求めれば良い。

3)疑問点
n歳まで生きる(n歳のときは生きていてn+1歳にはなれない)
これは、死ぬのが誕生日前日の23時59分59秒でいいのだろうか。
どこで区切れば良いのか分からなかった為に死ぬ日を設定出来るというメンバ関数を用意した。
ただし、本問題中では前日であると判断したので出力ファイルには書かれていない。

4)苦労した点
Unix時間のことを忘れていた。
i)しか見ていなかった為、問題無いだろうと判断してしまった。
この為、ソースが汚くなってしまった。
また、日付計算関数などを自分で用意するという事になってしまった。

5)ライセンス
BSDライセンス *最初の頃に載せていたソースにあったライセンスは、Google IncのMozcからコピーさせてもらったもので、Google Incとか書かれていたけど、何も関係ないです。ごめんなさい。

6)出力ファイル


i)1990<=a<=2000,n=80
Input
        Birth Day:1994/12/3
        Death Age:80<2075/12/2>
Output
        5:5:30
Input
        Birth Day:1995/1/1
        Death Age:80<2075/12/31>
Output
        5:4:5
Input
        Birth Day:1998/7/31
        Death Age:80<2079/7/30>
Output
        4:0:28


ii)1900<=a<=2000,n=200
Input
        Birth Day:1946/5/7
        Death Age:200<2147/5/6>
Output
        7:51:7
Input
        Birth Day:1979/7/1
        Death Age:200<2180/6/31>
Output
        3:53:37

1946年はソニー創業日らしい、1979年7月1日はウォークマンの日らしい、1994年12月3日はプレステの日らしい

7)ソースファイル
クラス(ヘッダソース)
メイン(ソース)


#追記 2/8バグ修正した

2012年2月5日日曜日

入力ソースからUSのチェックが外せない

容量も増えて凄く調子が良いMacbookですが、入力環境がデフォルトのことえりは使いづらく、ATOKはWindows版しか持っていません。
そこでUbuntuでもMozcでお世話になる、GoogleIMEの出番です。
しかし、Google IMEを入れたあとに何故か入力ソースのUSが消えないという状態になってしまった。(チェックボックスがUnenable状態で選択できない)

これはMacOSがGoogle IMEの存在を無視して、USを外すことによって一つも入力ソースが無い状態になってしまうという誤認識だったっぽい。
とりあえず、「ことえり」にチェックを入れる、また「ことえり」の設定であるカタカナや英数字にもチェックを入れておく。
すると、入力ソースに「ことえり」があると認識されるので、USのチェックが外せるようになる。
ここで、USとおさらばする。
その後、ことえりもチェック外すとGoogle IMEだけになった。

めでたしめでたし。

Macbook air SSD(2011 Mid)換装から再インストール

Macbook air(2011 Mid)を128GBのSSDで使っていたが、容量が足らなくなってきた。
そこで、Yahooオークションにて公式でも使われているサムスン製256GB SSDを21,500円で購入しました。
これはそのメモ。
まず裏を向けて、ネジを外す。ドライバはSSDセットについてきたが、五角形(ペンタローブ)用ドライバ、サイズ1.2を使う。
ヒンジ部分だけ長いネジが2本存在し、残りの短いネジと合わせて10本。無くしたら秋葉原で購入できるがメンドクサイので、ちゃんと管理をしておく。
初めて開ける際は固いですが、ヒンジの部分から上手いこと外してください。
自分の場合はパキッと言いましたが、平気でした。
開くと以下のような中身が見えます。


次に、電池類上部にあるSSDを抜き取ります。
T4のトルクスドライバでネジが外れました。
(他の解説ページ見ているとバッテリーとマザーボードの電源を抜かないと駄目らしい・・・)
SSDは、周りの素子を傷つけないように慎重に抜き取ってください。(東芝製だった)
交換後、同じ手順を踏んで元に戻してハードウェアに関しては終わりです。


次にOS X Lionを再インストールします。

起動と同時に、command+R 暫く待つと選択画面が現れます。
ディスクユーティリティを選択し、フォーマットかけましょう。
私の場合は、251GB APPLE SSD SM256C Mediaと認識されました。
これを選択し、消去
フォーマット:Mac OS拡張(ジャーナリング)
名前:Macintosh SSD (名前は何でもイイはず、あとからファイルの名前を変えるのと同じ要領で変えれます)

SSDのおかげか速攻でフォーマットが終わります。
ディスクユーティリティを終了し、画面右上の無線LANが繋がっているか確かめる(プロキシが必要な環境は、プロキシの設定できないので外部に出れずOSインストールできません)

そしてMac OS Xを再インストール
あとはウィザードに従ってノンビリ待つだけ。
途中バックアップしたOSのイメージとかがあればウィザードにしたがい復元できます。
これで終わります。

2012年1月27日金曜日

AutotoolsetのUbuntuでのメモ(C言語)


Makefileの自動生成で基本的なことらしいけど,学んだので忘れないようにメモ.
環境は大雑把にUbuntu 10.04,GCC,C言語
最初に,aclocal autoconf automakeが使えるか確認しておいてください.
無ければ入れる.

作ったソースファイル一式用意して,
vim Makefile.am

内容には,
bin_PROGRAMS = プログラム名 (ex. bin_PROGRAMS = HelloWorld)
プログラム名_SOURCES = 作ったソースファイル一式 (ex. HelloWorld_SOURCES = helloworld.c hellohello.c)

そして保存.次に
vim configure.in

AC_INIT(プログラム名,バージョン) (ex. AC_INIT(HelloWorld,1.0))
AC_PREREQ(autoconfバージョン) (ex. AC_PREREQ(2.65))
AC_CONFIG_SRCDIR(何か一つソースファイル) (ex. AC_CONFIG_SRCDIR(helloworld.c))
AM_INIT_AUTOMAKE
AC_PROG__CC
AC_PROG_INSTALL
AC_OUTPUT(Makefile)

そして保存.

aclocal -> autoconf -> automake -a
という順にコマンドを打つ.
制作者の情報 AUTHORS,プログラムの修正履歴を記録するChangeLo,新着情報を記載するNEWS,パッケージの基本情報を記載するREADMEが無いとエラーが出たら

空のファイルを用意すれば解決
touch AUTHORS ChangeLog NEWS README

そしたら,再びautomake -a
これで,configureスクリプトが出来るはず.
これを実行したらMakefileの完成!

三歩歩いたら忘れる俺の為のメモ

2012年1月26日木曜日

ロボジー

ロボジーを見た。
劇中にあった、「ロボット技術を使う企業は多いけど、ロボット本体を作る企業は少ない」って脚本がとっても印象に残りました。
完成しないロボットを見て、人が入れば良いのに!センサは人間っす!ナビゲーションも柔軟っす!って言いたいよねと良く冗談で話しあったりします。
ロボジーは、実際にロボットに人間を入れてみた妄想の延長線みたいな感じでした。

一人で観に行ったけれども、両隣の人も笑っていてとっても楽しい映画。
ソリッドワークスを用いたギャグとか、ZMPの式で笑っていたのは私だけでしたが・・・。

オススメですよ!