This document discusses Mirah and Dubious, a staticly typed language and web framework. Mirah compiles to JVM bytecode for fast performance without a runtime. Dubious allows writing code similar to Rails and works on Google App Engine. Examples show Dubious controllers and templates are similar to Rails while models are simpler. It spins up quickly and works well on App Engine.
The document provides information about running Ruby applications on Google App Engine using JRuby. It discusses key features and limitations of App Engine, how to set up the development environment, deploy apps, and pay-as-you-go billing. It also introduces Mirah as a way to write Java code using a Ruby-like syntax and compiles to Java bytecode.
Brent Baxter and Ken Rimple
The talk starts with a basic overview of the Grails framework. We will cover the basic building blocks (domains, controllers, views, grails command line), and build a small application.
During the talk, we will configure Grails to connect to PostgreSQL, introduce strategies for mapping the Grails ORM (GORM) domain objects to familiar PostgreSQL features such as keys, indexes, data types, and other options. We will also discuss executing stored procedures from Grails.
At the end of the talk, the developer will come away with a good high-level overview of the grails platform, and how it can be used to develop applications based on a PostgreSQL database.
Building a Compiler in JRuby - Chris Umbel at Jan 24th 2012 PittJUG meeting showing how you can create a language using JRuby tools to parse the language an emit JVM bytecode.
Rubinius - What Have You Done For Me Latelyevanphx
The document discusses the Rubinius programming language implementation. It describes Rubinius' philosophy of allowing Ruby code to extend the system, its compatibility with Ruby versions 1.8.7 and Rails frameworks, and its use of techniques like just-in-time compilation to machine code and sophisticated garbage collection. Additionally, it mentions several spin-off projects from Rubinius like RubySpec and FFI, and encourages developers to build tools that interface with Rubinius APIs.
This document introduces Akka, an open-source toolkit for building highly concurrent, distributed, and fault-tolerant applications on the JVM. It discusses how Akka addresses the difficulties of building correct highly concurrent, scalable, and fault-tolerant systems using traditional tools by providing a unified programming model based on the actor model. The document outlines key aspects of Akka including actors, dispatchers, agents, fault tolerance through supervision hierarchies and mechanisms like linking and trapping exits.
This document discusses loading data in Ext GWT applications. It provides an overview of models, loaders, data proxies, and data readers used to load data from remote sources. Examples are given of using different data proxies like ScriptTagProxy, HttpProxy and RpcProxy. It also shows a paging loader example to load data from the server using paging. The presentation aims to explain the key components and patterns involved in loading and managing remote data in Ext GWT applications.
This document discusses Mirah and Dubious, a staticly typed language and web framework. Mirah compiles to JVM bytecode for fast performance without a runtime. Dubious allows writing code similar to Rails and works on Google App Engine. Examples show Dubious controllers and templates are similar to Rails while models are simpler. It spins up quickly and works well on App Engine.
The document provides information about running Ruby applications on Google App Engine using JRuby. It discusses key features and limitations of App Engine, how to set up the development environment, deploy apps, and pay-as-you-go billing. It also introduces Mirah as a way to write Java code using a Ruby-like syntax and compiles to Java bytecode.
Brent Baxter and Ken Rimple
The talk starts with a basic overview of the Grails framework. We will cover the basic building blocks (domains, controllers, views, grails command line), and build a small application.
During the talk, we will configure Grails to connect to PostgreSQL, introduce strategies for mapping the Grails ORM (GORM) domain objects to familiar PostgreSQL features such as keys, indexes, data types, and other options. We will also discuss executing stored procedures from Grails.
At the end of the talk, the developer will come away with a good high-level overview of the grails platform, and how it can be used to develop applications based on a PostgreSQL database.
Building a Compiler in JRuby - Chris Umbel at Jan 24th 2012 PittJUG meeting showing how you can create a language using JRuby tools to parse the language an emit JVM bytecode.
Rubinius - What Have You Done For Me Latelyevanphx
The document discusses the Rubinius programming language implementation. It describes Rubinius' philosophy of allowing Ruby code to extend the system, its compatibility with Ruby versions 1.8.7 and Rails frameworks, and its use of techniques like just-in-time compilation to machine code and sophisticated garbage collection. Additionally, it mentions several spin-off projects from Rubinius like RubySpec and FFI, and encourages developers to build tools that interface with Rubinius APIs.
This document introduces Akka, an open-source toolkit for building highly concurrent, distributed, and fault-tolerant applications on the JVM. It discusses how Akka addresses the difficulties of building correct highly concurrent, scalable, and fault-tolerant systems using traditional tools by providing a unified programming model based on the actor model. The document outlines key aspects of Akka including actors, dispatchers, agents, fault tolerance through supervision hierarchies and mechanisms like linking and trapping exits.
This document discusses loading data in Ext GWT applications. It provides an overview of models, loaders, data proxies, and data readers used to load data from remote sources. Examples are given of using different data proxies like ScriptTagProxy, HttpProxy and RpcProxy. It also shows a paging loader example to load data from the server using paging. The presentation aims to explain the key components and patterns involved in loading and managing remote data in Ext GWT applications.
Deploying and Maintaining an Enterprise OpenLDAP DirectoryJohn Woodell
I have had the opportunity to deploy LDAP directories and consistent sign-on to small startups where very little infrastructure was in place, and management embraced open software. The technical and idealogical barriers are much larger when deploying these same concepts within a large corporation, with existing data tied up in legacy systems, and management that is leery of 'free' software.
OSCON 2004, July 28, Portland, OR
Enterprise Mail and Calendaring with Open SoftwareJohn Woodell
While migrating my company from Lotus Notes to MozillaMail and WebCalendar I found that trailing users and deploying the client software was only a small part of the project. Supporting both the Lotus Domino and IMAP/LDAP/SMTP servers indefinitely was a challenge.
OSCON 2004, July 28, Portland, OR
We discovered Mirah while looking for a way to remedy JRuby spin-up delays on App Engine. Dubious, a simple framework written in Mirah, but following Rails conventions, that provides unprecidented scalability and efficiency.
The document discusses using JRuby and Duby to run Ruby on Rails applications on Google App Engine. It provides an overview of App Engine's key features and limitations. It then discusses how JRuby allows Ruby code to access Java APIs and libraries on App Engine. The document outlines milestones in developing JRuby for App Engine and current issues. It also introduces the dm-appengine and Duby libraries for modeling data and building applications in Ruby.
This document discusses JRuby and Duby for running Ruby and Ruby-like applications on Google App Engine. It introduces Google App Engine as a platform-as-a-service that handles scaling and infrastructure. JRuby allows running Ruby applications on App Engine by compiling to Java bytecode. Duby is a new language that compiles to Java and has Ruby-like syntax, avoiding runtime issues. Examples show how to create a simple blog application in Duby using App Engine services and data modeling.
This document discusses deploying Ruby on Rails applications to Google App Engine using JRuby and a servlet container. It outlines reasons to use JRuby, Rails 3, Sinatra, and DataMapper, and how they can run on App Engine. It also provides an overview of the App Engine architecture, development server, deployment process, APIs available to JRuby applications, billing quotas, and resources for learning more.
The document discusses Google App Engine and options for building applications on it using Ruby and a new language called Duby. It provides an overview of App Engine architecture and billing models. It then covers using Ruby with App Engine via JRuby, frameworks like Rack and Sinatra, and the DataMapper ORM. Duby is introduced as a statically-typed language inspired by Ruby syntax that compiles to Java bytecode for the App Engine environment. Examples show a simple blog application built in both Ruby and Duby styles.
This document discusses JRuby on Google App Engine. It provides an overview of Google App Engine, quotas and billing, current issues with JRuby on App Engine, required gems, the development app server, deployment process, available APIs, and sample code for using DataMapper and associations. It also lists resources for learning more about JRuby on App Engine.
The document discusses JRuby on Google App Engine, including key features of App Engine, quotas and billing, limitations, the current issues with JRuby on App Engine, App Engine gems, the development environment, deployment process, APIs, and milestones in the development of JRuby on App Engine. It also includes a short biography and discussion of learning experiences from building an iPhone app that uses App Engine and JRuby as a backend.
Full-RAG: A modern architecture for hyper-personalizationZilliz
Mike Del Balso, CEO & Co-Founder at Tecton, presents "Full RAG," a novel approach to AI recommendation systems, aiming to push beyond the limitations of traditional models through a deep integration of contextual insights and real-time data, leveraging the Retrieval-Augmented Generation architecture. This talk will outline Full RAG's potential to significantly enhance personalization, address engineering challenges such as data management and model training, and introduce data enrichment with reranking as a key solution. Attendees will gain crucial insights into the importance of hyperpersonalization in AI, the capabilities of Full RAG for advanced personalization, and strategies for managing complex data integrations for deploying cutting-edge AI solutions.
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Building RAG with self-deployed Milvus vector database and Snowpark Container...Zilliz
This talk will give hands-on advice on building RAG applications with an open-source Milvus database deployed as a docker container. We will also introduce the integration of Milvus with Snowpark Container Services.
Maruthi Prithivirajan, Head of ASEAN & IN Solution Architecture, Neo4j
Get an inside look at the latest Neo4j innovations that enable relationship-driven intelligence at scale. Learn more about the newest cloud integrations and product enhancements that make Neo4j an essential choice for developers building apps with interconnected data and generative AI.
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
UiPath Test Automation using UiPath Test Suite series, part 5DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 5. In this session, we will cover CI/CD with devops.
Topics covered:
CI/CD with in UiPath
End-to-end overview of CI/CD pipeline with Azure devops
Speaker:
Lyndsey Byblow, Test Suite Sales Engineer @ UiPath, Inc.
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIVladimir Iglovikov, Ph.D.
Presented by Vladimir Iglovikov:
- https://www.linkedin.com/in/iglovikov/
- https://x.com/viglovikov
- https://www.instagram.com/ternaus/
This presentation delves into the journey of Albumentations.ai, a highly successful open-source library for data augmentation.
Created out of a necessity for superior performance in Kaggle competitions, Albumentations has grown to become a widely used tool among data scientists and machine learning practitioners.
This case study covers various aspects, including:
People: The contributors and community that have supported Albumentations.
Metrics: The success indicators such as downloads, daily active users, GitHub stars, and financial contributions.
Challenges: The hurdles in monetizing open-source projects and measuring user engagement.
Development Practices: Best practices for creating, maintaining, and scaling open-source libraries, including code hygiene, CI/CD, and fast iteration.
Community Building: Strategies for making adoption easy, iterating quickly, and fostering a vibrant, engaged community.
Marketing: Both online and offline marketing tactics, focusing on real, impactful interactions and collaborations.
Mental Health: Maintaining balance and not feeling pressured by user demands.
Key insights include the importance of automation, making the adoption process seamless, and leveraging offline interactions for marketing. The presentation also emphasizes the need for continuous small improvements and building a friendly, inclusive community that contributes to the project's growth.
Vladimir Iglovikov brings his extensive experience as a Kaggle Grandmaster, ex-Staff ML Engineer at Lyft, sharing valuable lessons and practical advice for anyone looking to enhance the adoption of their open-source projects.
Explore more about Albumentations and join the community at:
GitHub: https://github.com/albumentations-team/albumentations
Website: https://albumentations.ai/
LinkedIn: https://www.linkedin.com/company/100504475
Twitter: https://x.com/albumentations
Deploying and Maintaining an Enterprise OpenLDAP DirectoryJohn Woodell
I have had the opportunity to deploy LDAP directories and consistent sign-on to small startups where very little infrastructure was in place, and management embraced open software. The technical and idealogical barriers are much larger when deploying these same concepts within a large corporation, with existing data tied up in legacy systems, and management that is leery of 'free' software.
OSCON 2004, July 28, Portland, OR
Enterprise Mail and Calendaring with Open SoftwareJohn Woodell
While migrating my company from Lotus Notes to MozillaMail and WebCalendar I found that trailing users and deploying the client software was only a small part of the project. Supporting both the Lotus Domino and IMAP/LDAP/SMTP servers indefinitely was a challenge.
OSCON 2004, July 28, Portland, OR
We discovered Mirah while looking for a way to remedy JRuby spin-up delays on App Engine. Dubious, a simple framework written in Mirah, but following Rails conventions, that provides unprecidented scalability and efficiency.
The document discusses using JRuby and Duby to run Ruby on Rails applications on Google App Engine. It provides an overview of App Engine's key features and limitations. It then discusses how JRuby allows Ruby code to access Java APIs and libraries on App Engine. The document outlines milestones in developing JRuby for App Engine and current issues. It also introduces the dm-appengine and Duby libraries for modeling data and building applications in Ruby.
This document discusses JRuby and Duby for running Ruby and Ruby-like applications on Google App Engine. It introduces Google App Engine as a platform-as-a-service that handles scaling and infrastructure. JRuby allows running Ruby applications on App Engine by compiling to Java bytecode. Duby is a new language that compiles to Java and has Ruby-like syntax, avoiding runtime issues. Examples show how to create a simple blog application in Duby using App Engine services and data modeling.
This document discusses deploying Ruby on Rails applications to Google App Engine using JRuby and a servlet container. It outlines reasons to use JRuby, Rails 3, Sinatra, and DataMapper, and how they can run on App Engine. It also provides an overview of the App Engine architecture, development server, deployment process, APIs available to JRuby applications, billing quotas, and resources for learning more.
The document discusses Google App Engine and options for building applications on it using Ruby and a new language called Duby. It provides an overview of App Engine architecture and billing models. It then covers using Ruby with App Engine via JRuby, frameworks like Rack and Sinatra, and the DataMapper ORM. Duby is introduced as a statically-typed language inspired by Ruby syntax that compiles to Java bytecode for the App Engine environment. Examples show a simple blog application built in both Ruby and Duby styles.
This document discusses JRuby on Google App Engine. It provides an overview of Google App Engine, quotas and billing, current issues with JRuby on App Engine, required gems, the development app server, deployment process, available APIs, and sample code for using DataMapper and associations. It also lists resources for learning more about JRuby on App Engine.
The document discusses JRuby on Google App Engine, including key features of App Engine, quotas and billing, limitations, the current issues with JRuby on App Engine, App Engine gems, the development environment, deployment process, APIs, and milestones in the development of JRuby on App Engine. It also includes a short biography and discussion of learning experiences from building an iPhone app that uses App Engine and JRuby as a backend.
Full-RAG: A modern architecture for hyper-personalizationZilliz
Mike Del Balso, CEO & Co-Founder at Tecton, presents "Full RAG," a novel approach to AI recommendation systems, aiming to push beyond the limitations of traditional models through a deep integration of contextual insights and real-time data, leveraging the Retrieval-Augmented Generation architecture. This talk will outline Full RAG's potential to significantly enhance personalization, address engineering challenges such as data management and model training, and introduce data enrichment with reranking as a key solution. Attendees will gain crucial insights into the importance of hyperpersonalization in AI, the capabilities of Full RAG for advanced personalization, and strategies for managing complex data integrations for deploying cutting-edge AI solutions.
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Building RAG with self-deployed Milvus vector database and Snowpark Container...Zilliz
This talk will give hands-on advice on building RAG applications with an open-source Milvus database deployed as a docker container. We will also introduce the integration of Milvus with Snowpark Container Services.
Maruthi Prithivirajan, Head of ASEAN & IN Solution Architecture, Neo4j
Get an inside look at the latest Neo4j innovations that enable relationship-driven intelligence at scale. Learn more about the newest cloud integrations and product enhancements that make Neo4j an essential choice for developers building apps with interconnected data and generative AI.
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
UiPath Test Automation using UiPath Test Suite series, part 5DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 5. In this session, we will cover CI/CD with devops.
Topics covered:
CI/CD with in UiPath
End-to-end overview of CI/CD pipeline with Azure devops
Speaker:
Lyndsey Byblow, Test Suite Sales Engineer @ UiPath, Inc.
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIVladimir Iglovikov, Ph.D.
Presented by Vladimir Iglovikov:
- https://www.linkedin.com/in/iglovikov/
- https://x.com/viglovikov
- https://www.instagram.com/ternaus/
This presentation delves into the journey of Albumentations.ai, a highly successful open-source library for data augmentation.
Created out of a necessity for superior performance in Kaggle competitions, Albumentations has grown to become a widely used tool among data scientists and machine learning practitioners.
This case study covers various aspects, including:
People: The contributors and community that have supported Albumentations.
Metrics: The success indicators such as downloads, daily active users, GitHub stars, and financial contributions.
Challenges: The hurdles in monetizing open-source projects and measuring user engagement.
Development Practices: Best practices for creating, maintaining, and scaling open-source libraries, including code hygiene, CI/CD, and fast iteration.
Community Building: Strategies for making adoption easy, iterating quickly, and fostering a vibrant, engaged community.
Marketing: Both online and offline marketing tactics, focusing on real, impactful interactions and collaborations.
Mental Health: Maintaining balance and not feeling pressured by user demands.
Key insights include the importance of automation, making the adoption process seamless, and leveraging offline interactions for marketing. The presentation also emphasizes the need for continuous small improvements and building a friendly, inclusive community that contributes to the project's growth.
Vladimir Iglovikov brings his extensive experience as a Kaggle Grandmaster, ex-Staff ML Engineer at Lyft, sharing valuable lessons and practical advice for anyone looking to enhance the adoption of their open-source projects.
Explore more about Albumentations and join the community at:
GitHub: https://github.com/albumentations-team/albumentations
Website: https://albumentations.ai/
LinkedIn: https://www.linkedin.com/company/100504475
Twitter: https://x.com/albumentations
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024Neo4j
Neha Bajwa, Vice President of Product Marketing, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
20 Comprehensive Checklist of Designing and Developing a WebsitePixlogix Infotech
Dive into the world of Website Designing and Developing with Pixlogix! Looking to create a stunning online presence? Look no further! Our comprehensive checklist covers everything you need to know to craft a website that stands out. From user-friendly design to seamless functionality, we've got you covered. Don't miss out on this invaluable resource! Check out our checklist now at Pixlogix and start your journey towards a captivating online presence today.
2. Mirah & Dubious
A bold and beautiful way to write Java,
plus a new framework for App Engine
Charles Nutter
John Woodell
Aug 30, 2010
2
Tuesday, August 31, 2010
3. Mirah
A pragmatic blend of Ruby and Java
Tuesday, August 31, 2010
4. Me
• Charles Oliver Nutter
• Engine Yard, Inc
• headius@headius.com
• @headius
• JRuby core developer
• Mirah creator
Tuesday, August 31, 2010
5. Ruby
• Beautiful language
• Clean syntax
• Easy-to-use closures
• Nice core libraries
• “Slow” language
• Very dynamic == hard to optimize
Tuesday, August 31, 2010
6. Java
• High-performance language
• Mostly static typing
• Full system optimizations
• Primitive math operations
• Ugly language
• (C++)-- of 1995
Tuesday, August 31, 2010
7. Mirah
• “Apparent features” of Ruby
• Syntax
• Closures and iterators
• Dynamic-feeling behaviors
• Performance, typing like Java
• As fast as Java for almost everything
Tuesday, August 31, 2010
8. What If This...
public class Foo {
private int a;
public Foo(int a) {
this.a = a;
}
public void show() {
System.out.println(a);
}
}
Tuesday, August 31, 2010
9. ...Could Be This
class Foo
def initialize(a)
@a = a
end
def show
puts @a
end
end
Tuesday, August 31, 2010
10. Mirah
class Foo
def initialize(a:int)
@a = a
end
def show
puts @a
end
end
Tuesday, August 31, 2010
11. “Java’s Ruby”
• A nicer way to write Java
• Ruby syntax with modifications
• Feels like Ruby
• Compiles to Java/JVM
• No runtime library
Tuesday, August 31, 2010
13. Features From X
• (Coming Soon)
• Extension methods (C#ish, but nicer)
• Implicit type conversions (Scala)
• Pattern matching?
• Case classes?
Tuesday, August 31, 2010
14. Ruby
puts “Hello, world!”
Tuesday, August 31, 2010
15. Mirah
puts “Hello, world!”
Tuesday, August 31, 2010
16. Mirah
// Generated from DashE
public class DashE extends java.lang.Object {
public static void main(java.lang.String[] argv) {
java.io.PrintStream temp$1 = java.lang.System.out;
temp$1.println("Hello, world!");
}
}
Tuesday, August 31, 2010
17. Ruby
def fib(a)
if a < 2
a
else
fib(a - 1) + fib(a - 2)
end
end
Tuesday, August 31, 2010
18. Mirah
def fib(a:int)
if a < 2
a
else
fib(a - 1) + fib(a - 2)
end
end
Tuesday, August 31, 2010
19. Mirah
// Generated from DashE
public class DashE extends java.lang.Object {
public static void main(java.lang.String[] argv) {
}
public static int fib(int a) {
return (a < 2) ? (a) : ((DashE.fib((a - 1)) +
DashE.fib((a - 2))));
}
}
Tuesday, August 31, 2010
20. Ruby
def foo(a = 1, b = 2)
puts a + b
end
Tuesday, August 31, 2010
21. Mirah
def foo(a:int = 1, b:int = 2)
puts a + b
end
Tuesday, August 31, 2010
22. Mirah
public static java.io.PrintStream foo(int a, int b) {
java.io.PrintStream temp$1 =
java.lang.System.out;
temp$1.println((a + b));
return temp$1;
}
public static java.io.PrintStream foo() {
return foo(1);
}
public static java.io.PrintStream foo(int a) {
return foo(a, 2);
}
Tuesday, August 31, 2010
23. Ruby
a = [5,4,3,2,1]
a.each do |x|
puts x
end
Tuesday, August 31, 2010
24. Mirah
a = [5,4,3,2,1]
a.each do |x|
puts x
end
Tuesday, August 31, 2010
25. Mirah
// Generated from DashE
public class DashE extends java.lang.Object {
public static void main(java.lang.String[] argv) {
java.util.List a =
java.util.Collections.unmodifiableList(
java.util.Arrays.asList(1, 2, 3, 4, 5));
java.util.Iterator __xform_tmp_1 = a.iterator();
label1:
while (__xform_tmp_1.hasNext()) {
java.lang.Object x = __xform_tmp_1.next();
label2:
{
java.io.PrintStream temp$3 = java.lang.System.out;
temp$3.println(x);
}
}
}
}
Tuesday, August 31, 2010
26. Ruby
t = Thread.new do
puts “in thread”
end
Tuesday, August 31, 2010
27. Mirah
t = Thread.new do
puts “in thread”
end
Tuesday, August 31, 2010
28. // Generated from DashE
Mirah
public class DashE extends java.lang.Object {
public static void main(java.lang.String[] argv) {
DashE.__xform_tmp_1 $binding = new DashE.__xform_tmp_1();
$binding.x = "in thread";
java.lang.Thread t = new java.lang.Thread(new DashE.__xform_tmp_2($binding));
}
public static class __xform_tmp_1 extends java.lang.Object {
java.lang.String x;
}
public static class __xform_tmp_2 extends java.lang.Object implements
java.lang.Runnable {
private DashE.__xform_tmp_1 binding;
public __xform_tmp_2(DashE.__xform_tmp_1 binding) {
this.binding = binding;
}
public void run() {
DashE.__xform_tmp_1 $binding = this.binding;
java.io.PrintStream temp$1 = java.lang.System.out;
temp$1.println($binding.x);
}
}
}
Tuesday, August 31, 2010
29. // Generated from DashE
Mirah
public class DashE extends java.lang.Object {
public static void main(java.lang.String[] argv) {
DashE.__xform_tmp_1 $binding = new DashE.__xform_tmp_1();
$binding.x = "in thread";
java.lang.Thread t = new java.lang.Thread(new DashE.__xform_tmp_2($binding));
}
public static class __xform_tmp_1 extends java.lang.Object {
java.lang.String x;
}
public static class __xform_tmp_2 extends java.lang.Object implements
java.lang.Runnable {
private DashE.__xform_tmp_1 binding;
public __xform_tmp_2(DashE.__xform_tmp_1 binding) {
this.binding = binding;
}
public void run() {
DashE.__xform_tmp_1 $binding = this.binding;
java.io.PrintStream temp$1 = java.lang.System.out;
temp$1.println($binding.x);
}
}
}
Tuesday, August 31, 2010
30. // Generated from DashE
Mirah
public class DashE extends java.lang.Object {
public static void main(java.lang.String[] argv) {
DashE.__xform_tmp_1 $binding = new DashE.__xform_tmp_1();
$binding.x = "in thread";
java.lang.Thread t = new java.lang.Thread(new DashE.__xform_tmp_2($binding));
}
public static class __xform_tmp_1 extends java.lang.Object {
java.lang.String x;
}
public static class __xform_tmp_2 extends java.lang.Object implements
java.lang.Runnable {
private DashE.__xform_tmp_1 binding;
public __xform_tmp_2(DashE.__xform_tmp_1 binding) {
this.binding = binding;
}
public void run() {
DashE.__xform_tmp_1 $binding = this.binding;
java.io.PrintStream temp$1 = java.lang.System.out;
temp$1.println($binding.x);
}
}
}
Tuesday, August 31, 2010
31. Open Class (proposal)
interface StringFunc
def apply(str:String)
end
extend class String # java.lang.String
def each(func:StringFunc)
# String#split call from Java
lines = split
# like “for (String str: strArray)”
lines.each do |str|
func.apply(str)
end
end
end
Tuesday, August 31, 2010
32. Open Class (Java side)
public interface StringFunc {
public void apply(String str);
}
public class StringExtension {
public void each(String str, StringFunc func) {
for (String s: str.split()) {
func.apply(str);
}
}
}
Tuesday, August 31, 2010
33. Open Class (usage)
str = “hellongoodbyenworld”
str.each {|s| ... }
Tuesday, August 31, 2010
34. Open Class (Java usage)
String str = “hellongoodbyenworld”;
StringExtension.each(str, new StringFunc() {
public void apply(String s) {
...
}
});
Tuesday, August 31, 2010
35. Open Class (Java usage)
String str = “hellongoodbyenworld”;
StringExtension.each(str, new StringFunc() {
public void apply(String s) {
...
YUCK!
}
});
Tuesday, August 31, 2010
36. Type Conversion
str = “hellongoodbyenworld”
# no “map” method on String...
str.map {|s| # ERROR
Tuesday, August 31, 2010
37. Type Conversion
(by hand)
str = “hellongoodbyenworld”
# without type conversion
Arrays.asList(str.split).map { ...
Tuesday, August 31, 2010
38. Type Conversion
(by hand)
str = “hellongoodbyenworld”
# without type conversion
Arrays.asList(str.split).map { ...
Tuesday, August 31, 2010
39. Type Conversion
(proposal)
conversion(String => List) do |str|
Arrays.asList(str.split)
end
conversion(List => String) do |list|
list.join(‘n’)
end
Tuesday, August 31, 2010
40. Type Conversion
(usage)
str = “hellongoodbyenworld”
# with type conversion!
str.map { ... # OK!!
Tuesday, August 31, 2010
41. It’s Not Ruby
• Using Java’s libraries and type system
• No “eval”
• No runtime-mutable classes
• Ruby libraries will not work
Tuesday, August 31, 2010
42. But It Feels Like Ruby!
• Clean, lightweight syntax
• Iteration, closures
• Far less “ceremony” than Java
• Performance equivalent to Java
Tuesday, August 31, 2010
45. Dubious
Dubious Mirah Web
Tuesday, August 31, 2010
46. Me
• John Woodell
• Web developer at Google
• Dubious creator
• App Engine JRuby maintainer
• @JohnWoodell
Tuesday, August 31, 2010
47. Thank you for using
"AppEngine/Java”
"AppEngine/Java"
47
Tuesday, August 31, 2010
48. Spin-up time can make scaling “painful”
• The most critical issue to be resolved is spin-up time,
App Engine scales by adding new application instances.
• Even if initialization could happen without affecting users
some apps will need to scale instantly.
48
Tuesday, August 31, 2010
49. Spin-up?
Yes, this is a problem...
49
Tuesday, August 31, 2010
50. ...but now you can use
Mirah and Dubious
"Mirah/Dubious"
50
Tuesday, August 31, 2010
51. Dubious is Web framework for Mirah
Dubious Mirah Web
*du bi ous[ djbis | dj- ] [ ]
[1] (( )) …
((of, about, as to ...)).
[2]
>
51
Tuesday, August 31, 2010
52. Write Rails-style code,
it runs on Google App Engine
GoogleAppEngine
Rails
52
Tuesday, August 31, 2010
53. Benefits of Mirah on App Engine
• Ruby syntax & apparent features + Java type system
• Use Java or Ruby when Mirah lacks features you require
• The generated Java source can be inspected at any time
• Macros and plugins can be written in Ruby or Mirah
• New instances always spin-up in about a second
53
Tuesday, August 31, 2010
54. Working with Dubious
• Dubious framework uses familiar Rails conventions
• Generate JSONs or work with ERb templates
• MirahModel syntax is similar to DataMapper
• Developers can create apps entirely in Rails,
then refactor URLs that need to scale quickly
• Some important features are currently missing,
but “you” could have fun contributing them
54
Tuesday, August 31, 2010
55. Here’s code from Dubious
(this is not Rails)
Rails
Dubious
55
Tuesday, August 31, 2010