So-net無料ブログ作成
検索選択
前の10件 | -

Twitterまとめ投稿 2017/02/22 [Twitter]


コメント(0) 

Twitterまとめ投稿 2017/02/21 [Twitter]


コメント(0) 

Twitterまとめ投稿 2017/02/20 [Twitter]


コメント(0) 

Twitterまとめ投稿 2017/02/19 [Twitter]


コメント(0) 

Swift3でアプリケーションバンドルの中の、埋め込みコマンドを探して実行する。 [プログラミング]

Macでコマンドラインアプリケーションをラップして、GUIで使いたいとか思いません? でも、配る時にコマンドラインツールをHomeBrewで入れてね、というのはスマートじゃないですよね。だからHomeBrewで入れたツールのバイナリを奪ってきて、Xcodeで作るGUIな.appの中にぶち込もうという計画。

わかっている人にはそんなに難しいことではないのだろうけど、アプリケーションバンドルって何?から始めようとするとキツい案件になる。でも、コマンドを打ちたくないから安易にできるようになった方がいいんですよねって話だし、そう考えるのはものぐさか、コマンドラインの初心者だと思うんだよね。だから、できるという状態まで持って行ってあげようというのが趣旨です。


それまでライブラリを.appの中にコピーして使ったということはあった。mailpeeper-tlsではOpenSSLの.dylibを使っていたので、そこいらのところはObjective-Cで習得済みだった。基本的にXcodeの操作なのですが、MacPortsなりHomeBrewなりで生成できるバイナリのライブラリをもってきて、実行時にリンクさせるようにするのでした。今回はリンク話の直パスということになります。

今回はSwiftで独立したバイナリのコマンドラインアプリケーションをコピーしてきて、そのバイナリを実行しようというものです。基本的に次のことができればいい。

・バイナリを.app内に取り込む。
・.app内のバイナリの位置を特定して実行する。

この二つだけで大体問題は解決します。やってみたらそんなに難しくなかった。今回は例えばgitを使いたいなと思います。そもそもGitなんて使えんのかいなということなんだけど、実際Xcodeでも使っているので問題ないと思ったのです。

Xcode.appのバンドルの中を検索してみると
/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git
にあることがわかります。別にソースごとXcodeの中に埋め込んでいるわけではなく、独立したコマンドのバイナリが入っているのですね。これには少しホッとしました。

ただリソースの場所としてはずいぶん自由な場所に入れてあるので、探すのが面倒になりそうだなと思っていたら最終的にはそんな気苦労は無用でした。そういうのを前提に関数が用意されているので、結構自由にバンドルの中に放り込むことができそうです。




さて実際にやっていきましょうか。最初にバイナリをバンドルの中に入れ込むのですが、HomeBrewから入れ込むにしろ、他のツールから入れ込むにしろ、whichコマンドで場所を特定してコピーしていきます。自分で作ったツールで./a.outして使ってたら直接でいいですなんて説明はいいですよね。とにかくプロジェクトのフォルダーにコピってきます。

そしてXcodeのProject Navigatorに突っ込んでおきます。どこでもいいです。とりあえず取り込むために登録するだけなので、gitに登録できるような状態にしておけばいいです。今回はgitコマンドなのでgitにgitを登録するような感じになりますがややこしいのは置いといて。こんな感じ。GUIでFinderからドロップするだけでもよかったかな。とにかく登録する。

pngit.png

Productsじゃないだろと言うツッコミはさておきw、実際はProductsにも入ってないノンカテゴリのフォルダなしだったりします。普通はこういう適当なことはやめておきましょうw。でもできることは確かです。


.appの中に入れるのはいくつか方法はあると思いますが、Projectの設定のBuildPhasesのCopy Bundle Resourcesに入れてしまうのが面倒がないと思います。苦労して入れたい方は他にも方法があると思うので探してやってみてください。実際Xcodeでやっているからできると思います。昔はcpコマンドとかを埋めてコピーしていた気がします。今回はとりあえずリソースとして入れこんでみることにします。

copybundle.png

実際にはこういう風にコピーされているのを確認することができる。

innnerbundle.png

まぁ探してくれはするのでどこでもいいのですが…。


さて実際のサンプルソースを見てみましょう。

ほぼ
https://gist.github.com/Seasons7/836d3676884a40c8c98a
なんですが、ちとふるいので少し改変しないと動きません(NSBundleとかがBundleになっていたり)。でもコンパイラが指事してくれるから問題ないです。

今回は前にやったディレクトリを取ってきた部分と絡めて実装する。ボタンとか押すと発動するようにしてみてください(実際そうしてる)。

@IBAction func addGit(_ sender: Any) -> Void {
	//フォルダ指定
	let openPanel = NSOpenPanel()
	openPanel.canChooseDirectories = true	// ディレクトリを選択
	openPanel.canCreateDirectories = false	// ディレクトリを作成できない
	openPanel.canChooseFiles = false		// ファイルを選択できない
	
	var path :String=""
	
	let num = openPanel.runModal()
	if num == NSFileHandlingPanelOKButton{
		for fileURL in openPanel.urls {
			let filePath = fileURL.path
			path = filePath
		}
		//下のコマンド呼んでる。実際にgitを発動しておる
		callGitCommand(path, "init")
		
	}else if num == NSFileHandlingPanelCancelButton{
		NSLog("Canceled")
		return
	}
}

func callGitCommand (_ path :String , _ param :String){
	let task = Process()
	let pipe = Pipe()
	
	task.launchPath = Bundle.main.path(forResource: "git", ofType: nil)
	task.arguments = ["-C", "\(path)", "\(param)" ]
	task.standardOutput = pipe
	task.launch()
	
	let handle = pipe.fileHandleForReading
	let data = handle.readDataToEndOfFile()
	let result_s = String(data: data, encoding: String.Encoding.utf8)
	NSLog(result_s!)
}


冗長なところとコメントはいらないから消したつもりなんだけど残ってるかな。あっても許してね、一応動くし。

http://d.hatena.ne.jp/Watson/20100324/1269427861
のように、NSTask関係では、コマンドラインは相対パスだと動かないから、
/bin/sh -c をかますといいとありますが、結局

Bundle.main.path(forResource: "git", ofType: nil)

でフルパスというか絶対パスが出てきてしまうので気にしないでいいです。パラメータに渡すパスとかも絶対パスを渡せば動作的に問題ないです。

パスのところは空白文字が入るとダメかもしれないので、ダブルクォーテーションとかで括ったほうがいいのかもしれません。そこいらへん試してないけど、一応日本語パスとかもいけたんで大丈夫かもしれません。というか、それくらいテストしろw。そういう面倒が嫌なので、そもそも空白文字のあるディレクトリは作らないようにしているんですけどね。

とにかく、.appの中に入れ込んだコマンドラインアプリケーションでも実行することができたのでした。しかし、実行環境が必要な場合もあると思うので、その場合はそれも持ってきて実行パスとかに置かないといけないのかもしれないなと思ったり。というかgitだってHomeBrewがない環境で動くかどうかって試してないから、HomeBrewのコンパイルリンクの方法が別のライブラリに頼っていた場合は、それも一緒に持ってこないとダメだよなぁ。少なくとも依存パッケージを入れられた場合は、それらは必要となるから結構面倒な話になるかもしれない。

ということを気にするとHomeBrewがない環境が必要になっちゃうじゃないか。面倒くさいなぁもう。

タグ:Swift3
コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2017/02/18 [Twitter]


コメント(0) 

タコツボの中に入って人を攻撃する小心者w [徒然]

前にあることを調べていてよく分からんなということを書いたら、Twitterで触れ回られて他にたむろする馬鹿者にすら馬鹿にされた。コンピューターオタクは昔から少しでも知識が足りていない人を馬鹿にする頭の悪い人が多いのだが、その本人は自分が頭が悪いことをしているのをわかっていない。自分の狭い範囲の知識が生かせる戦場で頑張っちゃってかわいそうな奴らだが、それでも僕は分からないことは分からないと言うし、他の糾弾する人たちはみんなが分かっていることであればもっと普及してもいいと思わないのだろうか。

実際、自分が知っていると思っている人は大体は知識が偏っている人間が多いし、それを指摘されても自分はまともだと言明するばかりだ。そんなのだれも望んでいないし、あんたがタコツボの中でしか戦えない人間だってことはみんなが分かっているんだよ。大体において、そこを過ぎ去ってしまえばどうでもいい技術だったりするし、そういう人間は留まって話すだけの価値がない。

人間は他の人に馬鹿にされたりしたくないものだ。それがあらぬ方向へ理解されてしまうのはとても後味が悪い。だから人は馬鹿にされないように虚勢を張るのだが、僕は虚勢を張るよりか普通はそこまで知らなくてもいいよねぇと構えるか、本当に大事そうだったらそこそこ努力する。しかし、努力せんでもいいところで努力するのは絶対嫌だ。そしてあらぬ方向に努力してそれを理解されないがうえに他人を攻撃するとか了見が狭すぎる。

なんでそんなの知らないのと言う人は、多くはその根本が分かっていなくて反復しているから知っているか、無駄に自分を守るためにどうでもいい知識すらも盾にしている。本当にだるいね。弁護士に接することがあったのだけれど、頭の悪いと思える人は法律を盾にして顧客の足元を見る。賢く見える弁護士は相手の立場を考えて値段にあった立ち振る舞いをする。弁護士ほどその匂いが違うのが分かる職種ってのはなかった。

それと同じように、弁護士のように損得はないが、コンピューター技術者も余裕のある人とない人がすごく分かれる。多くは余裕がなくて、まともなSEになり切れていない人が多かった。自分は一人プロジェクトなども多かったけど、交渉する余裕がない人は落ちぶれていくか、狭いタコツボをもっと深く掘るぐらいしかなかった。どうでもいいけど、なんで世の中には腐れてる人間が多いのかと思うし、情報技術者にはそれを煮詰めたようなクズが多いのかと驚きに値するところだ。他人を馬鹿にしたところで、その先にその人から得られる利益がどれだけあるのかわからないのだろうか。少なくとも違う人間には自分が知らないことを知っていて任せられるという発想がないのだろうな。

カウボーイビバップでフェイが、ハッカーなんて足のくさいオタクだというような感じで罵っていたが、あまりモテそうに感じられない人間が多い。まぁかわいい女の子がいたらコンピューターなんていじってないで遊びに行くか、一緒に部屋の中でイチャイチャするもんだしな。

ヨドバシから届く時間が以前のAmazon並み、Amazonプライム並みだ。夜に頼んでも次の日に届くもんなぁ。土日に外に出なければ受け取りも楽々できていい感じ。いちいちコンビニとかに行くのも面倒だし、家まで運んで来てくれるならそっちの方がいい。HDDを頼んだのだが梱包どうなのかな、バルクって書いてあったけど。バルクとか書いてありながら、リテールの箱に入ってたりするしなぁ。まぁ壊れないように運んでほしい。

コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2017/02/17 [Twitter]


コメント(0) 

ピコ太郎を見てMCハマーを思い出したのは何人ぐらいいるのだろうかと、Surface3に思うこと。 [ハードウェア]

少し前にピコ太郎が商標登録されてビビッてましたが、どうせ却下されるに決まっているし、著作権のほうが強いらしい。というか、中国人みたいなことをするやつが日本にもいるんだなぁと腐れ具合にげんなり。

ダンスはぜんぜん違うのだが、なんとなくピコ太郎の服装というか風体がMCハマーに似ているなぁと漠然と思ったのだが、記憶違いだろうか。パンツとかはサルエルパンツみたいになっていたとは思うけど、なんとなく色彩的に髪型的にハマーじゃないかと感じたんだよね。ぶれいくいっとだうん!



いつだかMCハマーが没落しているのをテレビで見ていたんだけど、一発売れてパーッと使って借金だけが残る人って結構いるのではないだろうか。特にアメリカだと爆発的に売れるし、売れても税金が日本みたいに重くかからないし、無駄使いもしがちである。

ともかく元からある曲をサンプリングして売れて大儲けというのはお気軽なわけで。でもサンプリングとカヴァーとパクリってのはお金の流れの違いが違うだけで、やっていることは大して違いはないよなぁ。その人がオマージュでやっているというのはいくらでも言えるわけだし。


話は変わるけど、Surface Pro4が安くなってSurface3ぐらいの値段になっていた。これかな?


http://japanese.engadget.com/2016/12/07/8-6180-surface-pro-4-core-m3/

Surface3はもうオワコン、とかちょっと前のネット民みたいなことを言ってみる。Core m3か、微妙な感じ。でもAtomよりかはずっとマシだろう。


Surface3は買った時は割り切っていたし、今でもそれなりに利点はある。でも、欠点が目立つのも確かで、それはWindows10だけのせいではないと思う。

使っているうちに、Atomの頭打ち感とeMMCの足引っ張られ感が日を追うごとに増してきた。非常に遅くはないけど、特定の作業をすると重くなくても処理に引っかかり感があったり、トップスピードがやはり気になってくる。

何度も言っているけどeMMCはフラッシュメモリの速度を全然生かせないからね。少なくともSATA 3Gbpsの速度がないとHDDのトップスピードと大して変わらない気がします。というか、どのくらいの接続でボトルネックができているんだろう。それともSurface3のフラッシュメモリが粗悪なのか? 少なくとも新しいSuface Pro 4はSSDらしいので、そこで引っ掛かりが出るということはないだろう。でも、今どき128GBのストレージってのはノートにしたって少ない気はするよな。とはいえ、薄い筐体に直付けだとこのくらいの大きさにせざるを得ないのが実情なのかも。

思うのだけれど、世間はそれほど薄いモバイルを欲しているとは思えない。薄ければそれはそれでいいのだけれど、2.5inchのSSDで大容量なものを使った方がずっと精神衛生上良いと思うのだが。500GB級のものも安くなったことだし、普通に心置きなく使うには十分な容量になったと思うんだが、案外そこはSSDなら直付けかM.2スロットでしょみたいな流れがあって、あまりうれしい感じではない。見た目ばっかり気にするほどかっこいいPCってのは少ないと思うんだけど、世の中の人って128や256GBのブートディスクで満足しているのかな。

なんというか2.5インチが既存HDDのリプレイス用と考えるのは、あまりにステレオタイプで、M.2のフォームファクタなどは容量からするとまだまだ早計に過ぎると思うのだけれど。大容量のものもあるけれど、お手軽価格になるのはまだまだ時間がかかりそうだしね。PCIe接続できるのはいいと思うけど、これまたまだまだオーバースペックか、PCIe接続するのはノートのロジックボードに直付けというのがまだまだ主流なのだろうし。というか、同じ値段なら少しでも容量が大きい方がいいのだけれど、そこまでノート利用者が爆速を望んでいるかどうかってのは微妙な気がします。

そのうち価格的にSSDが大容量HDDをも駆逐してしまうのだろうけれど、今のノート用のSSDが必要十分に大きいとはとても思えないんだよね。未だにハイエンドはSSDという位置づけってのも止めてほしいもんだ。確かにまだまだHDDは安いのかもしれないけど、すでにスペース的な位置付けからすると、値段を考えなければSSDに負けてしまっているわけだし。もっと2.5インチSSDが売れればもっと安くなるのは間違いない事なので、まだまだノートに2.5インチベイは必要じゃないかなと感じる。ハイブリッドとかブートするのだけSSDとかはそっちの方がスマートじゃない気がするんだよね。両方使っていくら安くなるのか知らんけど、SSDをたくさん売って安くなった方が消費者のためだと思う。

というわけで、大容量SSDが安くなればいいなぁと思う私であった。

コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2017/02/16 [Twitter]


コメント(0) 
前の10件 | -