I’ve presented at ThoughtWorks Melbourne tech forum today. Tech forums are short presentations we have 2 times a month, a nice excuse to get people around the office, enjoy free lunch and discuss about some geeky stuff. We had a very nice talk about Internal Domain Specific Languages.
Feel free to download the slides and the script I used during the talk -without that the scripts the slides aren’t very useful. Find that at:
http://fragmental.tw/2008/02/26/internal-dsls-thoughtworks-tech-forum/
8. Business
An User
belongs to a group.
He must authenticate
using a login.
Dev
class User
attr_reader :login, :group
def authenticate(login)
#do stuff
end
end
9. Application User pays Bill from his Group
Domain
User, Group, Bill...
Model
Language class, module, def...
10010101001100101010101010101
11010111010001000001111100000
10. SELECT
u.name, g.name
FROM
(SELECT p.name
FROM USER u, PEOPLE p
WHERE u.status=’published’
AND u.id = p.id) u,
GROUP g
WHERE
g.id = u.group_id
AND
g.type = ‘ADMIN’
11.
12.
13.
14. Application User pays Bill from his Group
Domain
User, Group, Bill...
Model
Language class, module, def...
10010101001100101010101010101
11010111010001000001111100000
15. Application User pays Bill from his Group
Domain
User, Group, Bill...
Language
10010101001100101010101010101
11010111010001000001111100000
16. Business
An User
belongs to a group.
He must authenticate
using a login.
Dev
authenticate ‘phill’
20. Person
name
birth_date
User
Customer login * 1 Group
password
authenticate
21.
22.
23. ['20080102', '18:23:06,026'] - (INFO quot;Program startedquot;)
['20080102', '18:23:07,027'] - (DEBUG quot;Infra-checkquot;)
['20080102', '18:23:08,028'] - (INFO quot;Checking classloadersquot;)
['20080102', '18:23:09,029'] - (WARN quot;Classloader not set properlyquot;)
['20080102', '18:23:10,030'] - (ERROR <<TEXT
Could not load the org.jboss.webservice.server.Service interceptor
java.lang.ClassNotFoundException: No ClassLoaders found for:
org.jboss.webservice.server.ServiceEndpointInterceptor
at org.jboss.mx.loading(LoadMgr3.java:212)
at org.jboss.mx.loading(RepositoryClassLoader.java:490)
at org.jboss.mx.loading(RepositoryClassLoader.java:392)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at org.jboss.util.loading.(DelegatingClassLoader.java:89)
at org.jboss.mx.loadClass(LoaderRepositoryClassLoader.java:90)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
TEXT
)
['20080102', '18:23:09,029'] - (INFO quot;Program finishedquot;)
24. @log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,26), :info,
quot;Program startedquot;)
@log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,27), :debug,
quot;Infra-checkquot;)
@log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,26), :info,
quot;Checking classloadersquot;)
@log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,28), :warn,
quot;Classloader not set properlyquot; )
@log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,29), :error,
quot;Could not load the org.jboss.webservice.server.Service interceptor
njava.lang.ClassNotFoundException: No ClassLoaders found for:
org.jboss.webservice.server.ServiceEndpointInterceptorn at
org.jboss.mx.loading(LoadMgr3.java:212)n at
org.jboss.mx.loading(RepositoryClassLoader.java:490)nnat
org.jboss.mx.loading(RepositoryClassLoader.java:392)nat
java.lang.ClassLoader.loadClass(ClassLoader.java:235)nat
org.jboss.util.loading.(DelegatingClassLoader.java:89)nat
org.jboss.mx.loadClass(LoaderRepositoryClassLoader.java:90)nat
java.lang.ClassLoader.loadClass(ClassLoader.java:235)quot;)
@log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,30), :info,
quot;Program finishedquot;)