“Use the right tool for the right job” is one of the first thing they teach you when you start out in these waters. I would make “Get to really know your tools” a second.
In this talk we’re going to work on the architecture of an app that showcases some common features/scenarios we all probably already have in the apps we’re working on: counters, leaderboards, queuing, timelines, caching. But this time we’ll implement them with Redis, making the apps much faster, your hardware (and you) much cooler, your boss (and the clients) much happier and hopefully your salary a bit higher.
“Use the right tool for the right job” is one of the first thing they teach you when you start out in these waters. I would make “Get to really know your tools” a second.
In this talk we’re going to work on the architecture of an app that showcases some common features/scenarios we all probably already have in the apps we’re working on: counters, leaderboards, queuing, timelines, caching. But this time we’ll implement them with Redis, making the apps much faster, your hardware (and you) much cooler, your boss (and the clients) much happier and hopefully your salary a bit higher.
This talk is an overview of the history of the PHP language and major framework projects that have emerged in the last 5 years. It examines what we've learned in the development of these frameworks, how that education has been brought to bear in Lithium. Most of this talk ended up being me demoing and answering questions, so there's not a lot of content in the slides, sorry.
Correctly understanding the eight data types in PHP is essential to a solid foundation in development. Come refresh your knowledge of the scalar types, compound types, and special data types used in PHP, and learn about proper usage of each. Review type juggling, learn some common data type traps to avoid, and how to code defensively to prevent having the data type of a variable change unexpectedly. Finally learn how unit tests can help verify that code is handling data types correctly.
The Perforce Web Content Management System development team, lacking a pre-existing solution in PHP, designed and implemented their own object model and record layer to ease the interaction of the system with the Perforce Server. This session will focus on how users can access files in Perforce via a simple CRUD API, the subsystems exposed, and their usage.
This talk is an overview of the history of the PHP language and major framework projects that have emerged in the last 5 years. It examines what we've learned in the development of these frameworks, how that education has been brought to bear in Lithium. Most of this talk ended up being me demoing and answering questions, so there's not a lot of content in the slides, sorry.
Correctly understanding the eight data types in PHP is essential to a solid foundation in development. Come refresh your knowledge of the scalar types, compound types, and special data types used in PHP, and learn about proper usage of each. Review type juggling, learn some common data type traps to avoid, and how to code defensively to prevent having the data type of a variable change unexpectedly. Finally learn how unit tests can help verify that code is handling data types correctly.
The Perforce Web Content Management System development team, lacking a pre-existing solution in PHP, designed and implemented their own object model and record layer to ease the interaction of the system with the Perforce Server. This session will focus on how users can access files in Perforce via a simple CRUD API, the subsystems exposed, and their usage.
LESS is a flexible and dynamic way to develop CSS. A developer can quickly utilize CSS3 features, including browser specific implementations, with little effort. LESS is what everyone dreamed CSS could be. With such things as variables, mixins, nested rules and operations. He will show you how to use LESS to make your development process faster and more efficient.
Do you find yourself using full stack frameworks for small sites, but think it's overkill. Micro-frameworks could be your solution.
Sinatra (Ruby) has popularized micro-frameworks, and we have many options in PHP. Jake Smith will introduce you to the current micro-frameworks in PHP and where they are best utilized.
Can't Miss Features of PHP 5.3 and 5.4Jeff Carouth
If you're like me you remember the days of PHP3 and PHP4; you remember when PHP5 was released, and how it was touted to change to your life. It's still changing and there are some features of PHP 5.3 and new ones coming with PHP 5.4 that will improve your code readability and reusability. Let's look at some touted features such as closures, namespaces, and traits, as well as some features being discussed for future releases.
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.
Preparing for the next PHP version (5.6)Damien Seguy
With versions stretching from 5.3 to 5.6, PHP has several major published versions, that require special attention when migrating. Beyond checking for compilation, the code must be reviewed to avoid pitfalls like obsoletes functions, new features, change in default parameters or behavior. We'll set up a checklist of such traps, and ways to find them in the code and be reading for PHP 5.6.
Johannes Schlüter's PHPNW08 slides:
The current PHP version, PHP 5.3 introduced a multitude of new language features, most notably namespaces and late static binding, new extensions such as phar, as well as numerous other improvements. Even so, this power-packed release boasts better performance than older PHP releases. This talk will give you a good overview about PHP 5.3 and show some less known features in detail.
Early in year 2000 Robert C. Martin, aka "Uncle Bob", introduced his thoughts in an article about some of five basic principles on object oriented programming to the open world. What he probably did not expect was, that this 5 principles became the standard for object oriented programming.
This Talk is about those principles: Single responsibility, Open/close, Liskov substitution, Interface segregation, and Dependency inversion, or shorter S.O.L.I.D. principles. It will give you an introduction about these principles, their meaning, and where they should be recognized and applied. Examples from my daily work will show you the practical aspects of those principles.
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.
With PHP5.3.3 recently released I really feel it is time that php developers are taking namespaces seriously. If you don’t I guarantee you will be out of a job within five years. Namespaces are a fundamental part of the future of PHP. The talk explains the usage on importing third party libraries, using it in your own code and aliasing. The full works.
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.
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
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.
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.
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.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
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.
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/
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.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
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.
2. PERFORMANCE
• Over 140 bug fixes
• 40%+ improvement with PHP on Windows
• 5% - 15% overall performance improvement
• MD5 roughly 15% faster
• Constants move to read-only memory
• Drupal 20% faster, Wordpress 15% faster
3. ADDITIONS
• New error_reporting E_DEPRECATED
• Garbage collection
• MySQLnd (Native Driver)
• No longer uses libmysql
• No PDO support (currently)
• MySQL version 4.1+
4. BACKWARDS COMPATIBILITY
• EREG Family is now E_DEPRECATED
• Use the Pearl Compatible (PCRE)
• __toString does not accept arguments/parameters
• Magic methods must be public and can not be static
• __call is now invoked on access to private/protected methods
• Classes can not be named Namespace or Closure
SOURCES: http://us2.php.net/manual/en/migration53.incompatible.php
5. MAGIC METHODS IN 5.3
<?php
class Backwards {
public function __call($method, $value) {
echo "Call Magic Method<br />n";
}
private function __get($method) {
}
private function __set($method, $value) {
}
private function getElements() {
echo "Get Elements<br />n";
}
}
$bc = new Backwards();
$bc->getElements();
6. CHANGES IN PHP.INI
• INI Variables
• Per Folder/Per Site ini settings
• User specified ini files
7. .INI VARIABLES
error_dev = E_ALL
error_prod = E_NONE
[HOST=dev.mydomain.com]
error_reporting = ${error_dev}
[HOST=mydomain.com]
error_reporting = ${error_prod}
[PATH=/var/www/vhosts/myotherdomain.com]
error_reporting = ${error_prod}
# User Defined ini. Place in web root. Set to blank to disable
user_ini.filename = .user.ini
user_ini.cache_ttl = 300
8. SLOW ADOPTION
• Open Source projects were initially not compatible with PHP
5.3
• Currentlymost major Open Source software (Wordpress,
Drupal, Joomla and Magento) work in PHP 5.3
• Key plugins are lacking behind
15. GOTO EXAMPLE
<?php
for($i=0,$j=50; $i<100; $i++) {
while($j--) {
if($j==17) goto end;
}
}
echo "i = $i";
end: // End
echo 'j hit 17';
SOURCES: http://php.net/manual/en/control-structures.goto.php
16. NOWDOC VS. HEREDOC
• NOWDOC works just like HEREDOC, except it does not
evaluate PHP variables
<?php
$myVar = 'testing';
// OUTPUT: Here is my text testing
$longString = <<<HEREDOC
Here is my text $myVar
HEREDOC;
// OUTPUT: Here is my text $myVar
$longString = <<<'NOWDOC'
Here is my text $myVar
'NOWDOC';
17. DATE/TIME OBJECT
ADDITIONS
• New functions/methods added to Date/Time Object
• date_add, date_sub and date_diff
<?php
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d') . "n";
// OR
$date = date_create('200-01-01');
date_add($date, date_interval_create_from_date_string('10 days'));
echo date_format($date, 'Y-m-d');
SOURCES: http://www.php.net/manual/en/class.datetime.php
19. __INVOKE
<?php
class Functor {
public function __invoke($param = null)
{
return 'Hello Param: ' . $param;
}
}
$func = new Functor();
echo $func('PHP 5.3'); // Hello Param: PHP 5.3
20. DYNAMIC STATIC METHOD
<?php
abstract class Model
{
const TABLE_NAME = '';
public static function __call($method, $params)
{
// Run logic
return $this->$method($criteria, $order, $limit, $offset);
}
}
21. DYNAMIC STATIC METHOD
<?php
abstract class Model
{
const TABLE_NAME = '';
public static function __callStatic($method, $params)
{
// Run logic
return static::$method($criteria, $order, $limit, $offset);
}
}
22. __CALLSTATIC
• __callStatic works exactly like __call, except it’s a static
method
• Acts as a catch all for all undefined methods (get or set)
<?php
abstract class Model
{
const TABLE_NAME = '';
public static function __callStatic($method, $params)
{
// Run logic
return static::$method($criteria, $order, $limit, $offset);
}
}
24. GET_CLASS_CALLED
<?php
namespace App {
abstract class Model {
public static function __callStatic($method, $params)
{
// Search Logic
$method = $matches[1];
return static::$method($criteria, $order, $limit, $offset);
}
public static function find($criteria = array(), $order = null, $limit = null, $offset = 0)
{
$tableName = strtolower(get_class_called()); // get_class_called will return Post
}
}
}
namespace AppModels {
class Post extends AppModel {}
}
// Returns all the posts that contain Dallas PHP in the title
$posts = Post::findByTitle('Dallas PHP');
?>
25. LATE STATIC BINDING
• This feature was named "late static bindings" with an internal
perspective in mind. "Late binding" comes from the fact that
static:: will no longer be resolved using the class where the
method is defined but it will rather be computed using
runtime information.
SOURCES: http://us.php.net/lsb
26. LSB BEFORE PHP 5.3
<?php
class Model {
const TABLE_NAME = '';
public static function getTable()
{
return self::TABLE_NAME;
}
}
class Author extends Model {
const TABLE_NAME = 'Author';
}
class Post extends Model {
const TABLE_NAME = 'Post'
}
// sadly you get nothing
echo Post::TABLE_NAME;
27. LSB PHP 5.3.X
• static keyword to save the day!
<?php
class Model {
const TABLE_NAME = '';
public static function getTable()
{
return static::TABLE_NAME;
}
}
class Author extends Model {
const TABLE_NAME = 'Author';
}
class Post extends Model {
const TABLE_NAME = 'Post'
}
// sadly you get nothing
echo Post::TABLE_NAME;
28. LAMBDA IN PHP 5.3
• Anonymous functions, also known as closures, allow the
creation of functions which have no specified name. They are
most useful as the value of callback parameters, but they have
many other uses.
• Good function examples: array_map() and array_walk()
<?php
$string = 'Testing';
$array = array('hello', 'world', 'trying', 'PHP 5.3');
$return = array_walk($array, function($v,$k) {
echo ucwords($v);
});
31. NAMESPACES
• Before PHP 5.3
• PHP didn’t have namespaces, so we created a standard:
“Zend_Auth_Adapter_DbTable”
• PEAR naming convention
• Easier for autoloaders
32. DEFINING A NAMESPACE
<?php
namespace MyAppUtil;
class String
{
public function formatPhone($phone) {
// Regex phone number
return true;
}
}
33. “USE” A NAMESPACE
<?php
use MyAppUtilString as String;
$str = new String();
if ($str->formatPhone('123-456-7890')) {
echo 'ITS TRUE';
}
34. DEFINING MULTIPLE
NAMESPACES
One Way Preferred Way!
<?php <?php
use FrameworkController as BaseController use FrameworkController as BaseController
use FrameworkModel as BaseModel use FrameworkModel as BaseModel
namespace MyAppControllers; namespace MyAppControllers {
class UsersController extends BaseController class UsersController extends
{ BaseController
{
}
}
namespace MyAppUserModel; }
class User extends BaseModel
{ namespace MyAppUserModel {
class User extends BaseModel
} {
}
}
35. WHAT IS GLOBAL SCOPE?
• Global Scope is your “root level” outside of the namespace
<?php
namespace Framework;
class DB
{
public function getConnection()
{
try {
$dbh = new PDO('mysql:dbname=testdb;host=localhost', 'root', 'pass');
} catch (Exception $e) {
echo 'Default Exception';
}
}
}
$db = new DB();
$db = $db->getConnection();