SlideShare a Scribd company logo
1 of 21
Download to read offline
今からでも遅くない
Smalltalk入門
Pharoではじめよう!
Smalltalk忘年会2017
合同会社ソフトウメヤ 梅澤真史
Borderless
「垣根がない」
いいところ1
プログラミング言語の壁
▶ アプリを使う人
▶ アプリケーションのユーザ
▶ アプリを作る人
▶ プログラマ
▶ 言語を作る人
▶ プログラミング言語開発者
Smalltalkには垣根が無い
「オブジェクトにメッセージを送る」ことで、
アプリを作るのみならず、
プログラミング言語そのものを変更してい
くことができる
「この言語にはこれがないから…」=>「だったら作ればいいじゃん?」
Simple
「シンプル」
いいところ2
ミニマリズムの言語
▶ 予約語は 6つのみ
▶ nil, true, false, self, super, thisContext
▶ あとは「オブジェクトにメッセージを送る」
「こんなふうに短く書けます」的なシンタックスシュガーはない
安易ではなく、簡潔
少ないルールの組み合わせによって何でも作っていける
Direct「直接つかめる」
いいところ3
動いているオブジェクトに直接触れる
▶ メモリにうかんだオブジェクトをメッセージ
送信で変容させていくスタイル
▶ 常にデバッガの中でプログラムを作っているようなもの
Smalltalker的には、テキストエディタに書かれたプログラムは、「た
だの文字列」で死んでいる
「動いてないし、ある部分を選択してメッセージを送れない」
自由の世界へ
▶ Kent Beckさんの Facebookでの記事
▶ http://www.facebook.com/notes/kent-beck/design-spa
ce/510856375613898
▶ “The greater my knowledge, the freer I feel. It’s
like walking under a Montana sky instead of being
jostled down a narrow, one-way corridor”
▶ 「知れば知るほど、自由を感じる。狭い一方通行の廊下
に押し込まれて進むのではなく、モンタナの空の下を闊
歩するようなものだ」
Pharoとは
● OSSのSmalltalk処理系で最もポピュラー、開発も活発
○ https://pharo.org
● VMも高速
(https://www.slideshare.net/pharoproject/pharo-vm-performance)
● イメージはWin, Mac, Linuxでバイナリコンパチブル
● ライブラリも豊富 (Catalog Browserですぐに入る)
Zeroconf Scriptで入れてみる
● curlやwgetで気軽に入れる
○ http://get.pharo.org
curl get.pharo.org/64/61+vm | bash
wget -O- get.pharo.org/64/61+vm | bash
● 64部分がないと32ビット版になる(が、おすすめしない)
pharo-ui で起動
./pharo-ui Pharo.image
フォントを日本語に
● デスクトップのクリックでメニューがでる
○ System -> Settings で Settings Browserが開く (Cmd + os)
○ Search for: の検索窓に'font'と打つ
○ Use Free Type をoffしてonにするとフォントを読む
○ Standard font -> Default の箇所で日本語のフォントを指定し
て"Force All"のボタンを押す
ライブラリを入れる
● Tools -> Catalog Browser
○ 検索窓に'soup'と入れてみる
■ 絞り込まれるので
選択して右クリックし
"Install stable version"
● Soup
○ スクレイピング用のHTMLパーサ
■ PythonのBeautiful Soupっぽいもの
特定のリンクを抽出する
● Playgroudを開く (Cmd + ow)
○ Smalltalkコードを書いて評価するためのツール
● http://swikis.ddo.jp/squeak の勉強会関連リンクを取り出す
soup := Soup fromUrl: 'http://swikis.ddo.jp/squeak'.
((soup // 'a') select: [ :each | each text beginsWith: '第'])
collect: [ :each | each text -> (each @ 'href')]
● テキスト選択して右クリックで "Inspect it"
○ あるいは Cmd + i
実行結果は...
画像をまとめて取得し保存
soup := Soup fromUrl: 'http://swikis.ddo.jp/squeak'.
baseUrl := 'http://swikis.ddo.jp' asUrl.
dir := './downloads' asFileReference ensureCreateDirectory.
imageUrls :=((soup // 'img') @ 'src') collect:
[:each | baseUrl / each ].
imageUrls asSet do:
[:each |each saveContentsToFile: dir / each file].
● "Do it" あるいはCmd + d
実行結果は...
Smalltalkの場合、文法よりも体験
● 早わかりSmalltalk
● Smalltalk基本文法編
● Smalltalk入門 (ドットインストール)
● 難しくはないが異質
● 習うよりも慣れろ
● Smalltalk勉強会に参加すると良いことがあるかも
まとめ
● Smalltalkは古くて新しい不思議な言語
○ 味わっておいて損はない
■ 妥協しないピュアなオブジェクト指向
■ オブジェクトがうごめくライブな環境
● まずはPharoがオススメ
○ 開発が活発
○ 実プロジェクトも多い

More Related Content

What's hot

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

What's hot (20)

暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Lispマシン・シミュレータの紹介
Lispマシン・シミュレータの紹介Lispマシン・シミュレータの紹介
Lispマシン・シミュレータの紹介
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
SANS Holiday Hack 2017 (非公式ガイド)
SANS Holiday Hack 2017 (非公式ガイド)SANS Holiday Hack 2017 (非公式ガイド)
SANS Holiday Hack 2017 (非公式ガイド)
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
 

Similar to 今からでも遅くないSmalltalk入門

言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
 
おばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフトおばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフト
atmarkit
 

Similar to 今からでも遅くないSmalltalk入門 (12)

Herlockサービス紹介
Herlockサービス紹介Herlockサービス紹介
Herlockサービス紹介
 
20200803 プログラミングの基礎
20200803 プログラミングの基礎20200803 プログラミングの基礎
20200803 プログラミングの基礎
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料
 
MTプラグイン入門以前
MTプラグイン入門以前MTプラグイン入門以前
MTプラグイン入門以前
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
 
Weekend Androidのススメ
Weekend AndroidのススメWeekend Androidのススメ
Weekend Androidのススメ
 
おばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフトおばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフト
 
0から教える簡単アプリ開発
0から教える簡単アプリ開発0から教える簡単アプリ開発
0から教える簡単アプリ開発
 
Cap01
Cap01Cap01
Cap01
 
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
 
Interop2017
Interop2017Interop2017
Interop2017
 

More from Masashi Umezawa

More from Masashi Umezawa (20)

第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
 
FileManで楽々ファイル操作
FileManで楽々ファイル操作FileManで楽々ファイル操作
FileManで楽々ファイル操作
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
 
TaskItの紹介
TaskItの紹介TaskItの紹介
TaskItの紹介
 
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
 
Revealing ALLSTOCKER
Revealing ALLSTOCKERRevealing ALLSTOCKER
Revealing ALLSTOCKER
 
TarandocでJSONを永続化
TarandocでJSONを永続化TarandocでJSONを永続化
TarandocでJSONを永続化
 
Dockerizing pharo
Dockerizing pharoDockerizing pharo
Dockerizing pharo
 
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すTarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
 
VerStixの紹介
VerStixの紹介VerStixの紹介
VerStixの紹介
 
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
 
Pyonkeeを鳴らす
Pyonkeeを鳴らすPyonkeeを鳴らす
Pyonkeeを鳴らす
 
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へSmalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
 
Tarantalk
TarantalkTarantalk
Tarantalk
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0
 
Pillarの紹介
Pillarの紹介Pillarの紹介
Pillarの紹介
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
 

今からでも遅くないSmalltalk入門