Ben Scofield gave a talk at Rubyconf about building his own web framework called Athena from scratch. He discussed how starting small with a "Hello World" program and building up from there helped him learn about aspects of web development like RESTful design, routing, ORM/database integration, and exception handling in Ruby. He concluded by noting that there is always more to learn, and shared his GitHub page where the framework code can be found.
Go beyond the documentation and explore some of what's possible if you stretch symfony to its limits. We will look at a number of aspects of symfony 1.4 and Doctrine 1.2 and tease out some powerful functionality you may not have expected to find, but will doubtless be able to use. Topics covered will include routing, forms, the config cache and record listeners. If you're comfortable in symfony and wondering what's next, this session is for you.
Java to JRuby translation of Akka's first tutorial to compute Pi using Madhava-Leibniz series. (http://akka.io/docs/akka/1.1.2/intro/getting-started-first-java.html)
Sprockets is an easy solution to managing large JavaScript codebases by letting you structure it, bundle it with related assets, and consolidate it as one single file, with pre-baked command-line tooling, CGI front and Rails plugin. It's a framework-agnostic open-source solution that makes for great serving performance while helping you structure and manage your codebase better.
Building Lithium Apps (Like a Boss) was a workshop presented on the structure and philosophy of the Lithium framework and its applications, and how best to take advantage of them.
Go beyond the documentation and explore some of what's possible if you stretch symfony to its limits. We will look at a number of aspects of symfony 1.4 and Doctrine 1.2 and tease out some powerful functionality you may not have expected to find, but will doubtless be able to use. Topics covered will include routing, forms, the config cache and record listeners. If you're comfortable in symfony and wondering what's next, this session is for you.
Java to JRuby translation of Akka's first tutorial to compute Pi using Madhava-Leibniz series. (http://akka.io/docs/akka/1.1.2/intro/getting-started-first-java.html)
Sprockets is an easy solution to managing large JavaScript codebases by letting you structure it, bundle it with related assets, and consolidate it as one single file, with pre-baked command-line tooling, CGI front and Rails plugin. It's a framework-agnostic open-source solution that makes for great serving performance while helping you structure and manage your codebase better.
Building Lithium Apps (Like a Boss) was a workshop presented on the structure and philosophy of the Lithium framework and its applications, and how best to take advantage of them.
And now you have two problems. Ruby regular expressions for fun and profit by...Codemotion
A wise hacker said: Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
Regular expressions are a powerful tool in our hands and a first class citizen in ruby so it is tempting to overuse them. But knowing them and using them properly is a fundamental asset of every developer.
We’ll see hands-on examples of proper Reg Exps usage in ruby code, we’ll also look at bad and ugly cases and learn how to approach writing, testing and debugging regular expressions.
And now you have two problems. Ruby regular expressions for fun and profit by...Codemotion
A wise hacker said: Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
Regular expressions are a powerful tool in our hands and a first class citizen in ruby so it is tempting to overuse them. But knowing them and using them properly is a fundamental asset of every developer.
We’ll see hands-on examples of proper Reg Exps usage in ruby code, we’ll also look at bad and ugly cases and learn how to approach writing, testing and debugging regular expressions.
Lithium: The Framework for People Who Hate FrameworksNate Abele
This is the presentation was given at ConFoo on March 11th by Nate Abele and Joël Perras, and is an introduction to the architectural problems with other frameworks that Lithium was designed to address, and how it addresses them. It also introduces programming paradigms like functional and aspect-oriented programming which address issues that OOP doesn't account for.
Finally, the talk provides a quick overview of the innovative and unparalleled features that Lithium provides, including the data layer, which supports both relational and non-relational databases.
There are more smart people building software now than there have been at any point in the past, which means that it's more important than ever to stay on top of new developments, libraries, frameworks, and everything else. To really take advantage of this wealth of innovation, however, you've got to look beyond your normal community -- what's going on in Python? And how can we use that to make our Ruby lives easier? In this session, we'll explore that question. We'll look at actual examples of code and concepts borrowed and reimplemented to form a better idea of when it's appropriate and when it'll fall flat.
Gisting is an implementation of Google\'s MapReduce framework for processing and extracting useful information from very large data sets. At the time of this writing, the code is available for PREVIEW at http://github.com/mchung/gisting. I am currently working to release this framework for general usage.
PHP 5.3 has many new features that allow very different paradigms of software development, that may be unfamiliar to many PHP developers. If you want to learn more about functional or aspect-oriented programming, or how to organize your PHP libraries according to the new de facto PHP namespacing standard, don't miss this talk.
Latest version of Building Cloud Castles, given at LRUG in April 2011.
A year ago, I was a committed VPS and dedicated-machine deployer. I thought the cloud imposed silly restrictions - how dare you take away my shell account! Whaddya mean I can't save files locally?
Since then, I've had some interesting experiences. I've worked on big cloud-deployed systems, and certain large traditionally-deployed systems, and I've seen how a lot of the decisions that you're ... encouraged to make when designing an app to run in the cloud. Most interestingly, I've discovered how those same decisions can make for a much better app regardless of where it'll end up. In this talk, I'll share those architectural patterns with you, and show why they work. Hopefully, I'll convince all of you to build cloud castles -- even if you've got your foundation firmly on the ground.
Open source software is winning the war, especially in the web world. The war is far from done, however, and the movement needs you to continue to succeed. Whether you're a developer, a designer, or an entrepreneur, find out how to help win tomorrow's battles.
The second most important thing you can do is ship something good. The most important thing you can do? Ship something. I love testing and performance optimization and pixel tweaking as much as the next person, but if you never ship then you might as well have never started.
A year ago, I was a committed VPS and dedicated-machine deployer. I thought the cloud imposed silly restrictions - how dare you take away my shell account! Whaddya mean I can't save files locally? Since then, I've had some interesting experiences. I've worked on big cloud-deployed systems, and certain large traditionally-deployed systems, and I've seen how a lot of the decisions that you're ... encouraged to make when designing an app to run in the cloud. Most interestingly, I've discovered how those same decisions can make for a much better app regardless of where it'll end up. In this talk, I'll share those architectural patterns with you, and show why they work. Hopefully, I'll convince all of you to build cloud castles -- even if you've got your foundation firmly on the ground.
Presentation given at SXSWi 2010 - an overview of some research in social psychology and behavioral economics, and on making people do what you want them to online.
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/
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
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.
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.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
10. main() {
printf(quot;hello, worldnquot;);
}
-module(hello).
-export([hello/0]).
hello() ->
io:format(quot;Hello World!~nquot;, []).
PROGRAM HELLO
PRINT*, 'Hello World!'
END
11. main = putStrLn quot;Hello Worldquot;
Imports System.Console
Class HelloWorld
Public Shared Sub Main()
WriteLine(quot;Hello, world!quot;)
End Sub
End Class
!greeting.
+!greeting : true <- .print(quot;Hello Worldquot;).
51. puts quot;Starting Athena applicationquot;
require 'active_record'
require File.expand_path(File.join('./vendor/athena/lib/athena'))
puts quot;... Framework loadedquot;
Athena.require_all_libs_relative_to('resources')
puts quot;... Resources loadedquot;
use Rack::Static, :urls => ['/images', '/stylesheets'], :root => 'public'
run Athena::Application.new
puts quot;... Application startednnquot;
puts quot;^C to stop the applicationquot;
52. module Athena
class Application
def self.root
File.join(File.dirname(__FILE__), '..', '..', '..', '..')
end
def self.route_map
@route_map ||= {
:get => {},
:post => {},
:put => {},
:delete => {}
}
@route_map
end
def call(environment)
request = Rack::Request.new(environment)
request_method = request.params['_method'] ? # ...
matching_route = Athena::Application.route_map # ...
if matching_route
resource = matching_route.last[:class].new(request, request_method)
resource.template = matching_route.last[:template]
return resource.output
else
raise Athena::BadRequest
end
end
end
end
53. module Athena
class Resource
extend Athena::Persistence
attr_accessor :template
def self.inherited(f)
unless f == Athena::SingletonResource
url_name = f.name.downcase
routing = url_name + id_pattern
url_pattern = /^/#{routing}$/
Athena::Application.route_map[:get][/^/#{routing}/edit$/] = # ...
Athena::Application.route_map[:post][/^/#{url_name}$/] = # ...
# ...
end
end
def self.default_resource
Athena::Application.route_map[:get][/^/$/] = {:class => # ...
end
def self.id_pattern
'/(d+)'
end
def get; raise Athena::MethodNotAllowed; end
def put; raise Athena::MethodNotAllowed; end
def post; raise Athena::MethodNotAllowed; end
def delete; raise Athena::MethodNotAllowed; end
# ...
end
end
54. class Habit < Athena::Resource
persist(ActiveRecord::Base) do
validates_presence_of :name
end
def get
@habit = Habit.find_by_id(@id) || Habit.new_record
end
def post
@habit = Habit.new_record(@params['habit'])
@habit.save!
end
def put
@habit = Habit.find(@id)
@habit.update_attributes!(@params['habit'])
end
def delete
Habit.find(@id).destroy
end
end
55. class Habits < Athena::SingletonResource
default_resource
def get
@habits = Habit.all
end
def post
@results = @params['habits'].map do |hash|
Habit.new_record(hash).save
end
end
def put
@results = @params['habits'].map do |id, hash|
Habit.find(id).update_attributes(hash)
end
end
def delete
Habit.find(:all,
:conditions => ['id IN (?)', @params['habit_ids']]
).map(&:destroy)
end
end
56. module Athena
module Persistence
def self.included(base)
base.class_eval do
@@persistence_class = nil
end
end
def persist(klass, &block)
pklass = Class.new(klass)
pklass.class_eval(&block)
pklass.class_eval quot;set_table_name '#{self.name}'.tableizequot;
eval quot;Persistent#{self.name} = pklassquot;
@@persistence_class = pklass
@@persistence_class.establish_connection(
YAML::load(IO.read(File.join(Athena::Application.root, # ...
)
end
def new_record(*args)
self.persistence_class.new(*args)
end
def persistence_class
@@persistence_class
end
# ...
63. module Athena
class Application
# ...
def process_params(params)
nested_pattern = /^(.+?)[(.*])/
processed = {}
params.each do |k, v|
if k =~ nested_pattern
scanned = k.scan(nested_pattern).flatten
first = scanned.first
last = scanned.last.sub(/]/, '')
if last == ''
processed[first] ||= []
processed[first] << v
else
processed[first] ||= {}
processed[first][last] = v
processed[first] = process_params(processed[first])
end
else
processed[k] = v
end
end
processed.delete('_method')
processed
end
# ...
end
Form Parameters
end
64. module Athena
module Persistence
def self.included(base)
base.class_eval do
@@persistence_class = nil
end
end
def persist(klass, &block)
pklass = Class.new(klass)
pklass.class_eval(&block)
pklass.class_eval quot;set_table_name '#{self.name}'.tableizequot;
eval quot;Persistent#{self.name} = pklassquot;
@@persistence_class = pklass
@@persistence_class.establish_connection(
YAML::load(IO.read(File.join(Athena::Application.root, # ...
)
end
def new_record(*args)
self.persistence_class.new(*args)
end
def persistence_class
@@persistence_class
end
# ...
Dynamic class creation
66. module Athena
module Persistence
# ...
def method_missing(name, *args)
return self.persistence_class.send(name, *args)
rescue ActiveRecord::ActiveRecordError => e
raise e
rescue
super
end
end
end
Exception Propagation