SlideShare a Scribd company logo
macOSネイティブアプリ
作成におけるPerlの活⽤
YAPC::Kansai 2017
野⽥ 純⽣( junnama@alfasado.jp )
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
about @junnama
✴ アルファサード株式会社 代表取締役
✴ W3Cメンバー
✴ ご当地/懇親会スポンサーになりました!
✴ CMS「PowerCMS」(Perl製)の開発
✴ MTのプラグインを⼀番たくさん書いている⼈
✴ macOSネイティブアプリ開発
23%
77%
macOSネイティブアプリ
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
for Mac OS X
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
Xojo
https://xojo.grapecity.com
Xojo (ゾージョー)
✴ CrossBasic => REAL Basic => REAL Studio
✴ ⾔語はBasic!
✴ macOS/Windows/Linux/iOSアプリを作成
✴ クロスプラットフォーム
✴ Single Desktop 16,000円∼
✴ 開発は無料(ビルドしたアプリを配布する段階でラ
イセンスが必要)
本⽇のお題
macOSネイティブアプリ
作成におけるPerlの活⽤
macOS = Unix
Dim Sh As New Shell
Sh.Execute( "ls" )
MsgBox( Sh.ReadAll )
http://junnama.alfasado.net/online/2013/12/mac_os_x.html
screencapture
screencapture foo.png
screencapture -R 117,226,100,100
screencapture -t pdf foo.pdf
screencapture
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
✴ 現在の座標の周辺のキャプチャを取得
✴ Canvas に表⺬
✴ 中央の⾊(Color)を取得
✴ ⾊名に変換して表⺬する
screencapture + Xojo
say
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
say Hello World
say
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
mdfind
mdfind -onlyin /Applications/
'kMDItemContentTypeTree=="com.appl
e.application"
mdfind
※Spotlightのコマンドラインツール
✴ リストボックスからドラッグされた時
✴ ⼀意の名前のファイルをテンポラリに
✴ ファイルを不可視にしてドラッグ
✴ タイマーを⾛らせる
✴ mdfindでドロップされた場所を得る
mdfind + Xojo
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
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
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 )
...
さて、Perl
macOS = Unix
Perl, PHP, Ruby, Python...
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;
use strict;
use lib qw( lib );
use Getopt::Long qw/:config posix_default
no_ignore_case bundling auto_help/;
...
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
/);
…
cd path/to/app; perl app.pl
--action=get --path https://foo.blob....
Application = Folder
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
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スクリプトをコピーする
cd path/to/app;
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 )
cd path/to/MyApp/Contents/MacOS;
perl ./app.pl --action=get --path https://foo.blob....
DEMO
ありがとうございました!
アルファサードではエンジニアを募集中です!

More Related Content

PDF
お手軽並列処理
PDF
Hachioji.pm11
PDF
XOOPS Cube Conference 2012 Developer Workshop 2
PDF
Offline Hoogleで何処でもはすはす
PDF
いい感じにグラフ描きたい
PPTX
PDF
WindowsでAWS-CLIを使おう!
PDF
FuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみた
お手軽並列処理
Hachioji.pm11
XOOPS Cube Conference 2012 Developer Workshop 2
Offline Hoogleで何処でもはすはす
いい感じにグラフ描きたい
WindowsでAWS-CLIを使おう!
FuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみた

What's hot (20)

PDF
ミラクルはすける勉強会#0
PDF
Webブラウザで使えるいろんな処理系
PDF
Sphinxでドキュメントを書こう
PDF
Rails3.1rc4を試してみた
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
PPTX
Aizu.LT::Tokyo #4
PDF
Yesod on Heroku
PDF
Node予備校 vol.1 名古屋
PDF
Siphone coffeemaker okayama-js-1
PDF
RESTful APIとしてのRailsとクライアントとしてのJavaScript
PDF
GradleによるG*なビルドシステムの構築
PDF
Grunt front-osaka-1-lt-tanaka
PDF
PHPコードではなく PHPコードの「書き方」を知る
PDF
日本語ではじめるDrupal Console in Sapporo
PDF
Go と Couchbase で microservices を作るには?
PPT
Scala on Hadoop
PDF
OCamlでWebアプリケーションを作るn個の方法
PDF
Jmespathをもっと広めたい
PDF
New Generation Build System "Fly"
PDF
Asset Pipeline for Perl
ミラクルはすける勉強会#0
Webブラウザで使えるいろんな処理系
Sphinxでドキュメントを書こう
Rails3.1rc4を試してみた
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
Aizu.LT::Tokyo #4
Yesod on Heroku
Node予備校 vol.1 名古屋
Siphone coffeemaker okayama-js-1
RESTful APIとしてのRailsとクライアントとしてのJavaScript
GradleによるG*なビルドシステムの構築
Grunt front-osaka-1-lt-tanaka
PHPコードではなく PHPコードの「書き方」を知る
日本語ではじめるDrupal Console in Sapporo
Go と Couchbase で microservices を作るには?
Scala on Hadoop
OCamlでWebアプリケーションを作るn個の方法
Jmespathをもっと広めたい
New Generation Build System "Fly"
Asset Pipeline for Perl
Ad

Viewers also liked (20)

PPTX
CGI Perlでわかる!サーバレス
PDF
First step of Performance Tuning
PPTX
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
PDF
Perl ウェブ開発の中世〜CGI と Plack の間〜
PDF
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
PDF
YAPC::KANSAI 2017 LT
PDF
Ranking system by Elasticsearch
PPT
2017年春のPerl
PDF
H2O x mrubyで人はどれだけ幸せになれるのか
PDF
オープンデータを利用したWebアプリ開発
PDF
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
PDF
マーケットプレイス・ガイドブック
PPTX
Twitterの被ブロック数可視化ツールを作ってみた
PDF
GoogleのSHA-1のはなし
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
PDF
ディレクターからみたMovable Type + PowerCMSの優位性
PDF
Mashup Awards 2016
PPTX
安全なPHPアプリケーションの作り方2016
PDF
Deep learningの概要とドメインモデルの変遷
PDF
[Developers Summit 2017] MicrosoftのAI開発機能/サービス
CGI Perlでわかる!サーバレス
First step of Performance Tuning
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
Perl ウェブ開発の中世〜CGI と Plack の間〜
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
YAPC::KANSAI 2017 LT
Ranking system by Elasticsearch
2017年春のPerl
H2O x mrubyで人はどれだけ幸せになれるのか
オープンデータを利用したWebアプリ開発
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
マーケットプレイス・ガイドブック
Twitterの被ブロック数可視化ツールを作ってみた
GoogleのSHA-1のはなし
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
ディレクターからみたMovable Type + PowerCMSの優位性
Mashup Awards 2016
安全なPHPアプリケーションの作り方2016
Deep learningの概要とドメインモデルの変遷
[Developers Summit 2017] MicrosoftのAI開発機能/サービス
Ad

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

PDF
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
PDF
Niigata.pm #1
PDF
ホームディレクトリに埋もれた便利なコードをさがせ!
KEY
20年越しで Perl 4 to 5 した話
PDF
PDF
All about v13 2013-06-04
PPTX
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
PPTX
実用裏方 Perl 入門
PPTX
PerlでJCL,基幹バッチをダウンサイジング
PDF
WDD2012_SC-004
PDF
YAPC::Nagoya::Tiny 2019 | Makefile生活
PDF
Strawberry Perlのススメ@Kansai.pm#11
PPTX
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
PPTX
OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8
PDF
Backlogでの Perlのつかいかた
PPT
Scripting Layer for Android + Perl
PDF
4D Write Pro
PDF
Capistrano
PDF
Using Dancer
PDF
超簡単! Strawberry PerlをWindowsにインストール
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
Niigata.pm #1
ホームディレクトリに埋もれた便利なコードをさがせ!
20年越しで Perl 4 to 5 した話
All about v13 2013-06-04
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
実用裏方 Perl 入門
PerlでJCL,基幹バッチをダウンサイジング
WDD2012_SC-004
YAPC::Nagoya::Tiny 2019 | Makefile生活
Strawberry Perlのススメ@Kansai.pm#11
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8
Backlogでの Perlのつかいかた
Scripting Layer for Android + Perl
4D Write Pro
Capistrano
Using Dancer
超簡単! Strawberry PerlをWindowsにインストール

More from 純生 野田 (20)

PDF
アクセシビリティで企業価値を高める、小さな会社の戦い方
PDF
PowerCMS X
PDF
次世代版 PowerCMS 開発プロジェクトのご紹介
PDF
PowerCMS Conference
PDF
PowerCMS X
PDF
アルファサード株式会社はなぜ アクセシビリティに取り組むのか
PDF
About PowerCMS4.3
PDF
オーサリングツールとしてのCMSとWebアクセシビリティ
PDF
Color Testerはどうやって文字の色を拾っているのか?
PDF
The Next PowerCMS
PDF
The Next PowerCMS
PDF
やはりお前らのMTMLは間違っている!
PDF
ウェブアクセシビリティチェックツール開発者の頭ん中
PDF
PowerCMS 8341 のご紹介
PDF
Something Different for the Best Web Solution!
PDF
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化
PDF
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
PDF
MTで学ぶセキュアプログラミング@MT Tokyo
PDF
Mt seminar hiroshima_public
PDF
MT meets PHP
アクセシビリティで企業価値を高める、小さな会社の戦い方
PowerCMS X
次世代版 PowerCMS 開発プロジェクトのご紹介
PowerCMS Conference
PowerCMS X
アルファサード株式会社はなぜ アクセシビリティに取り組むのか
About PowerCMS4.3
オーサリングツールとしてのCMSとWebアクセシビリティ
Color Testerはどうやって文字の色を拾っているのか?
The Next PowerCMS
The Next PowerCMS
やはりお前らのMTMLは間違っている!
ウェブアクセシビリティチェックツール開発者の頭ん中
PowerCMS 8341 のご紹介
Something Different for the Best Web Solution!
SEOの本質から考える PowerCMSを活用した 検索エンジン最適化
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTで学ぶセキュアプログラミング@MT Tokyo
Mt seminar hiroshima_public
MT meets PHP

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