Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

1.341 Aufrufe

Veröffentlicht am

Perl でOSネイティブのアプリケーションを作れたらいいなと思ったことはないでしょうか? 私はMovable TypeのクライアントアプリMAUS(https://alfasado.net/apps/maus-ja.html) やいくつかのmacOSアプリを作成・公開していますが、これらのアプリではPerlが活用されています。本トークセッションでは 統合開発環境Xojo(https://xojo.grapecity.com)でのアプリケーション開発にPerlを活用するTipsについてご紹介します。

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

  1. 1. macOSネイティブアプリ 作成におけるPerlの活⽤ YAPC::Kansai 2017 野⽥ 純⽣( junnama@alfasado.jp )
  2. 2. about @junnama ✴ アルファサード株式会社 代表取締役 ✴ W3Cメンバー ✴ ご当地/懇親会スポンサーになりました! ✴ CMS「PowerCMS」(Perl製)の開発 ✴ MTのプラグインを⼀番たくさん書いている⼈ ✴ macOSネイティブアプリ開発
  3. 3. 23% 77%
  4. 4. macOSネイティブアプリ
  5. 5. for Mac OS X
  6. 6. Xojo
  7. 7. https://xojo.grapecity.com
  8. 8. Xojo (ゾージョー) ✴ CrossBasic => REAL Basic => REAL Studio ✴ ⾔語はBasic! ✴ macOS/Windows/Linux/iOSアプリを作成 ✴ クロスプラットフォーム ✴ Single Desktop 16,000円∼ ✴ 開発は無料(ビルドしたアプリを配布する段階でラ イセンスが必要)
  9. 9. 本⽇のお題 macOSネイティブアプリ 作成におけるPerlの活⽤
  10. 10. macOS = Unix
  11. 11. Dim Sh As New Shell Sh.Execute( "ls" ) MsgBox( Sh.ReadAll )
  12. 12. http://junnama.alfasado.net/online/2013/12/mac_os_x.html
  13. 13. screencapture
  14. 14. screencapture foo.png screencapture -R 117,226,100,100 screencapture -t pdf foo.pdf screencapture
  15. 15. ✴ 現在の座標の周辺のキャプチャを取得 ✴ Canvas に表⺬ ✴ 中央の⾊(Color)を取得 ✴ ⾊名に変換して表⺬する screencapture + Xojo
  16. 16. say
  17. 17. say Hello World say
  18. 18. mdfind
  19. 19. mdfind -onlyin /Applications/ 'kMDItemContentTypeTree=="com.appl e.application" mdfind ※Spotlightのコマンドラインツール
  20. 20. ✴ リストボックスからドラッグされた時 ✴ ⼀意の名前のファイルをテンポラリに ✴ ファイルを不可視にしてドラッグ ✴ タイマーを⾛らせる ✴ mdfindでドロップされた場所を得る mdfind + Xojo
  21. 21. Dim d As Date = New Date Dim hex As String Dim bytes As String bytes = 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.close F.visible = False Dim di As DragItem DraggingItem = F.Name mdfind
  22. 22. di = New DragItem (self,System.MouseX,System.MouseY-Main.Top,64, 64) di.FolderItem = F di.Drag WatchFile.Mode = Timer.ModeMultiple Return False mdfind Dim Command As String = "mdfind -name " + DraggingItem Dim Sh As New Shell Sh.Execute( Command ) Dim Res As String = Sh.ReadAll if Res <> "" Then F = GetFolderItem( Res ) ...
  23. 23. さて、Perl
  24. 24. macOS = Unix
  25. 25. Perl, PHP, Ruby, Python...
  26. 26. 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;
  27. 27. use strict; use lib qw( lib ); use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/; ...
  28. 28. 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 /); …
  29. 29. cd path/to/app; perl app.pl --action=get --path https://foo.blob....
  30. 30. Application = Folder
  31. 31. Dim AppName As String = CurrentBuildAppName AppName = ReplaceAll( AppName, " ", " " ) Dim AppPath As String AppPath = CurrentBuildLocation + "/" + AppName + ".app" Dim Command As String command = "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スクリプトをコピーする
  32. 32. cd path/to/app;
  33. 33. Dim App as new application Dim MyApp As FolderItem MyApp = App.ExecutableFile Dim Name As String = MyApp.Name + ".app" MyApp = GetFolderItem( MyApp.NativePath,3 ).Parent Dim 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 )
  34. 34. cd path/to/MyApp/Contents/MacOS; perl ./app.pl --action=get --path https://foo.blob....
  35. 35. DEMO
  36. 36. ありがとうございました! アルファサードではエンジニアを募集中です!

×