2015年4月5日日曜日

Cの関数ポインタの書き方

Cの関数ポインタの書き方。

今までたぶん、r = (*f)(1,2);みたいに書いてきた気がするけど、r = f(1,2); みたいに普通の関数を直接呼び出すのと同じ書き方ができる。

でもポインタで*fとfが同じって言うのは違和感あるよね>K&L。

昔からこうなのか、最近の仕様なのか、確認したのはXcode6.2、LLVM。

でも、そもそも2006年2月のとある記事にr=f(1,2)みたいなコードが書いてあったのを見て書き間違い?かと疑問に思ったのが発端なので、K&L時代からそうだったのかが気になるところ。だってf(1,2)って書けるなら何でわざわざ(*f)(1,2)って書くの? そのほうが如何にも関数ポインタだぞ!と叫んでいるから? 確かにそれは一理あるが。


//
//  main.m
//  STAnySome
//
//  Created by Oliva on 2015/04/04.
//  Copyright (c) 2015 Oliva. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int testfunc(int p1, int p2)
{
return p1*p2;
}

int main(int argc, char * argv[]) {

int (*funcp)(int p1,int p2);
funcp = testfunc;
int r = funcp(1,2);
int r2 = (*funcp)(3,4);
NSLog(@"r=%d r2=%d",r,r2);

@autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}

}

2015-04-05 11:21:43.967 STAnySome[8447:2118408] r=2 r2=12


2015年4月3日金曜日

ADA MP-1とBOSS DS-2(TURBO-II)との相性が最高!

ADA MP-1を手に取ってからというもの、真空管ゲインの実在感を知り、遅まきながら感服することしきりで、YouTubeでいろんなアンプのデモやレビューを観ているうち、いつしかMesa/Boogie病にかかっていたのも束の間、それはMarshall病(主にJCM800)へと転移し、気分転換と称して度々中古品を物色する日が細々と続いてきたが、最近になってMarshall化した耳と、これは勝手な想像だが取り替えた真空管が(物理的にも自分の耳という生理的にも)いい感じに馴染んできたことによって、MP-1はおろか、スタジオに持込んでダメだしまでしたはずのMP-2までもが完全に使える音へと変化した昨今、いかがお過ごしかな自分が若干気になっていたことに、BOSS DS-2の存在がある。

自分のBOSS DS-2はMIJ(Made in Japanを英語系掲示板ではこのように表記することが多い)であるが、ACアダプタがPSA対応という、購入した御茶ノ水の某楽器店の店員さんもうなった珍しいタイプだ。普通はASAだと思っていたのだが。

なぜこれを手に入れたかというと、一番の理由はPrinceが使っているからである。今もどの程度どの曲でどう使っているのかいないのかは本当はよく知らないのだが、最近の映像でも存在は確認できる。

またBOSS DS-2 は現行品なのだが、こちらは台湾製になる。もう大分前の話になるが、音が違うとか違わないとか気になってしょうがないので、安い中古の台湾製を買って聴き比べてみた。

確かに全然違う、といっていいほど音に違いがある。しかし個体差なのか、世代差なのかは分からない。MIJのほうが音圧感があり、歪みの粒感がゴリゴリしていて芯のある感じがする。逆に台湾製はきれいさがあるように感じた。歪みの感覚が等間隔であるかのような、デジタルとまではいかないが粒がよく揃っているような感じだ。

さてADAプリアンプがMIDIアプリの実験台だけではなく、そしてもうしばらくは中古のMarshallやMesa/Boogieの出物を物色せずにいられるほど十分に使えるアンプになったこの機を利して(またいつ病が再発しないとも限らないので)、面倒くさくて一度しかやっていなかったEffect LoopにDS-2を繋いだらどんな音が出るのかでないのかを試してみた。

これがどうだい。

DS-2はもちろんトランジスタによって歪みが作られているのだが、入力がプリチューブの作り出した音であるからなのか、とにかく素晴らしい、もうこれで完全に暫くは、誰かがJCM800 2205のCombo(4212)をタダで進呈してくれるとでも言わない限り、何の不満もない状態になった。

いや正確には、次なる課題が実は発生し、それはDS-2のMIDI化という出来るんだか出来ないんだかまだ検索もしていないMODの必要性なのだが、まあ、あまりにも大変そうなので、とりあえず先々の課題の1つということで。

ちなみに物理的にノブとスイッチを動かすロボットも面白いが、できればいろんなペダルで使えるようにしたいので、デジタルで制御できるポッドに差し替えられるというのがベターかなあ。

それをラックマウントにして全面にカパってはめるようなセッティングで。DS-2だとちょうど3U。他のコンパクトペダルもBOSSは同じ大きさだと思うので。場所取るかなあ。意外とやっぱりロボットのほうが良かったりして。








2015年3月12日木曜日

角丸ボタン in Xcode 6.1.1 その2

疑問:

角丸ボタンってそもそもそういうクラスでいいんじゃないの?と思ったりなんかして、UIButtonからUIRoundButtonを作ってみたが、そしてそれはinitに書くことで同じことは出来たのだが、プレビューできないじゃん。

自分で作ったクラスをプレビューさせるにはどうすればいいのでしょう?


UIButtonでUser Defined Tuntime Attributesを書いてもプレビューはできない(ま、Runtimeっていうぐらいだからね)し、そもそも2つ以上の角丸ボタンを使うときに、毎回それ手で設定するのは馬鹿だよね。。何かまともな方法があるんだろうか?


結論:

自分はOopsオンチなのでクラス化の王道は知らないが、イメージ通りに書くのが基本的なスタイル。自分が物事をどう捉え、プログラム的なイメージに変換しているか、ということ。

だから「角丸ボタン」は「ボタンの角を丸くする」のではなく、「初めから角が丸いボタン」なので、プレビュー出来る出来ないとか、クラスであるべきないべきとかは置いておいて(問題先送り)、UIRoundButtonにしてしまって問題ない。

先送りした問題が解決すれば自動的に何かが変わる(変える)だろう。

2015年3月10日火曜日

pepperってどうよ?

プラットフォームになっているなんて! 全然気づかなかった! 発想も無かった!

早く秋葉に行ってこの目で確かめなきゃ!

でも「白い企業がついている」っていうのは嫌だなあ。
それにロゴは「pepper」なのにテキストは「Pepper」になってるし(P大文字)。




それにソフトがプラットフォームなのはいいけど、ハードはどうなの?
あの顔や手足を3Dプリンタで作り替えるにはどうすればいい?

とにかく、IoTにロボットは欠かせない。

特にお掃除ロボットから電子レンジまで、ヒト型以外の家庭用ロボット。

個人的にはアクセサリーロボット≒手のひらサイズのペットが爆発すると思うぞ。


2015年3月9日月曜日

角丸ボタン in Xcode 6.1.1



以前の(Xcode4? もう自分本位なことしかやってないのでXcodeのバージョンはどうでもいい感じで過ごしてきた)バージョンではround rect button とかいう角丸のボタンがオブジェクトライブラリの中にあったのだが、Xcode6には入っていない。

以下、stackoverflowのポストより。

1. XcodeのIdentity InspectorのUser Defined Runtime Attributesに追加する


2. コードで書く
roundButtonという名前で viewDidLoadで初期化的に実行。

ViewController.h:
@property (weak, nonatomic) IBOutlet UIButton *roundButton;

ViewController.m:
- (void)viewDidLoad {
    [super viewDidLoad];

    CALayer *btnLayer = [roundedButton layer];
    [btnLayer setMasksToBounds:YES];
    [btnLayer setCornerRadius:10];

}


コードはstackoverflowのポストからの丸パクリで、半径を10に変えただけ。リンクだけだと元原稿が消えることがままあるので。

2015年2月16日月曜日

OpenOfficeのWriterでF7問題をぶった切るぅ

3/30/3015 追記:
Libre4.4.1の英語版でやるとちゃんとファンクションキーのデフォルト設定が削除できた!





変更点:


OpenOffice.app/Contents/share/registry/main.xcd
の中のF7部分をとにかく削除する。

削除したのは基本的に"F7"が書いてある<node> .. </node>までなのだが、最初は他のファンクションキー(F1とかF8とかF7_なんとかとか)も使わないので全部削除していて、途中から面倒になってF7だけ削除していったので、かなり場当たり的な削除になっている。


OpenOffice4.1.1での操作:


OpenOfficeでWriterを立ち上げ、メニューの[ツール]-[カスタマイズ]でダイアログボックスを出し、その中の「キーボード」タブで要らないファンクションキーの割当を削除する。出来たら「OK」ボタンを押し、一度OpenOfficeを終了し、再度立ち上げる。

これでさっき消したファンクションキーへの割当が消えたままになってれば成功。



どうでもいい経緯というか道のり:(読まない事を強く推奨)


OpenOfficeに長年sunの時代から手こずってきたことの1つに

「F7問題」

がある(名前は私が勝手に今さっき命名したもの)。

ショートカットキーのデフォルトとしてF7にスペルチェックが割り当てられているのだが、カスタマイズで削除しようとしても削除できない。見た目消えているのに動きは全然変わらないし、アプリを再起動すると表示上も消したはずの割当が復活してしまうのだ。

一時、アプリをデスクトップに置くと、権限問題が解消するだかで、ショートカットキーの設定がちゃんと保存されるようになった事もあるのだが、いつのまにか、というか、もう次の日ぐらいにはダメになっていて、原因もわからず、二度とその方法でF7への割当が消えることはなかった。

F7といえば、ひらがらをカタカナに変換するのに使う。もちろん、漢字変換の一環できれいに変換されればいいのだが、そうもいかない場合が往々にしてある。

そんなとき、普通は、いや伝統的に、あるいは慣習的にF7を押してカタカナに変換する。これはWindowsでも同じで、日本ではATOKからの流れで、それがコモディティ化したのではないだろうか?と勝手に思っている。

とにかく、Macといえども(今幸い10.9なのでまだことえりを使っている)全角カタカナ変換はF7に割り当てられている。


確かOpenOfficeの公式サイトかヘルプか何かで、「ショートカットキーはOSで使っていないものを使っている」ようなことが書いてあったと思うが、実際OSで使っているF7を使っているのだ(細かいことを言えば日本語変換はF5〜F10まで割り当てられていると自分は思ってる)。しかしおそらく英語圏発のOpenOffice、日本語がメインストリームでないのはやむを得ない。だから、他の原語の変換がどうか全く知らないが、嫌なら別なOSなりアプリなりを使えばいい話。

(ことえりはMacOSの一部だと言って過言ではないと思うし、MacOS10.10に至ってはことえりは無くなり、異常な日本語変換機能がついていて、もうそれはOSそのものだというのが私の理解)。

Keynoteというアプリ

ところがだ。

その別なアプリの代表格だと思っていた、しかも金を出して買ったあの「Keynote」がこれまた最悪のデグレード。前はそんなことなかったと思うのだが、アイコンが変わってから久々に使って見ると、共有が10.9ではもはやサポートされない(共有を使いたければOSを10.10にしなければならない。こんな横暴が許されるのだろうか?)のはいいとして、箇条書きのインデントがまともに使えない。

箇条書きのインデント

だよ。あの一番よく使う(と思っているだけかもしれないが、疑わしい方はSladeShareのデータを調査し論文発表するとウケるかも)箇条書きのインデント。

インデントっていうのは、文章が階層的になっていくに従って、右に段々ずれて行くことでそれを表す簡単かつ分かりやすく操作が効率的、という文書整形術の中では基本中の基本だ。

ところが、このネストした状態で文字を1文字でも入力しようものなら、血相変えて左端にすっとんでいくのだ。iPad阪では問題なし。Macだけ。10.9でも10.10でも同じ。

しょうがないから文字を入力してからインデントをつけ直すしかないのだが、それを3回もやっていると、自分が如何に大バカ者で、それはAppleによってそういう烙印を押されていることに否が応でも気づかされる。しかも金を払って、だ。

金額の大小はともかく、わざわざ金を払ってバカにしてもらいたいほど、自分は者付きな人間ではない。

些細なバグやたまにこうなるなら別だが、箇条書きのインデントは基本中の基本。それがまともに動かないのだから、やつらの神経を疑わずして何を疑うというのだ?

しかも私のような野良開発者がしでかしたというなら分かるが、Appleのような世界で1、2を争う資産を持つ超大企業がやるべきことか? その、うなるような金を、こともあろうに人をバカにする為に使うなんて。

だからUSAは嫌われるのだ。

いくらフーファイターズが頑張っても、
お前が全部ぶち壊しなんだよ!



2014年11月12日水曜日

仮想キーボードの素晴らしさと現代社会への妄想

Synergyという素晴らしい入力デバイスコントローラがある。

複数のMac/PCを1つのマウス、キーボードでコントロールするのだが、ベヒーモスなハードウェアでやるのではなく、ソフトウェアで仮想的に実現するのだ。しかも一々切替スイッとを押すことなく、カーソルの移動に応じて、PC間を移動できる。素晴らしい発明だ。
詳しくは検索してもらうとして、とはいえ自分は使っていない。1つは仮想的に行うが故にどれか1台をサーバにする必要があるのが使いづらいからだが、それは慣れの問題だと思う。便利なのだがどれをサーバにするかで迷う。だから全部が常に両方の機能を備えつつ、状況に応じて誰が優先的にサーバになるか決めるような仕組みが美しく実現できるなら、この悩みは解消するかもしれない。しかし問題なのはもう一つの方の理由で、それは、いまひとつ頼ることが出来ないある疑念を拭い去れないからだ。

ある疑念。

というより半ば被害妄想といったほうがいいかもしれない。断っておくが私はSynergyにそういう疑いがあるなどと失礼千万なことをいうつもりは毛頭ない。だからこれは被害妄想だと思っていただきたい。

キーボードを仮想化するということは、入力した内容がソフトウェア的に「すべて」把握できるということだ。そう、パスワードも。

銀行のオンラインなどでは、恐らくウィルスに感染した場合に備えてだと思うが、ブラウザ上にソフトウェアキーボードを表示し、それを使って入力できるようにしているところもある。それでも万全とは言えないだろうが、もしキーボードを監視しているウィルスが潜んでいた場合、一定の効果はあるだろう。

 つまりもし、Synergyのような仮想キーボードに悪意を注入すれば、ユーザの行動を追跡し、重要なアカウント情報を盗み出すことが簡単にできてしまうのだ。もちろん(これは楽観的な考えかもしれないが)悪意のある仮想キーボードはウィルス(病)的であるので、悪事が広く知れ渡れば削除もできるだろう。しかし被害妄想としては、単にリスクをより高くするような気がしてならない。

これが特定のアプリであれば、(MacOSXの場合)アクセシビリティにチェックを入れる時点で不審に思い気づくことも十分考えられるが、そもそも仮想キーボードなのだから、そこはスルー(アクセシビリティを許可)してしまう。

とはいえ、システムを乗っ取られるようなものを入れてしまったら同じことなので、結局は単純にそのソフトウェアを信用できるかどうかでしかなく、つまり被害妄想なのだが、下地を作ってしまうような感覚が、その脱却から二の足を踏ませる。

だからもう一度言おう。Synergyは素晴らしい発明だ。そして私は被害妄想から抜け出せないでいる。