SlideShare a Scribd company logo
Modern Perl Web Developement Dave Cross Magnum Solutions Ltd [email_address]
Web Development People have been developing web applications for over 15 years
Surely it is easy now
Lessons have been learned
Best practices have been worked out
History of Perl & Web Common Gateway Interface 1993
Defined the interaction between a web server and a program
Dynamic web pages
CGI Request includes parameters
Program processes parameters and produces response
Response includes program's output
Mid-Late 1990s Every web site gained dynamic pages
Form to email
Guestbook
Hit counter
Etc...
Most of them were written in Perl
CGI Problems CGI can be slow
Perl compiler starts up on every request
Can be very slow
Not useful for heavy traffic sites
mod_perl Everyone used Apache
Apache allowed loadable modules
mod_perl loads a Perl compiler
Persistent Perl processes
No more start-up costs
Huge performance improvements
Downsides Can't just use your CGI programs ModPerl::Registry Program is now called as a subroutine
Global variable issues
Many programs needed rewrites
Different input and output methods
Other Environments FastCGI
Microsoft IIS
lighttpd
Etc...
Lack of portability
Hold that thought
CGI Programs CGI programs do three things
Read user input
Process data
Produce output
Let's look at input and output in more detail
Output CGI programs produce two types of output
Headers Content-type Body The actual data (HTML, etc)
Simple CGI Output #!/usr/bin/perl print “Content-type: text/plain\n\n”; print 'The time is: ',   scalar localtime;
HTML #!/usr/bin/perl print “Content-type: text/html\n\n”; my $time = localtime; print <<END_HTML; <html><head><title>Time</title></head> <body><h1>Time</h1> <p>The time is: $time.</p></body></html> END_HTML
Enter CGI.pm CGI.pm standard part of Perl distribution
Handles CGI processing for you
Input and output
Output in the form of CGI & HTML helper functions
HTML With CGI.pm #!/usr/bin/perl use CGI ':standard'; print header; # default text/html my $time = localtime; print start_html(title => 'Time'),   h1('Time'),   p(“The time is: $time”);   end_html;
Downsides Mixing HTML and Perl code is nasty
What if you have a designer?
HTML experts don't always know Perl
Use a templating system instead
Template Toolkit <html>   <head>   <title>Time</title>   </head>   <body>   <h1>Time</h1>   <p>The time is: [% time %].</p>   </body> </html>
Template Toolkit <html>   <head>   <title>Time</title>   </head>   <body>   <h1>Time</h1>   <p>The time is:  [% time %] .</p>   </body> </html>
Template Toolkit Separate the HTML into a separate file
Use tags where the variable output goes
Easier to edit by your HTML team
Template Toolkit & Perl #!/usr/bin/perl use Template; use CGI 'header'; print header; my $tt = Template->new; my $time = localtime; $tt->process('time.tt',   { time => $time }   or die $tt->error;
User Input Users send input to CGI programs
Parameters encoded in the URL
http://example.com/cgi-bin/stuff?name=davorg&lang=Perl
Need to access these parameters
N.B. I'm deliberately ignoring POST requests for simplicity
Old Style @pairs = split /&/, $ENV{QUERY_STRING}; foreach $pair (@pairs) {   ($k, $v) = split /=/, $pair;   $k =~ tr/+/ /;   $k =~ s/%([a-f0-9]{2})/pack 'C', hex($1)/ieg;   $v =~ tr/+/ /;   $v =~ s/%([a-f0-9]{2})/pack 'C', hex($1)/ieg;   $form{$k} = $v; } # And then later... my $name = $form{name}; @pairs = split /&/, $ENV{QUERY_STRING}; foreach $pair (@pairs) {   ($k, $v) = split /=/, $pair;
CGI.pm Style use CGI ':standard'; my $name = param('name');
However mod_perl has a different method for accessing parameters
Apache2::Request
Other environments have different methods
This is where PSGI comes in
PSGI & Plack
PSGI/Plack “ PSGI is an interface between Perl web applications and web servers, and Plack is a Perl module and toolkit that contains PSGI middleware, helpers and adapters to web servers.” http://plackperl.org/
PSGI/Plack PSGI is a specification (based on Python's WSGI)
Plack is a reference implementation (based on Ruby's Rack)
The Problem There are many ways to write web applications
Ad

Recommended

Introduction to Web Programming with Perl
Introduction to Web Programming with Perl
Dave Cross
 
Web Development in Perl
Web Development in Perl
Naveen Gupta
 
Perl in the Internet of Things
Perl in the Internet of Things
Dave Cross
 
Advanced Perl Techniques
Advanced Perl Techniques
Dave Cross
 
Modern Web Development with Perl
Modern Web Development with Perl
Dave Cross
 
Modern Perl
Modern Perl
Dave Cross
 
A reviravolta do desenvolvimento web
A reviravolta do desenvolvimento web
Wallace Reis
 
PSGI and Plack from first principles
PSGI and Plack from first principles
Perl Careers
 
Writing Pluggable Software
Writing Pluggable Software
Tatsuhiko Miyagawa
 
4.2 PHP Function
4.2 PHP Function
Jalpesh Vasa
 
Joomla security nuggets
Joomla security nuggets
guestbd1cdca
 
Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
Tatsuhiko Miyagawa
 
Introduction to Modern Perl
Introduction to Modern Perl
Dave Cross
 
Introduction To Lamp
Introduction To Lamp
Amzad Hossain
 
PHP FUNCTIONS
PHP FUNCTIONS
Zeeshan Ahmed
 
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
Fernando Hamasaki de Amorim
 
Tatsumaki
Tatsumaki
Tatsuhiko Miyagawa
 
Plack - LPW 2009
Plack - LPW 2009
Tatsuhiko Miyagawa
 
Zephir - A Wind of Change for writing PHP extensions
Zephir - A Wind of Change for writing PHP extensions
Mark Baker
 
Intro to PSGI and Plack
Intro to PSGI and Plack
Tatsuhiko Miyagawa
 
PHP - Introduction to PHP Functions
PHP - Introduction to PHP Functions
Vibrant Technologies & Computers
 
PHP Basic
PHP Basic
Yoeung Vibol
 
Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018
Adam Tomat
 
Plack at YAPC::NA 2010
Plack at YAPC::NA 2010
Tatsuhiko Miyagawa
 
PHP - Introduction to PHP
PHP - Introduction to PHP
Vibrant Technologies & Computers
 
Tobias Nyholm "Deep dive into Symfony 4 internals"
Tobias Nyholm "Deep dive into Symfony 4 internals"
Fwdays
 
Introduction To PHP
Introduction To PHP
Shweta A
 
Introduction to PHP
Introduction to PHP
Collaboration Technologies
 
How to build a High Performance PSGI/Plack Server
How to build a High Performance PSGI/Plack Server
Masahiro Nagano
 
Design and Implementation of GCC Register Allocation
Design and Implementation of GCC Register Allocation
Kito Cheng
 

More Related Content

What's hot (20)

Writing Pluggable Software
Writing Pluggable Software
Tatsuhiko Miyagawa
 
4.2 PHP Function
4.2 PHP Function
Jalpesh Vasa
 
Joomla security nuggets
Joomla security nuggets
guestbd1cdca
 
Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
Tatsuhiko Miyagawa
 
Introduction to Modern Perl
Introduction to Modern Perl
Dave Cross
 
Introduction To Lamp
Introduction To Lamp
Amzad Hossain
 
PHP FUNCTIONS
PHP FUNCTIONS
Zeeshan Ahmed
 
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
Fernando Hamasaki de Amorim
 
Tatsumaki
Tatsumaki
Tatsuhiko Miyagawa
 
Plack - LPW 2009
Plack - LPW 2009
Tatsuhiko Miyagawa
 
Zephir - A Wind of Change for writing PHP extensions
Zephir - A Wind of Change for writing PHP extensions
Mark Baker
 
Intro to PSGI and Plack
Intro to PSGI and Plack
Tatsuhiko Miyagawa
 
PHP - Introduction to PHP Functions
PHP - Introduction to PHP Functions
Vibrant Technologies & Computers
 
PHP Basic
PHP Basic
Yoeung Vibol
 
Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018
Adam Tomat
 
Plack at YAPC::NA 2010
Plack at YAPC::NA 2010
Tatsuhiko Miyagawa
 
PHP - Introduction to PHP
PHP - Introduction to PHP
Vibrant Technologies & Computers
 
Tobias Nyholm "Deep dive into Symfony 4 internals"
Tobias Nyholm "Deep dive into Symfony 4 internals"
Fwdays
 
Introduction To PHP
Introduction To PHP
Shweta A
 
Introduction to PHP
Introduction to PHP
Collaboration Technologies
 
Joomla security nuggets
Joomla security nuggets
guestbd1cdca
 
Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
Tatsuhiko Miyagawa
 
Introduction to Modern Perl
Introduction to Modern Perl
Dave Cross
 
Introduction To Lamp
Introduction To Lamp
Amzad Hossain
 
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
Fernando Hamasaki de Amorim
 
Zephir - A Wind of Change for writing PHP extensions
Zephir - A Wind of Change for writing PHP extensions
Mark Baker
 
Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018
Adam Tomat
 
Tobias Nyholm "Deep dive into Symfony 4 internals"
Tobias Nyholm "Deep dive into Symfony 4 internals"
Fwdays
 
Introduction To PHP
Introduction To PHP
Shweta A
 

Viewers also liked (16)

How to build a High Performance PSGI/Plack Server
How to build a High Performance PSGI/Plack Server
Masahiro Nagano
 
Design and Implementation of GCC Register Allocation
Design and Implementation of GCC Register Allocation
Kito Cheng
 
Developing apps using Perl
Developing apps using Perl
Anatoly Sharifulin
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and others
Yusuke Wada
 
Mojolicious: what works and what doesn't
Mojolicious: what works and what doesn't
Cosimo Streppone
 
CPANci: Continuous Integration for CPAN
CPANci: Continuous Integration for CPAN
Mike Friedman
 
Mojolicious. The web in a box!
Mojolicious. The web in a box!
Anatoly Sharifulin
 
REST Enabling Your Oracle Database
REST Enabling Your Oracle Database
Jeff Smith
 
Perl hosting for beginners - Cluj.pm March 2013
Perl hosting for beginners - Cluj.pm March 2013
Arpad Szasz
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
 
Perl Dancer for Python programmers
Perl Dancer for Python programmers
xSawyer
 
Modern Perl Catch-Up
Modern Perl Catch-Up
Dave Cross
 
JSP 빠르게 시작하기
JSP 빠르게 시작하기
Park JoongSoo
 
Simple Photo Processing and Web Display with Perl
Simple Photo Processing and Web Display with Perl
Kent Cowgill
 
Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011
leo lapworth
 
Perl Scripting
Perl Scripting
Varadharajan Mukundan
 
How to build a High Performance PSGI/Plack Server
How to build a High Performance PSGI/Plack Server
Masahiro Nagano
 
Design and Implementation of GCC Register Allocation
Design and Implementation of GCC Register Allocation
Kito Cheng
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and others
Yusuke Wada
 
Mojolicious: what works and what doesn't
Mojolicious: what works and what doesn't
Cosimo Streppone
 
CPANci: Continuous Integration for CPAN
CPANci: Continuous Integration for CPAN
Mike Friedman
 
Mojolicious. The web in a box!
Mojolicious. The web in a box!
Anatoly Sharifulin
 
REST Enabling Your Oracle Database
REST Enabling Your Oracle Database
Jeff Smith
 
Perl hosting for beginners - Cluj.pm March 2013
Perl hosting for beginners - Cluj.pm March 2013
Arpad Szasz
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
 
Perl Dancer for Python programmers
Perl Dancer for Python programmers
xSawyer
 
Modern Perl Catch-Up
Modern Perl Catch-Up
Dave Cross
 
JSP 빠르게 시작하기
JSP 빠르게 시작하기
Park JoongSoo
 
Simple Photo Processing and Web Display with Perl
Simple Photo Processing and Web Display with Perl
Kent Cowgill
 
Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011
leo lapworth
 
Ad

Similar to Modern Web Development with Perl (20)

Silex Cheat Sheet
Silex Cheat Sheet
Andréia Bohner
 
Silex Cheat Sheet
Silex Cheat Sheet
Andréia Bohner
 
Further Php
Further Php
Digital Insights - Digital Marketing Agency
 
Mojolicious. Веб в коробке!
Mojolicious. Веб в коробке!
Anatoly Sharifulin
 
Web Scraping with PHP
Web Scraping with PHP
Matthew Turland
 
What's New in ZF 1.10
What's New in ZF 1.10
Ralph Schindler
 
Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門
lestrrat
 
Rack Middleware
Rack Middleware
LittleBIGRuby
 
Tidy Up Your Code
Tidy Up Your Code
Abbas Ali
 
Framework
Framework
Nguyen Linh
 
HTML::FormHandler
HTML::FormHandler
bbeeley
 
Blog Hacks 2011
Blog Hacks 2011
Yusuke Wada
 
P H P Part I I, By Kian
P H P Part I I, By Kian
phelios
 
Spyware/Malware FVCP
Spyware/Malware FVCP
Pete DuMelle
 
FVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / Widgets
Pete DuMelle
 
August 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle Twitter
Straight North
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Tatsuhiko Miyagawa
 
Bag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
Marcus Ramberg
 
Django
Django
webuploader
 
WordPress REST API hacking
WordPress REST API hacking
Jeroen van Dijk
 
Mojolicious. Веб в коробке!
Mojolicious. Веб в коробке!
Anatoly Sharifulin
 
Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門
lestrrat
 
Tidy Up Your Code
Tidy Up Your Code
Abbas Ali
 
HTML::FormHandler
HTML::FormHandler
bbeeley
 
P H P Part I I, By Kian
P H P Part I I, By Kian
phelios
 
Spyware/Malware FVCP
Spyware/Malware FVCP
Pete DuMelle
 
FVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / Widgets
Pete DuMelle
 
August 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle Twitter
Straight North
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Tatsuhiko Miyagawa
 
Bag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
Marcus Ramberg
 
WordPress REST API hacking
WordPress REST API hacking
Jeroen van Dijk
 
Ad

More from Dave Cross (20)

Measuring the Quality of Your Perl Code
Measuring the Quality of Your Perl Code
Dave Cross
 
Apollo 11 at 50 - A Simple Twitter Bot
Apollo 11 at 50 - A Simple Twitter Bot
Dave Cross
 
Monoliths, Balls of Mud and Silver Bullets
Monoliths, Balls of Mud and Silver Bullets
Dave Cross
 
The Professional Programmer
The Professional Programmer
Dave Cross
 
I'm A Republic (Honest!)
I'm A Republic (Honest!)
Dave Cross
 
Web Site Tune-Up - Improve Your Googlejuice
Web Site Tune-Up - Improve Your Googlejuice
Dave Cross
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
Dave Cross
 
Freeing Tower Bridge
Freeing Tower Bridge
Dave Cross
 
Error(s) Free Programming
Error(s) Free Programming
Dave Cross
 
Medium Perl
Medium Perl
Dave Cross
 
Improving Dev Assistant
Improving Dev Assistant
Dave Cross
 
Conference Driven Publishing
Conference Driven Publishing
Dave Cross
 
Conference Driven Publishing
Conference Driven Publishing
Dave Cross
 
TwittElection
TwittElection
Dave Cross
 
Return to the Kingdom of the Blind
Return to the Kingdom of the Blind
Dave Cross
 
Github, Travis-CI and Perl
Github, Travis-CI and Perl
Dave Cross
 
Object-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and Moose
Dave Cross
 
Database Programming with Perl and DBIx::Class
Database Programming with Perl and DBIx::Class
Dave Cross
 
Modern Perl for Non-Perl Programmers
Modern Perl for Non-Perl Programmers
Dave Cross
 
Matt's PSGI Archive
Matt's PSGI Archive
Dave Cross
 
Measuring the Quality of Your Perl Code
Measuring the Quality of Your Perl Code
Dave Cross
 
Apollo 11 at 50 - A Simple Twitter Bot
Apollo 11 at 50 - A Simple Twitter Bot
Dave Cross
 
Monoliths, Balls of Mud and Silver Bullets
Monoliths, Balls of Mud and Silver Bullets
Dave Cross
 
The Professional Programmer
The Professional Programmer
Dave Cross
 
I'm A Republic (Honest!)
I'm A Republic (Honest!)
Dave Cross
 
Web Site Tune-Up - Improve Your Googlejuice
Web Site Tune-Up - Improve Your Googlejuice
Dave Cross
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
Dave Cross
 
Freeing Tower Bridge
Freeing Tower Bridge
Dave Cross
 
Error(s) Free Programming
Error(s) Free Programming
Dave Cross
 
Improving Dev Assistant
Improving Dev Assistant
Dave Cross
 
Conference Driven Publishing
Conference Driven Publishing
Dave Cross
 
Conference Driven Publishing
Conference Driven Publishing
Dave Cross
 
Return to the Kingdom of the Blind
Return to the Kingdom of the Blind
Dave Cross
 
Github, Travis-CI and Perl
Github, Travis-CI and Perl
Dave Cross
 
Object-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and Moose
Dave Cross
 
Database Programming with Perl and DBIx::Class
Database Programming with Perl and DBIx::Class
Dave Cross
 
Modern Perl for Non-Perl Programmers
Modern Perl for Non-Perl Programmers
Dave Cross
 
Matt's PSGI Archive
Matt's PSGI Archive
Dave Cross
 

Recently uploaded (20)

"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
"Database isolation: how we deal with hundreds of direct connections to the d...
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Josef Weingand
 
2025_06_18 - OpenMetadata Community Meeting.pdf
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
Mastering AI Workflows with FME by Mark Döring
Mastering AI Workflows with FME by Mark Döring
Safe Software
 
Cluster-Based Multi-Objective Metamorphic Test Case Pair Selection for Deep N...
Cluster-Based Multi-Objective Metamorphic Test Case Pair Selection for Deep N...
janeliewang985
 
Python Conference Singapore - 19 Jun 2025
Python Conference Singapore - 19 Jun 2025
ninefyi
 
Curietech AI in action - Accelerate MuleSoft development
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
OpenPOWER Foundation & Open-Source Core Innovations
OpenPOWER Foundation & Open-Source Core Innovations
IBM
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
Securing AI - There Is No Try, Only Do!.pdf
Securing AI - There Is No Try, Only Do!.pdf
Priyanka Aash
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
Techniques for Automatic Device Identification and Network Assignment.pdf
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
cnc-processing-centers-centateq-p-110-en.pdf
cnc-processing-centers-centateq-p-110-en.pdf
AmirStern2
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
AI VIDEO MAGAZINE - June 2025 - r/aivideo
AI VIDEO MAGAZINE - June 2025 - r/aivideo
1pcity Studios, Inc
 
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
The Future of Product Management in AI ERA.pdf
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
"Database isolation: how we deal with hundreds of direct connections to the d...
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Josef Weingand
 
2025_06_18 - OpenMetadata Community Meeting.pdf
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
Mastering AI Workflows with FME by Mark Döring
Mastering AI Workflows with FME by Mark Döring
Safe Software
 
Cluster-Based Multi-Objective Metamorphic Test Case Pair Selection for Deep N...
Cluster-Based Multi-Objective Metamorphic Test Case Pair Selection for Deep N...
janeliewang985
 
Python Conference Singapore - 19 Jun 2025
Python Conference Singapore - 19 Jun 2025
ninefyi
 
Curietech AI in action - Accelerate MuleSoft development
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
OpenPOWER Foundation & Open-Source Core Innovations
OpenPOWER Foundation & Open-Source Core Innovations
IBM
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
Securing AI - There Is No Try, Only Do!.pdf
Securing AI - There Is No Try, Only Do!.pdf
Priyanka Aash
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
Techniques for Automatic Device Identification and Network Assignment.pdf
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
cnc-processing-centers-centateq-p-110-en.pdf
cnc-processing-centers-centateq-p-110-en.pdf
AmirStern2
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
AI VIDEO MAGAZINE - June 2025 - r/aivideo
AI VIDEO MAGAZINE - June 2025 - r/aivideo
1pcity Studios, Inc
 
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
The Future of Product Management in AI ERA.pdf
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 

Modern Web Development with Perl