The document summarizes a presentation about HTTP clients in Common Lisp. Eitaro Fukamachi discusses several Common Lisp HTTP client libraries, including Drakma and his own library called Dexador. He notes some pitfalls of Drakma, such as forcing URL encoding and poor error handling. Dexador is presented as an alternative with simpler APIs, better language support, and improved error handling including automatic retrying. Benchmarks show that Dexador is faster than Drakma for local requests and comparable for remote requests, but connection pooling in Dexador can further improve performance for multiple requests.
"How to Develop with Qt for Multiple Screen Resolutions and Increase Your Use...FELGO SDK
*** NOTE ***
A summarized version is available here:
http://v-play.net/2014/11/supporting-multiple-screen-sizes-and-screen-densities-with-qt-and-v-play
*** Quick Summary ***
In the first part, we show how to use Qt Quick features to create UIs for multiple screen sizes, screen resolutions and form factors like phones, tablets and desktop PCs. We cover dynamic image switching, content scaling and basic Qt Quick features like file selectors, Loader elements, QML Singletons and property bindings and compare the use cases for each of them.
We also cover how to implement adaptive layouts and responsive design in Qt and V-Play. Plus, how to create density independence and HighDPI / Retina screen support.
The second part shows:
•How to increase user engagement with user-generated content and how to build a community around your app or game.
• How gamification can be added to apps or games in just a few minutes and its benefits.
*** Presentation Keywords ***
Qt, Qt Quick, QML, JavaScript, V-Play Game Engine, V-Play Qt 5 Plugins
Screen density, screen resolution, screen size
Density independence, density-independent pixels; pixel density
Dynamic image switching, dynamic image selection; Android: alternative bitmaps; retina display, retina images
High dpi screens
Multiple screen aspect ratios
Supporting Multiple Screens, Responsive Design (tablet layout, adaptive layout, adaptable layout, scalability)
Multiple resolutions
Content scaling, upscaling, adaptive scaling
User Retention, User-Generated Content, UGC, community building, V-Play Game Network, Gamification
Qt 5 Plugins, V-Play Plugins, Qt Facebook Plugin, Qt Chartboost, Qt AdMob, Qt Flurry Analytics, Qt Push Notifications, Qt In-App Purchases
"How to Develop with Qt for Multiple Screen Resolutions and Increase Your Use...FELGO SDK
*** NOTE ***
A summarized version is available here:
http://v-play.net/2014/11/supporting-multiple-screen-sizes-and-screen-densities-with-qt-and-v-play
*** Quick Summary ***
In the first part, we show how to use Qt Quick features to create UIs for multiple screen sizes, screen resolutions and form factors like phones, tablets and desktop PCs. We cover dynamic image switching, content scaling and basic Qt Quick features like file selectors, Loader elements, QML Singletons and property bindings and compare the use cases for each of them.
We also cover how to implement adaptive layouts and responsive design in Qt and V-Play. Plus, how to create density independence and HighDPI / Retina screen support.
The second part shows:
•How to increase user engagement with user-generated content and how to build a community around your app or game.
• How gamification can be added to apps or games in just a few minutes and its benefits.
*** Presentation Keywords ***
Qt, Qt Quick, QML, JavaScript, V-Play Game Engine, V-Play Qt 5 Plugins
Screen density, screen resolution, screen size
Density independence, density-independent pixels; pixel density
Dynamic image switching, dynamic image selection; Android: alternative bitmaps; retina display, retina images
High dpi screens
Multiple screen aspect ratios
Supporting Multiple Screens, Responsive Design (tablet layout, adaptive layout, adaptable layout, scalability)
Multiple resolutions
Content scaling, upscaling, adaptive scaling
User Retention, User-Generated Content, UGC, community building, V-Play Game Network, Gamification
Qt 5 Plugins, V-Play Plugins, Qt Facebook Plugin, Qt Chartboost, Qt AdMob, Qt Flurry Analytics, Qt Push Notifications, Qt In-App Purchases
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
After talking to several Drupal followers during our last meetup, I realised quite a few people still don't employ version control.
I strongly consider this best practice when building a site, and thought it would be a good opportunity to go over its importance and how you can make it work for you.
Git offers several advantages:
• It's super fast
• It's easy.
• And no you don't need to be familiar with Command Line code (there are several great GUI's out there).
GIT Version Control works by keeping track of all successive changes you make to a site.
The biggest advantage of this is easily undoing any mistakes you might make along the way.
It's a great feeling to know Version Control has your back that you can roll back if something goes catastrophically wrong.
It's also a big bonus in collaborative development.
As soon as more than one person works on a project things get a lot more complicated.
What happens when 2 edits effect the same file? How do you know what's new, what's old and what's changed?
No worries, simply merge the variations and let GIT deal with the rest.
GIT is not just for the developers of this world but can be a life saver for themers, site maintainers and the like.
Most people will admit they should use it, but either don't know how or believe it's hard to integrate.
The reality is that it's actually pretty simple and once you start integrating GIT into your workflow you'll ask yourself "Why the hell did I keep using ftp" - I know I did.
FTP is so yesterday, its slow, it's cumbersome to use and it's a very manual method.
Switch to GIT, start using GIT, and never look back.
Design for succcess with react and storybook.jsChris Saylor
Too often developers are not involved with front end design descussions and end up struggling to get a sketch design to fit into a website. Many of these tools do not offer good ways of communicating animations or different states of the various components and in the end, there still has to be a translation into something that is functional.
This talk aims to change that. We will be looking at Storybook as a tool that facilitates developers and designers working hand-in-hand to codify designs in React components. We will also cover some strategies of React component building that enabled taking advantage of tools like Storybook.
I have evidence that using git and GitHub for documentation and community doc techniques can give us 300 doc changes in a month. I’ve bet my career on these methods and I want to share with you.
This talk will be about managing DB scripts in our projects, from how to choose file structure to how easily manage them with large development team and run on different environments. We will look deep in the most popular tool for DB script migrations – Liquibase. How to write reliable scripts for Liquibase? How to run them everywhere? How to integrate them with Maven or Spring Boot? Answers for all these questions will be in this talk.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
After talking to several Drupal followers during our last meetup, I realised quite a few people still don't employ version control.
I strongly consider this best practice when building a site, and thought it would be a good opportunity to go over its importance and how you can make it work for you.
Git offers several advantages:
• It's super fast
• It's easy.
• And no you don't need to be familiar with Command Line code (there are several great GUI's out there).
GIT Version Control works by keeping track of all successive changes you make to a site.
The biggest advantage of this is easily undoing any mistakes you might make along the way.
It's a great feeling to know Version Control has your back that you can roll back if something goes catastrophically wrong.
It's also a big bonus in collaborative development.
As soon as more than one person works on a project things get a lot more complicated.
What happens when 2 edits effect the same file? How do you know what's new, what's old and what's changed?
No worries, simply merge the variations and let GIT deal with the rest.
GIT is not just for the developers of this world but can be a life saver for themers, site maintainers and the like.
Most people will admit they should use it, but either don't know how or believe it's hard to integrate.
The reality is that it's actually pretty simple and once you start integrating GIT into your workflow you'll ask yourself "Why the hell did I keep using ftp" - I know I did.
FTP is so yesterday, its slow, it's cumbersome to use and it's a very manual method.
Switch to GIT, start using GIT, and never look back.
Design for succcess with react and storybook.jsChris Saylor
Too often developers are not involved with front end design descussions and end up struggling to get a sketch design to fit into a website. Many of these tools do not offer good ways of communicating animations or different states of the various components and in the end, there still has to be a translation into something that is functional.
This talk aims to change that. We will be looking at Storybook as a tool that facilitates developers and designers working hand-in-hand to codify designs in React components. We will also cover some strategies of React component building that enabled taking advantage of tools like Storybook.
I have evidence that using git and GitHub for documentation and community doc techniques can give us 300 doc changes in a month. I’ve bet my career on these methods and I want to share with you.
This talk will be about managing DB scripts in our projects, from how to choose file structure to how easily manage them with large development team and run on different environments. We will look deep in the most popular tool for DB script migrations – Liquibase. How to write reliable scripts for Liquibase? How to run them everywhere? How to integrate them with Maven or Spring Boot? Answers for all these questions will be in this talk.
How we use Varnish at Opera Software, from the beginning (2009) to now.
Presentation hold for the 5th Varnish Users Group meeting (VUG5) held in Paris on March 22nd 2012.
Logstash for SEO: come monitorare i Log del Web Server in realtimeAndrea Cardinale
Durante questo intervento verrà illustrato come si possono installare software di analisi in tempo reale dei log del server (ELK pattern: ElasticSearch, Logstash, Kibana) in modo da ottenere tutte le informazioni su Googlebot e per scoprire i punti di debolezza e gli eventi relativi ai nostri siti che non potremmo altrimenti conoscere.
We all know that load testing is important, but it's all too common that it's left to the very end of a project and it's invariably the first thing that gets dropped when budgets and timeframes get cut. Furthermore, most of us don't know where or how to start implementing effective load tests, let alone how to analyse the results.
Lindsay Holmwood, Software Manager at Bulletproof Networks, will be talking about integrating performance testing into your application development + deploy cycle from the very beginning, using inexpensive and easy to use SaaS tools.
There will be a hands on demonstration of the Blitz load + performance testing tool, coupled with a brief dive into the Blitz API internals to retrieve and analyse advanced reporting information.
Clojure is a modern dynamically typed lisp. Dynamical typing is ofter associated with poor performance and runtime failures. In this talk, I'll present some of the lessons learned on building Clojure/Script systems that are both ridiculously fast and will fail fast on errors. Will compare the performance of mutable, persistent & zero-copy data structures and show how we can use interpreters and compilers to build beautiful and performant abstractions. A quick demo on how to build a simple non-blocking web server that runs idiomatic Clojure to serve millions of requests per sec.
Clojure is awesome, and it can be fast too.
Video: https://www.youtube.com/watch?v=3SSHjKT3ZmA
This is a presentation for International Lisp Conference 2012 which was held in Kyoto, Japan.
Clack is a web application environment for Common Lisp to make your web applications be portable and reusable by abstracting HTTP into a simple API.
In this paper, I describe what are problems in web development and how Clack solves them.
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/
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
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
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.
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.
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.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
20. • Force URL encoding with PURI
Pitfall (1/3) of Drakma
(drakma:http-request
(format nil “http://b.hatena.ne.jp/search/tag?q=~A”
tag))
tag = “lisp” => OK
tag = “scheme” => OK
tag = “clojure” => OK
tag = “common lisp” => PURI:URI-PARSE-ERROR
21. • Force URL encoding with PURI
Pitfall (1/3) of Drakma
(drakma:http-request
(format nil “http://b.hatena.ne.jp/search/tag?q=~A”
(drakma:url-encode tag :utf-8)))
tag = “lisp” => OK
tag = “scheme” => OK
tag = “clojure” => OK
tag = “common lisp” => “common+lisp”
22. • Force URL encoding with PURI
Pitfall (1/3) of Drakma
(drakma:http-request
(format nil “http://b.hatena.ne.jp/search/tag?q=~A”
(drakma:url-encode tag :utf-8)))
tag = “lisp” => OK
tag = “scheme” => OK
tag = “clojure” => OK
tag = “common lisp” => “common+lisp”
tag = “AKB48” => OK
tag = “乃木坂46” => "%E4%B9%83%E6%9C%A8%E5%9D%8246"
23. • Force URL encoding with PURI
Pitfall (1/3) of Drakma
(drakma:http-request
(format nil “http://b.hatena.ne.jp/search/tag?q=~A”
(drakma:url-encode tag :utf-8))
:preserve-uri t)
tag = “lisp” => OK
tag = “scheme” => OK
tag = “clojure” => OK
tag = “common lisp” => OK
tag = “AKB48” => OK
tag = “乃木坂46” => OK
25. • Poor language support with flexi-streams
Pitfall (2/3) of Drakma
(drakma:http-request “http://www.hatena.ne.jp/”)
(drakma:http-request “http://www.google.co.jp/”)
26. • Poor language support with flexi-streams
Pitfall (2/3) of Drakma
(drakma:http-request “http://www.hatena.ne.jp/”)
;; => body as UTF-8 string
(drakma:http-request “http://www.google.co.jp/”)
;; => body as byte vector
WARNING: Problems determining charset (falling back to binary):
:SHIFT_JIS is not known to be a name for an external format.
28. • Tend to forget error handling
Pitfall (3/3) of Drakma
(let* ((body (drakma:http-request “http://cliki.net”))
(parsed-html (plump:parse body)))
…)
29. • Tend to forget error handling
Pitfall (3/3) of Drakma
(let* ((body (drakma:http-request “http://cliki.net”))
(parsed-html (plump:parse body)))
…)
It fails if the HTTP response code is 4xx or 5xx.
30. • Tend to forget error handling
Pitfall (3/3) of Drakma
(multiple-value-bind (body status)
(drakma:http-request “http://cliki.net”)
(unless (= status 200)
(error “An HTTP request failed (Code=~D)”
status))
(let ((parsed-html (plump:parse body)))
…))
Raise an error unless the status is not 200
31. • Tend to forget error handling
Pitfall (3/3) of Drakma
(multiple-value-bind (body status)
(drakma:http-request “http://cliki.net”)
(unless (= status 200)
(error “An HTTP request failed (Code=~D)”
status))
(let ((parsed-html (plump:parse body)))
…))
Raise an error unless the status is not 200
Want to retry???
32. • Tend to forget error handling
Pitfall (3/3) of Drakma
(block nil
(tagbody
retry
(multiple-value-bind (body status)
(drakma:http-request "http://cliki.net/")
(unless (= status 200)
(go retry))
(return body))))
With Auto-Retrying
33. • Tend to forget error handling
Pitfall (3/3) of Drakma
(block nil
(let ((times 5))
(tagbody
retry
(multiple-value-bind (body status)
(drakma:http-request "http://cliki.net/")
(unless (= status 200)
(when (= times 0)
(error "An HTTP request failed. (Code=~D)”
status))
(decf times)
(go retry))
(return body)))))
Retry only 5 times
50. Benchmark
Sending GET request 30 times to Local Server
(lower is better)
0
0.009
0.018
0.026
0.035
Drakma Dexador
w/out conneciton-pool
0.024s
51. Benchmark
Sending GET request 30 times to Local Server
(lower is better)
0
0.009
0.018
0.026
0.035
Drakma Dexador
w/out conneciton-pool
0.013s
0.024s
52. Sending GET request 30 times to Local Server
(lower is better)
0
0.009
0.018
0.026
0.035
Drakma Dexador
w/out conneciton-pool
0.013s
0.024s
Benchmark
x1.8 faster!
53. Sending GET request 30 times to Local Server
(lower is better)
0
0.009
0.018
0.026
0.035
Drakma Dexador
w/out conneciton-pool
0.013s
0.024s
Benchmark
x1.8 faster!????
55. Benchmark
Sending GET request 30 times to Remote Server
(lower is better)
0
0.15
0.3
0.45
0.6
Drakma Dexador
w/out conneciton-pool
0.505s
56. Benchmark
Sending GET request 30 times to Remote Server
(lower is better)
0
0.15
0.3
0.45
0.6
Drakma Dexador
w/out conneciton-pool
0.396s
0.505s
57. Benchmark
Sending GET request 30 times to Remote Server
(lower is better)
0
0.15
0.3
0.45
0.6
Drakma Dexador
w/out conneciton-pool
0.396s
0.505s x1.2 faster
58. Benchmark
Sending GET request 30 times to Remote Server
(lower is better)
0
0.15
0.3
0.45
0.6
Drakma Dexador
w/out conneciton-pool
0.396s
0.505s 0.0036 sec/req
59. Benchmark
Sending GET request 30 times to Remote Server
(lower is better)
0
0.15
0.3
0.45
0.6
Drakma Dexador
w/out conneciton-pool
0.396s
0.505s 0.0036 sec/req
Too trivial improvement…
68. • Reuse connections once established
(Implicit) Connection-pooling
;; Establish a new connection
(dex:get “http://lisp.org/index.html“)
;; Reuse the above connection
(dex:get “http://lisp.org/index.html“)
69. • Reuse connections once established
(Implicit) Connection-pooling
;; Establish a new connection
(dex:get “http://lisp.org/index.html“)
;; Reuse the above connection
(dex:get “http://lisp.org/index.html“)
0.727 sec
0.380 sec
71. Benchmark
Sending GET request 30 times to Local Server
(lower is better)
0
0.006
0.012
0.018
0.024
Drakma Dexador
w/out conneciton-pool
Dexador
w/ connection-pool
0.013s
0.024s
72. Benchmark
Sending GET request 30 times to Local Server
(lower is better)
0
0.006
0.012
0.018
0.024
Drakma Dexador
w/out conneciton-pool
Dexador
w/ connection-pool
0.005s
0.013s
0.024s
73. Benchmark
Sending GET request 30 times to Local Server
(lower is better)
0
0.006
0.012
0.018
0.024
Drakma Dexador
w/out conneciton-pool
Dexador
w/ connection-pool
0.005s
0.013s
0.024s
x4.8 faster!
74. Benchmark
Sending GET request 30 times to Remote Server
(lower is better)
0
0.15
0.3
0.45
0.6
Drakma Dexador
w/out conneciton-pool
Dexador
w/ connection-pool
0.396s
0.505s
75. Benchmark
Sending GET request 30 times to Remote Server
(lower is better)
0
0.15
0.3
0.45
0.6
Drakma Dexador
w/out conneciton-pool
Dexador
w/ connection-pool
0.219s
0.396s
0.505s
76. Benchmark
Sending GET request 30 times to Remote Server
(lower is better)
0
0.15
0.3
0.45
0.6
Drakma Dexador
w/out conneciton-pool
Dexador
w/ connection-pool
0.219s
0.396s
0.505s Still x2.3 faster!
77. • It’s pretty common to request to the same
host multiple times
• Can expect some performance
improvements in real applications
In real applications
79. • Still BETA (v0.9.7)
• Stabilizing. More performance
improvements are secondary importance.
• Bug reports are welcome
• Tested with SBCL, CCL, ABCL and ECL
on Travis CI
Status