Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

1.348 visualizaciones

Publicado el

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

Publicado en: Tecnología
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

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. ありがとうございました! アルファサードではエンジニアを募集中です!

×