This document summarizes a presentation given by Colin Gemmell, a developer who transitioned from .NET to Ruby on Rails. It discusses his motivations for the switch, compares the development environments and practices between the two platforms, and touches on some of the benefits and challenges of Rails development.
"Groovy 2.0 and beyond" presentation given at the Groovy/Grails eXchange conference.
Video can be seen here:
http://skillsmatter.com/podcast/groovy-grails/keynote-speech
My goals have been:
- focusing on several project areas, where you can use jruby successfully
- share the experience that I made using ruby in the last years
- proove that things can be done easier as they are done in typical java projects
Since the release of Java 1.4.2 most of the developers thought the language designed by Sun was a blast for object-oriented programming and through the years a lot of so-called Java-design-patterns infected object-thinking and development process showing us tedious language syntax and dark magics. Then, 15 years later, a language by JetBrains tries to simplify the things: Kotlin, what is it? What does it try to simplify? Let's see at least 7 inconvenient Java aspects fixed in Kotlin
Finally Java SE 7 is GA and you can start using it. This talk will cover the most important new features of the language and the virtual machine. It will also cover some features that did not make it in to the SE 7 release. Finally we will discuss current state of Java as an ecosystem and my analysis and hopes for the future.
The Bundle system is one of the greatest and most powerful features of Symfony2. Bundles contain all the files related to a single feature of your application: controllers, entities, event listeners, form types, Twig templates, etc. But how much of that actually needs to be inside a bundle?
In this talk we’ll take a bundle, containing all those different types of classes, configuration files and templates, and strip it down to the bare necessities. And I promise that after moving many files out of the bundle, everything still works.
While looking for ways to move things out of the bundle, I will discuss some of the more advanced features of bundle design, like prepending configuration, compiler passes and Doctrine mapping drivers. We will end with a very lean bundle, surrounded by a few highly reusable, maximally decoupled libraries.
Understanding bytecode and what bytecode is likely to be generated by a Java compiler helps the Java programmer in the same way that knowledge of assembler helps the C or C++ programmer. Java bytecode is the form of instructions that Java virtual machine executes. This knowledge is crucial when debugging and doing performance and memory usage tuning. The presenter will share his knowledge on what bytecode means for your platform and how to create compiler while using some awesome tools.
"Groovy 2.0 and beyond" presentation given at the Groovy/Grails eXchange conference.
Video can be seen here:
http://skillsmatter.com/podcast/groovy-grails/keynote-speech
My goals have been:
- focusing on several project areas, where you can use jruby successfully
- share the experience that I made using ruby in the last years
- proove that things can be done easier as they are done in typical java projects
Since the release of Java 1.4.2 most of the developers thought the language designed by Sun was a blast for object-oriented programming and through the years a lot of so-called Java-design-patterns infected object-thinking and development process showing us tedious language syntax and dark magics. Then, 15 years later, a language by JetBrains tries to simplify the things: Kotlin, what is it? What does it try to simplify? Let's see at least 7 inconvenient Java aspects fixed in Kotlin
Finally Java SE 7 is GA and you can start using it. This talk will cover the most important new features of the language and the virtual machine. It will also cover some features that did not make it in to the SE 7 release. Finally we will discuss current state of Java as an ecosystem and my analysis and hopes for the future.
The Bundle system is one of the greatest and most powerful features of Symfony2. Bundles contain all the files related to a single feature of your application: controllers, entities, event listeners, form types, Twig templates, etc. But how much of that actually needs to be inside a bundle?
In this talk we’ll take a bundle, containing all those different types of classes, configuration files and templates, and strip it down to the bare necessities. And I promise that after moving many files out of the bundle, everything still works.
While looking for ways to move things out of the bundle, I will discuss some of the more advanced features of bundle design, like prepending configuration, compiler passes and Doctrine mapping drivers. We will end with a very lean bundle, surrounded by a few highly reusable, maximally decoupled libraries.
Understanding bytecode and what bytecode is likely to be generated by a Java compiler helps the Java programmer in the same way that knowledge of assembler helps the C or C++ programmer. Java bytecode is the form of instructions that Java virtual machine executes. This knowledge is crucial when debugging and doing performance and memory usage tuning. The presenter will share his knowledge on what bytecode means for your platform and how to create compiler while using some awesome tools.
PCD – Process Control Daemon is a light-weight system level process manager for Embedded-Linux based projects (consumer electronics, network devices, etc.).
PCD starts, stops and monitors all the user space processes in the system, in a synchronized manner, using a textual configuration file.
PCD recovers the system in case of errors and provides useful and detailed debug information.
Have you ever felt trapped in a bad PowerPoint presentation? Ever listen to a speaker drone on like a zombie? Do boring uninspiring slides leave you feeling like the walking dead? Don’t be a PowerPoint zombie! Here are 6 tips to avoid Death by Powerpoint!
You've learned to program in Ruby, but now you want to start learning about how to move beyond the language basics and make use of some of the dynamic parts of the Ruby language. We'll cover that a bit here.
Explains how to make use of ruby in java-based work environments. There are some hints at .NET equivalents along the way.
This is part 3 of a trilogy of Star Wars-themed ruby talks given at Protegra's SDEC 2011 in Winnipeg, Canada.
The talk focuses on the processes and requirements to ship a software, which was written with MacRuby, to the end user. I present libraries and tools, that are helpful for this purpose and show how to use them.
This is a set of modified MacRuby presentation slides given at the Pittsburgh Ruby Brigade meeting on Nov 5, 2009. The original presentation was given by Patrick Thomson at C4[3] in September, 2009. Slides 68 and 69 were added by me for the PghRB talk.
Patrick's original slides are available at http://www.slideshare.net/importantshock/why-macruby-matters
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
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.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
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.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
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:
2. Who the f**k is
Colin Gemmell
.NET Dev for 3.5 years
Webforms, MVC, Umbraco
Big on ALT.NET ideals
Moved to Ruby on Rails in May 2010
Started the Glasgow Ruby User Group
in March 2011
3. Why Ruby and Rails
Cheaper than developing with .NET
Arguably faster and more productive
Easier to test your code
Open and free development
4. Why Ruby and Rails
This man pays me to.
@chrisvmcd
6. My First Ruby
Development Environment
Window XP/Vista/7
Rubymine
Cygwin
Ruby Gems
Interactive Ruby Console (irb)
7. Windows Problems
Rails traditionally deployed on Linux OS
Gem’s often use Linux kernal methods
or Linux Libraries
Engineyard investing on Rails development with
windows
8. Development Environment
VMware workstation
Ubuntu
Rubymine
VIM + a lot of plugins
Ruby Gems
Interactive Ruby Console (irb)
11. Ruby and SOLID
Single responsibility
Open/Closed
Liskov Substitution
Interface Segregation
Dependency Injection
12. Ruby and loose coupling
In .NET we use Interface and Dependency
Injection to achieve loose coupling
Ruby is loosely coupled by design.
Everything and anything can be changed.
Thanks to being a dynamic language and……
14. Add New Functionality to Ruby
"Developer Developer Developer is awesome".second_word
NoMethodError: undefined method `second_word' for "developer developer
developer":String
class String
def second_work
return self.split(' ')[1]
end
end
"Developer Developer Developer is awesome".second_word
=== “Developer”
Extension methods anyone?
15. Changing implementation
class ZombieKiller
def kill
self.shotgun.fire
end
end
zombie_killer = ZombieKiller.new
puts(zombie_killer.kill)
=== Zombie head explodes
class ZombieKiller
def kill
self.axe.throw
end
end
zombie_killer = ZombieKiller.new
puts(zombie_killer.kill)
=== Zombie Falls off
16. Are you scared yet?
If the idea of monkey patching scares you a
little, it probably should. Can you imagine
debugging code where the String class had
subtly different behaviours from the String
you've learned to use? Monkey patching can
be incredibly dangerous in the wrong hands.
Jeff Atwood
http://www.codinghorror.com/blog/2008/07/monkeypatching-for-humans.html
18. Testing Ruby and Rails
Testing ensures code behaves correctly
Tests ensure code compiles
Debugging support patchy at best
Its all right, testing is a lot simpler
19. How I Tested .NET
[TestFixture] public class ZombieKiller : IZombieKiller {
public class ZombieKillerTest : SpecificationBase{ private IZombieKillerRepository _repo;
private ZombieKiller zombieKiller; public ZombieKiller(
private Zombie zombie; IZombieKillerRepository repo){
_repo = repo;
}
public override void Given(){
var repo = Mock<IZombieKillerRepository>();
public void Kill(Zombie zombie){
zombie = new Zombie(Strength.Week, zombie.status = "decapitated“;
Speed.Fast); repo.UpdateZombie(zombie);
zombieKiller = new ZombieKiller(repo); }
repo.stub(x => x.UpdateZombie).returns(true); }
zombieKiller.weapon = Weapon.Axe;
}
public override void When(){
zombieKiller.kill(zombie);
}
[Test]
public void should_depacite_zombie(){
zombie.status.should_eqaul("decapitated");
}
}
20. Example RSpec test
describe "when killing a zombie" do class ZombieKiller
class Zombie def kill zombie
def save zombie.attack_with self.weapon
true end
end End
end
class Zombie < ActiveRecord::Base
before do def attack_with weapon
@zombie = Zombie.new( #do some logic to see
#what happened to zombie
:strength => :week, :speed => :fast)
self.save
@zombie_killer = ZombieKiller.new(
end
:weapon => :axe)
end
@zombie_killer.kill(@zombie)
end
it "should be decapitated if hit with axe"
do
@zombie.status.should eql(:decapitated)
end
end
21. Range of Testing
In .NET there are a lot of test frameworks
Ruby test frameworks include TestUnit, RSpec,
Shoulda and Cucumber
Rails encourages testing at all levels.
All extremely well documented.
22. The Rails Way
One project layout and only one layout
Principle of least surprise
Change it at your own risk
Heavily based on conventions e.g.
ZombieController > ZombieControllerSpec
Zombie > ZombieSpec (or ZombieTest)
Zombie > ZombieController
This can be applied to .NET too
23. The Curse of Active Record
Makes really fast to get going with project
The number one reason for slow apps (IMHO)
Is to easy to write code that over uses the
database
Often don’t/forget to think about DB
24. The Curse of Active Record
1 class Session < ActiveRecord::Base 19 module SessionModel
2 # name > string 20 def self.included klass
3 # code > string 21 klass.extend ClassMethods
22 end
4 23
5 validates_uniqueness_of :name, :code 24 module ClassMethods
6 include SessionModel 25 def code_is_unique?(code)
7 26 return self.find_by_code(code).nil?
8 def generate_code 27 end
28 end
9 return if !(self.code.nil? || 29 end
self.code.empty?)
10 full_code = ""
11 while (true)
12 code = "%04d" % rand(9999)
13 full_code = “ABC#{code}"
14 break if
Session.code_is_unique?(full_code)
15 end
16 self.code = full_code
17 end
18 end
Spot the database calls...
25. The Curse of Active Record
class Session < ActiveRecord::Base module SessionModel
# name > string def self.included klass
# code > string klass.extend ClassMethods
end
validates_uniqueness_of :name, :code x 2 module ClassMethods
include SessionModel def code_is_unique?(code)
return self.find_by_code(code).nil?
def generate_code end
end
return if !(self.code.nil? || end
self.code.empty?)
full_code = ""
while (true)
code = "%04d" % rand(9999)
full_code = “ABC#{code}"
break if
Session.code_is_unique?(full_code)
end
self.code = full_code
end
end
This was production code. The names have
been changed to protect the innocent
26. .NET Deployment
.NET deployment predominantly through FTP or
copy to file share
But what about databases, migrations, queues,
externals dependencies etc.
Fear common place on deployment day
27. Ruby Deployment
Deployment is a solved problem in Rails
Built on several parts
Database migration come out of the box
Bundler gets dependency
Use of Chef or Capistrano for externals or
configuration changes
Platform as a service combine all of these e.g.
Heroku, Engineyard, Brightbox