SlideShare a Scribd company logo
1 of 44
Download to read offline
S H O Y O S H I D A
S O R A B I T O I N C
Smalltalk ?
3 1 M A R C H 2 0 1 7
Smalltalk
Smalltalker
https://fossbytes.com/most-loved-and-most-hated-programming-languages/
Which Are The Most Loved and Most Hated Programming Languages | 2017
Smalltalker
Web Seaside
Develop in Pharo, Run on Javascript
PharoJS
• https://pharojs.github.io/
• http://smalltalkhub.com/#!/~noury/PharoJS
• ESUG 2015
• Pharo JavaScript
Enterprise Pharo
( )
Smalltalk
Twitter
• Smalltalk All the Time & Everywhere
PharoJS
PharoJS
PharoJS
PharoJS
•
• Smalltalk
•
PharoJS
: Teapot
Smalltalk
Gofer it
smalltalkhubUser: 'noury' project: 'PharoJS';
configurationOf: #PharoJS ;
loadBleedingEdge.
C O D E + T E S T M O D E L
Pharo Pharo
counter := MyCounter new.
counter count.
counter increment.
counter count.
C O D E + T E S T I N T E G R AT I O N
C O D E + T E S T I N T E G R AT I O N
MyCounterController MyCounterBrowserApp
Model Controller
C O D E + T E S T I N T E G R AT I O N
MyCounterController MyCounterBrowserApp
Model Controller
MyCounterController
Object subclass: #MyCounterController
instanceVariableNames: 'counter countDisplay'
classVariableNames: ''
package: 'PharoJS-Demo'
MyCounterController
MyCounterController>>increment
self counter increment.
self updateDisplay
MyCounterController>>reset
self counter reset.
self updateDisplay
MyCounterController>>updateDisplay
self countDisplay innerHTML: self counter count
MyCounterBrowserApp
PjFileBasedBrowserApp subclass: #MyCounterBrowserApp
instanceVariableNames: 'counter controller'
classVariableNames: ''
package: 'PharoJS-Demo'
MyCounterBrowserApp
MyCounterBrowserApp>>initialize
super initialize.
counter := MyCounter new.
controller := MyCounterController new.
controller counter: counter.
controller countDisplay: self countDisplay.
self resetButton addEventListener: #click block: [ controller reset ].
self incrementButton addEventListener: #click block: [ controller increment ]
MyCounterBrowserApp
MyCounterBrowserApp>>incrementButton
^ self domElementAt: 'incrementButton'
MyCounterBrowserApp>>resetButton
^ self domElementAt: 'resetButton'
MyCounterBrowserApp>>countDisplay
^ self domElementAt: 'countDisplay'
MyCounterBrowserApp
MyCounterBrowserApp>>(class)appClasses
<pharoJsSkip>
^super appClasses, {MyCounter. MyCounterController}
MyCounterBrowserApp>>(class)appJsSubFolder
^'js'
JavaScript
C O D E + T E S T I N T E G R AT I O N
MyCounterController MyCounterBrowserApp
Model Controller
MyCounterBrowserApp setUpAppFolder.
MyCounterBrowserApp appFolder.
HTML
C O D E + T E S T I N T E G R AT I O N
<!DOCTYPE html>
<meta charset="utf-8" />
<head>
<title>MyCounter</title>
</head>
<body>
<div class="container">
<div id="countDisplay" class="countText">0</div>
<button id="resetButton" class="resetButton">Reset</button>
<button id="incrementButton" class="incrementButton">Increment</button>
</div>
<script language="javascript" type="text/javascript" src="js/index.js"></script>
</body>
</html>
HTML
PjTranspiler
PjTranspiler convertToJs:[ 1+1 ] .
jsString := PjTranspiler convertToJs:[ [ 1+ 1 ] ].
jsString := PjTranspiler convertToJs:[:x | x + 1 ].
jsString := PjTranspiler convertToJs:[ [:x | x + 1] value:2 ].
PjTranspiler convertToJs: MyCounter.
Smalltalk JavaScript
MyCounterBrowserAppTest
PjWebAppTestCase subclass: #MyCounterBrowserAppTest
instanceVariableNames: 'application countDisplay incrementButton
resetButton'
classVariableNames: ''
package: 'PharoJS-Demo-Tests'
MyCounterBrowserAppTest
MyCounterBrowserAppTest>>setUp
super setUp.
application := self currentApp.
countDisplay := application countDisplay.
resetButton := application resetButton.
incrementButton := application incrementButton.
MyCounterBrowserAppTest>>currentApp
self subclassResponsibility
MyCounterBrowserAppTest
MyCounterBrowserAppTest>>testClickOnIncrementButtonIncreasesCountAn
dUpdatesDisplay
1 to: 10 do: [ : expectedCount |
incrementButton click.
self assert: countDisplay innerHTML equals: expectedCount asString
]
MyCounterBrowserAppTest
MyCounterBrowserAppTest>>(class)appClass
^MyCounterBrowserApp
MyCounterBrowserAppTest>>(class)isAbstract
^self == MyCounterBrowserAppTest
MyCounterBrowserAppTest>>(class)targetPlatforms
^{PjSafari . PjGoogleChrome. PjFireFox. }
T E S T P O R TA B I L I T Y
MyPharoCounterBrowserAppTest
MyCounterBrowserAppTest subclass: #MyPharoCounterBrowserAppTest
instanceVariableNames: ''
classVariableNames: ''
package: 'PharoJS-Demo-Tests'
MyPharoCounterBrowserAppTest>>currentApp
^MyCounterBrowserApp start.
MyPharoCounterBrowserAppTest
MyCounterBrowserAppTest subclass: #MyPharoCounterBrowserAppTest
instanceVariableNames: ''
classVariableNames: ''
package: 'PharoJS-Demo-Tests'
MyPharoCounterBrowserAppTest>>currentApp
^ self evalBlock: [MyCounterBrowserApp currentInstance]
PjBridge
bridge := PjBridge startOn: 9001 title:'test'.
bridge clientTitle.
bridge evalBlock: [1+2].
bridge evalBlock: [|x| x := 6 * 7].
bridge loadClass: MyCounter.
bridge evalBlock: [
|counter|
counter := MyCounter new.
counter increment.
counter count.].
bridge stop.
JavaScript Interpreter
• PharoJS Smalltalk
• Pharo JavaScript

More Related Content

What's hot

Bottom to Top Stack Optimization - CICON2011
Bottom to Top Stack Optimization - CICON2011Bottom to Top Stack Optimization - CICON2011
Bottom to Top Stack Optimization - CICON2011
CodeIgniter Conference
 
Programming Hive Reading #4
Programming Hive Reading #4Programming Hive Reading #4
Programming Hive Reading #4
moai kids
 

What's hot (20)

CouchDB Day NYC 2017: Full Text Search
CouchDB Day NYC 2017: Full Text SearchCouchDB Day NYC 2017: Full Text Search
CouchDB Day NYC 2017: Full Text Search
 
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
 
Apache spark session
Apache spark sessionApache spark session
Apache spark session
 
Rugged Driven Development with Gauntlt
Rugged Driven Development with GauntltRugged Driven Development with Gauntlt
Rugged Driven Development with Gauntlt
 
High Performance tDiary
High Performance tDiaryHigh Performance tDiary
High Performance tDiary
 
Rancher最速セットアップ理論 プロジェクトr to the next stage
Rancher最速セットアップ理論 プロジェクトr to the next stageRancher最速セットアップ理論 プロジェクトr to the next stage
Rancher最速セットアップ理論 プロジェクトr to the next stage
 
Bottom to Top Stack Optimization - CICON2011
Bottom to Top Stack Optimization - CICON2011Bottom to Top Stack Optimization - CICON2011
Bottom to Top Stack Optimization - CICON2011
 
CouchDB Day NYC 2017: Replication
CouchDB Day NYC 2017: ReplicationCouchDB Day NYC 2017: Replication
CouchDB Day NYC 2017: Replication
 
RingoJS
RingoJSRingoJS
RingoJS
 
Node.js streaming csv downloads proxy
Node.js streaming csv downloads proxyNode.js streaming csv downloads proxy
Node.js streaming csv downloads proxy
 
Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6
 
Got Logs? Get Answers with Elasticsearch ELK - PuppetConf 2014
Got Logs? Get Answers with Elasticsearch ELK - PuppetConf 2014Got Logs? Get Answers with Elasticsearch ELK - PuppetConf 2014
Got Logs? Get Answers with Elasticsearch ELK - PuppetConf 2014
 
Programming Hive Reading #4
Programming Hive Reading #4Programming Hive Reading #4
Programming Hive Reading #4
 
はじめてのSymfony2
はじめてのSymfony2はじめてのSymfony2
はじめてのSymfony2
 
power-assert, mechanism and philosophy
power-assert, mechanism and philosophypower-assert, mechanism and philosophy
power-assert, mechanism and philosophy
 
Introduction to pig & pig latin
Introduction to pig & pig latinIntroduction to pig & pig latin
Introduction to pig & pig latin
 
Aggregation APi in Ibexa DXP by Adam Wójs
Aggregation APi in Ibexa DXP by Adam WójsAggregation APi in Ibexa DXP by Adam Wójs
Aggregation APi in Ibexa DXP by Adam Wójs
 
On UnQLite
On UnQLiteOn UnQLite
On UnQLite
 
PL/Perl - New Features in PostgreSQL 9.0
PL/Perl - New Features in PostgreSQL 9.0PL/Perl - New Features in PostgreSQL 9.0
PL/Perl - New Features in PostgreSQL 9.0
 
Lies, Damn Lies, and Benchmarks
Lies, Damn Lies, and BenchmarksLies, Damn Lies, and Benchmarks
Lies, Damn Lies, and Benchmarks
 

Similar to 今時なウェブ開発をSmalltalkでやってみる?

Lect-5--JavaScript-Intro-12032024-105816am.pptx
Lect-5--JavaScript-Intro-12032024-105816am.pptxLect-5--JavaScript-Intro-12032024-105816am.pptx
Lect-5--JavaScript-Intro-12032024-105816am.pptx
zainm7032
 
I18n
I18nI18n
I18n
soon
 
JavaScript For People Who Don't Code
JavaScript For People Who Don't CodeJavaScript For People Who Don't Code
JavaScript For People Who Don't Code
Christopher Schmitt
 

Similar to 今時なウェブ開発をSmalltalkでやってみる? (20)

Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
 
Lect-5--JavaScript-Intro-12032024-105816am.pptx
Lect-5--JavaScript-Intro-12032024-105816am.pptxLect-5--JavaScript-Intro-12032024-105816am.pptx
Lect-5--JavaScript-Intro-12032024-105816am.pptx
 
I18n
I18nI18n
I18n
 
Building Codealike: a journey into the developers analytics world
Building Codealike: a journey into the developers analytics worldBuilding Codealike: a journey into the developers analytics world
Building Codealike: a journey into the developers analytics world
 
TechSEO Boost 2021 - Rendering Strategies: Measuring the Devil’s Details in C...
TechSEO Boost 2021 - Rendering Strategies: Measuring the Devil’s Details in C...TechSEO Boost 2021 - Rendering Strategies: Measuring the Devil’s Details in C...
TechSEO Boost 2021 - Rendering Strategies: Measuring the Devil’s Details in C...
 
Api
ApiApi
Api
 
HTML for the Mobile Web, Firefox OS
HTML for the Mobile Web, Firefox OSHTML for the Mobile Web, Firefox OS
HTML for the Mobile Web, Firefox OS
 
2018 (codeone) Graal VM and MicroProfile a polyglot microservices solution [d...
2018 (codeone) Graal VM and MicroProfile a polyglot microservices solution [d...2018 (codeone) Graal VM and MicroProfile a polyglot microservices solution [d...
2018 (codeone) Graal VM and MicroProfile a polyglot microservices solution [d...
 
Preparing a WordPress Plugin for Translation
Preparing a WordPress Plugin for TranslationPreparing a WordPress Plugin for Translation
Preparing a WordPress Plugin for Translation
 
Understanding meteor
Understanding meteorUnderstanding meteor
Understanding meteor
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
 
Brian hogg word camp preparing a plugin for translation
Brian hogg   word camp preparing a plugin for translationBrian hogg   word camp preparing a plugin for translation
Brian hogg word camp preparing a plugin for translation
 
JavaScript For People Who Don't Code
JavaScript For People Who Don't CodeJavaScript For People Who Don't Code
JavaScript For People Who Don't Code
 
Building a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profitBuilding a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profit
 
Introduction to python scrapping
Introduction to python scrappingIntroduction to python scrapping
Introduction to python scrapping
 
GraalVM and MicroProfile - A Polyglot Microservices Solution
GraalVM and MicroProfile - A Polyglot Microservices SolutionGraalVM and MicroProfile - A Polyglot Microservices Solution
GraalVM and MicroProfile - A Polyglot Microservices Solution
 
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
 
Parse Apps with Ember.js
Parse Apps with Ember.jsParse Apps with Ember.js
Parse Apps with Ember.js
 
Desenvolver para Chromecast
Desenvolver para ChromecastDesenvolver para Chromecast
Desenvolver para Chromecast
 
BugBounty Tips.pdf
BugBounty Tips.pdfBugBounty Tips.pdf
BugBounty Tips.pdf
 

More from Sho Yoshida

OpenRestyを用いてイケイケなサービスを作る方法
OpenRestyを用いてイケイケなサービスを作る方法OpenRestyを用いてイケイケなサービスを作る方法
OpenRestyを用いてイケイケなサービスを作る方法
Sho Yoshida
 
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたらもしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
Sho Yoshida
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalk
Sho Yoshida
 
Iliad or Seaside
Iliad or SeasideIliad or Seaside
Iliad or Seaside
Sho Yoshida
 

More from Sho Yoshida (16)

OpenRestyを用いてイケイケなサービスを作る方法
OpenRestyを用いてイケイケなサービスを作る方法OpenRestyを用いてイケイケなサービスを作る方法
OpenRestyを用いてイケイケなサービスを作る方法
 
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
 
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーションContinuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
 
Elasticsearch for Pharo Smalltalk
Elasticsearch for Pharo Smalltalk Elasticsearch for Pharo Smalltalk
Elasticsearch for Pharo Smalltalk
 
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
 
RUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkRUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践Smalltalk
 
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for Smalltalk
 
How Smalltalker Works
How Smalltalker WorksHow Smalltalker Works
How Smalltalker Works
 
Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
 
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
 
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたらもしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
 
エコSmalltalk
エコSmalltalkエコSmalltalk
エコSmalltalk
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalk
 
Iliad or Seaside
Iliad or SeasideIliad or Seaside
Iliad or Seaside
 
Pharo(Smalltalk)でAPI作りをはじめよう
Pharo(Smalltalk)でAPI作りをはじめようPharo(Smalltalk)でAPI作りをはじめよう
Pharo(Smalltalk)でAPI作りをはじめよう
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

今時なウェブ開発をSmalltalkでやってみる?