yapc::kansai 2017 - macosネイティブアプリ作成におけるperlの活用

50
macOSネイティブアプリ 作成におけるPerlの活⽤ YAPC::Kansai 2017 野⽥ 純⽣( [email protected] )

Upload: -

Post on 12-Apr-2017

962 views

Category:

Technology


9 download

TRANSCRIPT

Page 1: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

macOSネイティブアプリ

作成におけるPerlの活⽤YAPC::Kansai 2017

野⽥ 純⽣( [email protected] )

Page 2: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 3: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 4: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

about @junnama

✴ アルファサード株式会社 代表取締役 ✴ W3Cメンバー ✴ ご当地/懇親会スポンサーになりました! ✴ CMS「PowerCMS」(Perl製)の開発 ✴ MTのプラグインを⼀番たくさん書いている⼈ ✴ macOSネイティブアプリ開発

Page 5: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

23%

77%

Page 6: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

macOSネイティブアプリ

Page 7: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 8: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

for Mac OS X

Page 9: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 10: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 11: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 12: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

Xojo

Page 13: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

https://xojo.grapecity.com

Page 14: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

Xojo (ゾージョー)

✴ CrossBasic => REAL Basic => REAL Studio ✴ ⾔語はBasic! ✴ macOS/Windows/Linux/iOSアプリを作成 ✴ クロスプラットフォーム ✴ Single Desktop 16,000円∼ ✴ 開発は無料(ビルドしたアプリを配布する段階でラ

イセンスが必要)

Page 15: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

本⽇のお題

macOSネイティブアプリ

作成におけるPerlの活⽤

Page 16: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

macOS = Unix

Page 17: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

Dim Sh As New ShellSh.Execute( "ls" )MsgBox( Sh.ReadAll )

Page 18: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

http://junnama.alfasado.net/online/2013/12/mac_os_x.html

Page 19: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

screencapture

Page 20: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

screencapture foo.pngscreencapture -R 117,226,100,100screencapture -t pdf foo.pdf

screencapture

Page 21: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 22: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

✴ 現在の座標の周辺のキャプチャを取得

✴ Canvas に表⺬

✴ 中央の⾊(Color)を取得

✴ ⾊名に変換して表⺬する

screencapture + Xojo

Page 23: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

say

Page 24: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 25: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

say Hello World

say

Page 26: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 27: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

mdfind

Page 28: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

mdfind -onlyin /Applications/ 'kMDItemContentTypeTree=="com.apple.application"

mdfind

※Spotlightのコマンドラインツール

Page 29: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

✴ リストボックスからドラッグされた時

✴ ⼀意の名前のファイルをテンポラリに

✴ ファイルを不可視にしてドラッグ

✴ タイマーを⾛らせる

✴ mdfindでドロップされた場所を得る

mdfind + Xojo

Page 30: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 31: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

Dim d As Date = New DateDim hex As StringDim bytes As Stringbytes = MD5( Str( round( rnd * 3000 ) + 1 ) )Dim hex As String = EncodeHex( bytes )F = F.Child( "dragitem-" + hex +"-"F = F + Format( d.TotalSeconds, "#") + ".abcd" )FS = BinaryStream.Create( F, true )FS.closeF.visible = FalseDim di As DragItemDraggingItem = F.Name

mdfind

Page 32: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

di = New DragItem (self,System.MouseX,System.MouseY-Main.Top,64, 64)di.FolderItem = Fdi.DragWatchFile.Mode = Timer.ModeMultipleReturn False

mdfind

Dim Command As String = "mdfind -name " + DraggingItemDim Sh As New ShellSh.Execute( Command )Dim Res As String = Sh.ReadAllif Res <> "" Then F = GetFolderItem( Res ) ...

Page 33: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

さて、Perl

Page 34: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

macOS = Unix

Page 35: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

Perl, PHP, Ruby, Python...

Page 36: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 37: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

my $StorageClient = Net::Azure::StorageClient->new( type => 'Blob', account_name => $you_account_name, primary_access_key => $your_primary_access_key, protocol => 'https', api_version => '2012-02-12' );my $res = $StorageClient->get( $url );print $res->content;

Page 38: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

use strict;use lib qw( lib );use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/;...

Page 39: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

GetOptions(\my %options, qw/ account=s accesskey=s path=s action=s acl=s file=s get_all=i thread=i metadata=s pass=s proc=s/);…

Page 40: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

cd path/to/app; perl app.pl --action=get --path https://foo.blob....

Page 41: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

Application = Folder

Page 42: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 43: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 44: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Page 45: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

Dim AppName As String = CurrentBuildAppNameAppName = ReplaceAll( AppName, " ", "\ " ) Dim AppPath As StringAppPath = CurrentBuildLocation + "/" + AppName + ".app"Dim Command As Stringcommand = "cp /path/to/src.zip " + AppPath + "/Contents/MacOS/src.zip"Call DoShellCommand( Command )command = "cd " + AppPath + "/Contents/MacOS; unzip src.zip"Call DoShellCommand( Command )command = "cd " + AppPath + "/Contents/MacOS; rm src.zip"Call DoShellCommand( Command )

ビルドの際にPerlスクリプトをコピーする

Page 46: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

cd path/to/app;

Page 47: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

Dim App as new applicationDim MyApp As FolderItemMyApp = App.ExecutableFileDim Name As String = MyApp.Name + ".app"MyApp = GetFolderItem( MyApp.NativePath,3 ).ParentDim CMD As String = “cd ” + MyApp.ShellPath + “;”CMD = CMD + “perl src/app.pl --account ”CMD = CMD + EscapeShell ( Account )CMD = CMD + “ --token ” + EscapeShell( Token )CMS = CMD + “ --action put --path ” + EscapeShell( Path )CMS = CMD + “ --file ” + EscapeShell( File.ShellPath )

Page 48: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

cd path/to/MyApp/Contents/MacOS;perl ./app.pl --action=get --path https://foo.blob....

Page 49: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

DEMO

Page 50: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用

ありがとうございました!

アルファサードではエンジニアを募集中です!