SlideShare a Scribd company logo
http://www.mobl-lang.org


Zef Hemel
mobl - model-driven engineering lecture
230,000   300,000
mobl - model-driven engineering lecture
Objective-C      Java   J2ME/C++




HTML/Javascript   Java     .NET
portability
Objective-C      Java   J2ME/C++




HTML/Javascript   Java     .NET
Webkit browser    Webkit browser   J2ME/C++




 Webkit browser   Webkit browser     .NET
mobl - model-driven engineering lecture
WebDatabases
WebDatabases


Location information
       (GPS)
WebDatabases


Location information
       (GPS)

      Canvas
WebDatabases


Location information
       (GPS)

      Canvas

  Multi-touch
WebDatabases


Location information
       (GPS)
                       Offline support
      Canvas

  Multi-touch
WebDatabases
                 Full-screen support
Location information
       (GPS)
                       Offline support
      Canvas

  Multi-touch
WebDatabases
                 Full-screen support
Location information
       (GPS)
                       Offline support
      Canvas
                 Accelerator support
  Multi-touch
mobl - model-driven engineering lecture
Address book
Address book
  Camera
Address book
  Camera
  Compass
Address book
  Camera
  Compass
   File IO
Address book
  Camera
  Compass
   File IO
   Audio
Address book
  Camera
  Compass
   File IO
   Audio
Notifications
mobl - model-driven engineering lecture
mobl - model-driven engineering lecture
mobl - model-driven engineering lecture
mobl - model-driven engineering lecture
mobl - model-driven engineering lecture
mobl program
today
1. language

2. behind the scenes
language
user interface

   styling

data modeling

  scripting

web services
user interface
demo
ui syntax


screen name(farg*) : ReturnType? {
  screenelem*
}


control name(farg*) {
  screenelem*
}
screen root() {
  ...
}
screen root() {
  ...
}


screen promptString(q : String) : String {
  ...
}
screen root() {
  ...
}


screen promptString(q : String) : String {
  ...
}


control button(s : String,
               onclick : Callback = {}) {
  ...
}
control calls

variable declarations

  control structures

      inline HTML


      script blocks
control calls
button("Click me")
control calls
button("Click me")


button("Click me", {
   alert("Click!");
})
control calls
button("Click me")


button("Click me", {
   alert("Click!");
})


button("Click me", onclick={
   alert("Click!");
})
control calls with body


  group() {
    item() { "Item 1" }
    item() { "Item 2" }
  }
control calls with body


  group {
    item { "Item 1" }
    item { "Item 2" }
  }
variable declarations

var b = true
variable declarations

var b = true
var b : Bool = true
variable declarations

var b = true
var b : Bool = true
var newTask = Task()
variable declarations

var   b = true
var   b : Bool = true
var   newTask = Task()
var   newTask : Task = Task()
when


var b = true

checkBox(b)

when(b) {
  label("Yep")
} else {
  label("Nope")
}
list


var nums = [1, 2, 3]

group {
  list(n in nums) {
    item { label(n) }
  }
}
inline HTML


<img src="img/icon.png"/>
inline HTML


   <img src="img/icon.png"/>


<div class=selected ? selectedStyle
                    : notSelectedStyle>
  ...
</div>
script blocks
         avoid if possible



var n = -1
script {
  n = Math.sqrt(9);
}
higher-order controls
demo
styling
style bigAndBlue {
  color:     blue;
  font-size: 40px;
}
Style
style bigAndBlue {
  color:      blue;
  font-size: 40px;
}
control block(style : Style) {
  ...
}

block(bigAndBlueStyle) {
  label("I am big and blue!");
}
style $baseColor = rgb(100, 100, 100)

style myStyle {
  color:     rgb($baseColor.r+10,
                 $baseColor.g+50,
                 $baseColor.b-20);
  font-size: 20px;
}
style mixin borderRadiusMixin($radius) {
  -moz-border-radius: $radius;
  -webkit-border-radius: $radius;
  border-radius: $radius;
}
style mixin borderRadiusMixin($radius) {
  -moz-border-radius: $radius;
  -webkit-border-radius: $radius;
  border-radius: $radius;
}


style myStyle {
  color:     $baseColor;
  borderRadiusMixin(10px);
}
demo
data modeling
   & query
entity   Task {
  name   : String (searchable)
  done   : Bool
  tags   : Collection<Tag> (inverse: tasks)
}


entity Tag {
  name : String (searchable)
  tasks : Collection<Task> (inverse: tags)
}
var newTask = Task(name="New task");
newTask.done = false;
add(newTask);
var doneTasks = Task.all()
Collection<Task>
var doneTasks = Task.all()
Collection<Task>
var doneTasks = Task.all()
                .filter("done", "=", true)
                .order("date", false)
                .limit(10);
Collection<Task>
var tagDoneTasks = tag.tasks
                .filter("done", "=", true)
                .order("date", false)
                .limit(10);
Collection<Task>
var doneTasks = Task.all()
Collection<Task>
var doneTasks = Task.all()
                where done == true
                order by date desc
                limit 10;
Collection<Task>
var tagDoneTasks = tag.tasks
                   where done == true
                   order by date desc
                   limit 10;
Collection<Task>
var searchTasks = Task.search("task")
                  where done == true
                  limit 10;
screen root() {
  header("Tasks")
  group {
    list(t in Task.all() order by date desc) {
      item { label(t.name) }
    }
  }
}
scripting
script in ui


label("Total tasks: " + Task.all().count())
script in ui


label("Total tasks: " + Task.all().count())


button("Click me", onclick={
   alert("You clicked me!");
})
var n = 7;
var n2 = Math.round(n/2);

if(n2 > 3) {
  alert("More than three!");
} else {
  alert("Less than three!");
}
type inference
var n = 7;
var n2 = Math.round(n/2);

if(n2 > 3) {
  alert("More than three!");
} else {
  alert("Less than three!");
}
var done = 0;
foreach(t in Task.all()) {
  if(t.done) {
    done = done + 1;
  }
}
var done = 0;
foreach(t in Task.all()) {
  if(t.done) {
    done = done + 1;
  }
}



var done = (Task.all()
            where done == true)
           .count();
function sqr(n : Num) : Num {
  return n * n;
}
demo: todo list
web service
  access
service SomeService {
  resource tasks() : JSON {
    uri = "/tasks"
  }

    resource search(query : String) : JSON {
      uri = "/search?q=" + escape(query)
    }
}
ajax same-source restriction


service Twitter {
  resource trends() : JSON {
    uri = "/_proxy/api.twitter.com/1/trends.json"
  }

    resource search(query : String) : JSON {
      uri = "/_proxy/search.twitter.com/search.json?q="
            + escape(query)
    }
}
http://api.twitter.com/1/trends.json


{"trends":
  [{"url":"http://search.twitter.com/search?q=...",
     "name":"#ihaveadream"},
    {"url":"http://search.twitter.com/search?q=...",
     "name":"#mlkday"}
    ...
  ]
}
type Trend {
  name : String
  url : String
}

function trendsMapper(json : JSON) : [Trend] {
  return json.trends;
}
resource trends() : JSON {
  uri = "/_proxy/api.twitter.com/1/trends.json"
  mapper = trendsMapper
}
screen root() {
  var trends = Twitter.trends()

    header("Twitter trends")
    group {
      list(topic in trends) {
        item {
          label(topic.name)
        }
      }
    }
}
user interface

   styling

data modeling

  scripting

web services
limitations


slower than native


   no native UI


not great for games
behind the scenes
goals


 portability


completeness


  coverage
goals


 portability   web


completeness


  coverage
goals


 portability   web


completeness   100% code gen


  coverage
design bottom-up
roadmap
1. design core abstractions + native interface
roadmap
1. design core abstractions + native interface

2. enable user land abstractions
roadmap
1. design core abstractions + native interface

2. enable user land abstractions

3a. support successful ULAs with syntax
roadmap
1. design core abstractions + native interface

2. enable user land abstractions

3a. support successful ULAs with syntax

3b. support common native interface cases
    with core abstractions
roadmap
1. design core abstractions + native interface

2. enable user land abstractions

3a. support successful ULAs with syntax

3b. support common native interface cases
    with core abstractions
core abstraction:

synchronous programming


      no more asynchronous
          spaghetti code
synchronous programming


var results = Task.all().list();
for(var i = 0; i < results.length; i++) {
   alert(results[i].name);
}
render page




                 time
query database
 and process
    results




      ...
render page




                                  time
                 query database
browser freeze    and process
                     results




                       ...
render page

 send query




                time
     ...


process query
    result


     ...
asynchronous programming


Task.all.list(function(results) {
    for(var i = 0; i < results.length; i++) {
       alert(results[i].name);
    }
  });
...
Task.all().list(function(results) {
  alert("Hello, ");
});
alert("world!");
Task.all().list(function(results) {
  alert("Hello, ");
});                      breaks sequential
alert("world!");
                     execution assumption
Task.all().list(function(results) {
  // make changes
  ...
  persistence.flush(function() {
    alert("Changes saved!");
  });
});
continuation-passing style
     transformation
function displayLocationAndReturn() : Coordinates {
  var position = mobl::location::getPosition();
  log("Lat: " + position.latitude);
  log("Long: " + position.longitude);
  return position;
}
function displayLocationAndReturn() : Coordinates {
  var position = mobl::location::getPosition();
  log("Lat: " + position.latitude);
  log("Long: " + position.longitude);
  return position;
}




function displayLocationAndReturn(callback) {
   mobl.location.getPosition(function(position) {
     console.log("Lat: " + position.latitude);
     console.log("Long: " + position.longitude);
     callback(position);
   });
};
function displayLocationAndReturn() : Coordinates {
  var position = mobl::location::getPosition();
  log("Lat: " + position.latitude);
  log("Long: " + position.longitude);
  return position;
}




function displayLocationAndReturn(callback) {
   mobl.location.getPosition(function(position) {
     console.log("Lat: " + position.latitude);
     console.log("Long: " + position.longitude);
     callback(position);
   });
};
function displayLocationAndReturn() : Coordinates {
  var position = mobl::location::getPosition();
  log("Lat: " + position.latitude);
  log("Long: " + position.longitude);
  return position;
}




function displayLocationAndReturn(callback) {
   mobl.location.getPosition(function(position) {
     console.log("Lat: " + position.latitude);
     console.log("Long: " + position.longitude);
     callback(position);
   });
};
core abstraction:

 data binding

no more copying data from and
            to UI
screen root() {
  var n = 8
  label(n * n)
  button("Inc", onclick={
     n = n + 1;
  })
}
var n = 8



var n = ref(8);
var n = 8



       var n = ref(8);

Observable
- set(value)
- get()
- addEventListener(eventType, callback)
label(n * n)




var node = $("<span>");
node.text(n.get() * n.get());
n.addEventListener("change", function() {
    node.text(n.get() * n.get());
});
root.append(node);
label(n * n)




var node = $("<span>");
node.text(n.get() * n.get());
n.addEventListener("change", function() {
    node.text(n.get() * n.get());
});
root.append(node);
label(n * n)




var node = $("<span>");
node.text(n.get() * n.get());
n.addEventListener("change", function() {
    node.text(n.get() * n.get());
});
root.append(node);
button("Inc", onclick={
     n = n + 1;
  })




var node = $("<button ...>");
node.text("Inc");
node.click(function() {
  n.set(n.get() + 1);
});
root.append(node);
button("Inc", onclick={
     n = n + 1;
  })




var node = $("<button ...>");
node.text("Inc");
node.click(function() {
  n.set(n.get() + 1);
});
root.append(node);
screen root() {
  var n = 8
  label(n * n)
  button("Inc", onclick={
     n = n + 1;
  })
}
screen root() {
  var n = 8
  label(n * n)
  button("Inc", onclick={
     n = n + 1;
  })
}
screen root() {
  var n = 8
  label(n * n)
  button("Inc", onclick={
     n = n + 1;
  })
}
core abstraction:

data modeling & query



       no more SQL
uses persistence.js
  http://persistencejs.org
entity Task {
  name          :   String (searchable)
  description   :   String (searchable)
  done          :   Bool
  date          :   DateTime
}




var Task = persistence.define('Task', {
  name:        'VARCHAR(255)',
  description: 'VARCHAR(255)',
  done:        'BOOL',
  date:        'DATE'
});

Task.textIndex('description');
Task.textIndex('name');
foreach(t in Task.all()) {
     alert(t.name);
   }




Task.all().forEach(function(t) {
  alert(t.name);
});
foreach(t in Task.all() where done == true) {
        alert(t.name);
      }




Task.all().filter("done", "=", true).forEach(function(t) {
  alert(t.name);
});
native interface
external entity MyEntity

external type MyType

external control contextMenu()

external screen specialScreen()

external sync function add(o : Object) : void

external style myStyle
external sync function add(o : Object) : void

<javascript>
__ns.add = function(o) {
    persistence.add(o);
};
</javascript>
load styles/default.css
load js/persistence.js
where do abstractions
    come from?
where do abstractions
    come from?

        domain
where do abstractions
    come from?

        domain

      experience
domain
screen



         domain
control

screen



         domain
control

screen              entity



         domain
control

screen              entity



         domain

 event
control

screen                 entity



         domain

 event              web service
experience
other DSLs



         experience
other DSLs



         experience


             programming
              paradigms
other DSLs                 annoyances



         experience


             programming
              paradigms
roadmap
1. design core abstractions + native interface

2. enable user land abstractions

3a. support successful ULAs with syntax

3b. support common native interface cases
    with core abstractions
goal


       compiler small


library large (and extensible)
how?

- built-in types
- built-in controls

+ native interface
+ sufficiently low-level primitives
+ abstraction mechanisms (screens,
  controls, functions, types)
native interface
external type Object {
  sync function toString() : String
}

external type String : Object {
  length : Num
  sync function charAt(index : Num) : String
  sync function charCodeAt(index : Num) : Num
  ...
}

external   type   Num : Object { }
external   type   Bool : Object { }
external   type   Dynamic : Object { }
external   type   Style : String { }

external type Array<T> {
  length : Num

    sync function get(n : Num) : T
    sync function push(item : T) : void
    sync function join(sep : String) : String
    ...
}
low-level primitives


control image(url : String, onclick : Callback = null) {
  <img src=url onclick=onclick/>
}
low-level primitives

control slideupBlock() {
  div@<div onclick={
     div.slideUp();
  }>
     elements()
  </div>
}

...

slideupBlock {
  label("Click me to slide up")
}
low-level primitives

     control slideupBlock() {
JQuery div@<div onclick={
          div.slideUp();
       }>
          elements()
       </div>
     }

      ...

      slideupBlock {
        label("Click me to slide up")
      }
roadmap
1. design core abstractions + native interface

2. enable user land abstractions

3a. support successful ULAs with syntax

3b. support common native interface cases
    with core abstractions
var doneTasks = Task.all()
var doneTasks = Task.all()
                .filter("done", "=", true)
                .order("date", false)
                .limit(10);
var doneTasks = Task.all()
var doneTasks = Task.all()
                where done == true
                order by date desc
                limit 10;
roadmap
1. design core abstractions + native interface

2. enable user land abstractions

3a. support successful ULAs with syntax

3b. support common native interface cases
    with core abstractions
load styles/default.css
div.header {
  background: -webkit-gradient(linear, 0% 0%, 0% 100%,
                 from(rgb(72, 100, 180)), to(rgb(32, 60, 140)));
  background: -moz-linear-gradient(top, rgb(72, 100, 180),
                 rgb(32, 60, 140));
  padding: 0;
  height: 2.3em;
  font-size: 1.3em;
  line-height: 2.3em;
  font-weight: bold;
  text-align: center;
  text-shadow: #477 0px 1px 1px;
  color: white;
  font-weight: bold;
  margin: 0;
  z-index: 2;
}
issue

out of sight,
                        no checking
out of mind


    <div class="headerr">
    </div>
little abstraction

div.header {
  background: -webkit-gradient(linear, 0% 0%, 0% 100%,
                 from(rgb(72, 100, 180)), to(rgb(32, 60, 140)));
  background: -moz-linear-gradient(top, rgb(72, 100, 180),
                 rgb(32, 60, 140));
  padding: 0;
  height: 2.3em;
  font-size: 1.3em;
  line-height: 2.3em;
  font-weight: bold;
  text-align: center;
  text-shadow: #477 0px 1px 1px;
  color: white;
  font-weight: bold;
  margin: 0;
  z-index: 2;
}
little abstraction

div.header {                                             mixins
  background: -webkit-gradient(linear, 0% 0%, 0% 100%,
                 from(rgb(72, 100, 180)), to(rgb(32, 60, 140)));
  background: -moz-linear-gradient(top, rgb(72, 100, 180),
                 rgb(32, 60, 140));
  padding: 0;
  height: 2.3em;
  font-size: 1.3em;
  line-height: 2.3em;
  font-weight: bold;
  text-align: center;
  text-shadow: #477 0px 1px 1px;
  color: white;
  font-weight: bold;
  margin: 0;
  z-index: 2;
}
1. design core abstractions + native interface

2. enable user land abstractions

3a. support successful ULAs with syntax

3b. support common native interface cases
    with core abstractions
http://www.mobl-lang.org

More Related Content

What's hot (20)

PDF
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
PDF
ES6, WTF?
James Ford
 
PDF
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Tsuyoshi Yamamoto
 
PDF
Rのスコープとフレームと環境と
Takeshi Arabiki
 
PDF
Elm: give it a try
Eugene Zharkov
 
PDF
RxSwift 시작하기
Suyeol Jeon
 
PDF
Rデバッグあれこれ
Takeshi Arabiki
 
PDF
Nosql hands on handout 04
Krishna Sankar
 
PDF
Pdxpugday2010 pg90
Selena Deckelmann
 
DOC
Baitap tkw
nguyenquy2101
 
KEY
Introduction to Groovy
André Faria Gomes
 
PPTX
QA Fest 2019. Saar Rachamim. Developing Tools, While Testing
QAFest
 
PDF
Cycle.js: Functional and Reactive
Eugene Zharkov
 
PDF
Is HTML5 Ready? (workshop)
Remy Sharp
 
PDF
Go ahead, make my day
Tor Ivry
 
PDF
Damn Fine CoffeeScript
niklal
 
PDF
Building Real Time Systems on MongoDB Using the Oplog at Stripe
MongoDB
 
PDF
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Fabio Collini
 
PDF
Fertile Ground: The Roots of Clojure
Mike Fogus
 
PDF
Javascript
Vlad Ifrim
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
ES6, WTF?
James Ford
 
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Tsuyoshi Yamamoto
 
Rのスコープとフレームと環境と
Takeshi Arabiki
 
Elm: give it a try
Eugene Zharkov
 
RxSwift 시작하기
Suyeol Jeon
 
Rデバッグあれこれ
Takeshi Arabiki
 
Nosql hands on handout 04
Krishna Sankar
 
Pdxpugday2010 pg90
Selena Deckelmann
 
Baitap tkw
nguyenquy2101
 
Introduction to Groovy
André Faria Gomes
 
QA Fest 2019. Saar Rachamim. Developing Tools, While Testing
QAFest
 
Cycle.js: Functional and Reactive
Eugene Zharkov
 
Is HTML5 Ready? (workshop)
Remy Sharp
 
Go ahead, make my day
Tor Ivry
 
Damn Fine CoffeeScript
niklal
 
Building Real Time Systems on MongoDB Using the Oplog at Stripe
MongoDB
 
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Fabio Collini
 
Fertile Ground: The Roots of Clojure
Mike Fogus
 
Javascript
Vlad Ifrim
 

Viewers also liked (6)

PDF
Avoiding JavaScript Pitfalls Through Tree Hugging
zefhemel
 
PDF
Frontrow conf
zefhemel
 
PDF
Internal DSLs
zefhemel
 
PDF
Cloud9 IDE Talk at meet.js Poznań
zefhemel
 
PDF
WebWorkFlow
zefhemel
 
PDF
PIL - A Platform Independent Language
zefhemel
 
Avoiding JavaScript Pitfalls Through Tree Hugging
zefhemel
 
Frontrow conf
zefhemel
 
Internal DSLs
zefhemel
 
Cloud9 IDE Talk at meet.js Poznań
zefhemel
 
WebWorkFlow
zefhemel
 
PIL - A Platform Independent Language
zefhemel
 
Ad

Similar to mobl - model-driven engineering lecture (20)

PDF
mobl
zefhemel
 
PDF
Software Language Design & Engineering
Eelco Visser
 
PDF
mobl
Eelco Visser
 
PDF
mobl: Een DSL voor mobiele applicatieontwikkeling
Devnology
 
KEY
CouchDB on Android
Sven Haiges
 
PDF
Refactoring to Macros with Clojure
Dmitry Buzdin
 
PPTX
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Domenic Denicola
 
KEY
Paris js extensions
erwanl
 
PPTX
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
Daniel Fisher
 
PDF
Play vs Rails
Daniel Cukier
 
PDF
EclipseCon2011 Cross-Platform Mobile Development with Eclipse
Heiko Behrens
 
PDF
Introduction to Scalding and Monoids
Hugo Gävert
 
KEY
Scala on Your Phone
Michael Galpin
 
PPT
JQuery Flot
Arshavski Alexander
 
PDF
The Ring programming language version 1.5.4 book - Part 40 of 185
Mahmoud Samir Fayed
 
PDF
Backbone.js — Introduction to client-side JavaScript MVC
pootsbook
 
PPTX
JavaScript Advanced - Useful methods to power up your code
Laurence Svekis ✔
 
PDF
Monitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
InfluxData
 
PDF
Software Language Design & Engineering: Mobl & Spoofax
Eelco Visser
 
PDF
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
mobl
zefhemel
 
Software Language Design & Engineering
Eelco Visser
 
mobl: Een DSL voor mobiele applicatieontwikkeling
Devnology
 
CouchDB on Android
Sven Haiges
 
Refactoring to Macros with Clojure
Dmitry Buzdin
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Domenic Denicola
 
Paris js extensions
erwanl
 
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
Daniel Fisher
 
Play vs Rails
Daniel Cukier
 
EclipseCon2011 Cross-Platform Mobile Development with Eclipse
Heiko Behrens
 
Introduction to Scalding and Monoids
Hugo Gävert
 
Scala on Your Phone
Michael Galpin
 
JQuery Flot
Arshavski Alexander
 
The Ring programming language version 1.5.4 book - Part 40 of 185
Mahmoud Samir Fayed
 
Backbone.js — Introduction to client-side JavaScript MVC
pootsbook
 
JavaScript Advanced - Useful methods to power up your code
Laurence Svekis ✔
 
Monitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
InfluxData
 
Software Language Design & Engineering: Mobl & Spoofax
Eelco Visser
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
Ad

Recently uploaded (20)

PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
July Patch Tuesday
Ivanti
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Python basic programing language for automation
DanialHabibi2
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
July Patch Tuesday
Ivanti
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Python basic programing language for automation
DanialHabibi2
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 

mobl - model-driven engineering lecture