SlideShare une entreprise Scribd logo
1  sur  66
Télécharger pour lire hors ligne
Listen  and lookatyour  PHP  CODE!,[object Object],Gabriele Santini9/10/2010,[object Object]
Gabriele Santini,[object Object],Architect/Consultant at SQLI,[object Object],Contributor to PHP_CodeSniffer,[object Object],So expect a special focus on this…,[object Object],Sonar PHP Plugin,[object Object],I have to show you!,[object Object],Ex-mathematician :,[object Object],love business modelling,[object Object],love architectures,[object Object],love quality assurance,[object Object],… not an « OS geek » ,[object Object]
StaticAnalysis,[object Object],All youcansay about your program withoutactuallyexecute the code,[object Object],The restisalsointeresting, let’s talk about itanother time !,[object Object],Examples ?,[object Object],Syntax check, coding style, anti-patterns, metrics,                OO design analysis, …,[object Object],What must bedonebeforeexecuting the code ?,[object Object]
Levels of analysis,[object Object],Lexical analysis,[object Object],Read sources linearlysearching for known patterns,[object Object],Convertthem to a sequence of tokens,[object Object]
Levels of analysis,[object Object],Lexical analysis,[object Object],Read sources linearlysearching for known patterns,[object Object],Convertthem to a sequence of tokens,[object Object],SyntacticAnalysis,[object Object],Parse the tokens to findtheirlogical structure,[object Object]
Levels of analysis,[object Object],Lexical analysis,[object Object],Read sources linearlysearching for known patterns,[object Object],Convertthem to a sequence of tokens,[object Object],SyntacticAnalysis,[object Object],Parse the tokens to findtheirlogical structure,[object Object],Opcode (Bytecode) Generation,[object Object],Generates an intermediary code that the Zend Enginewillbe able to execute,[object Object]
Lexical Analysis,[object Object],Tokenizer,[object Object]
SyntacticAnalysis,[object Object],Useful to beseen as an AST,[object Object],Abstract  SyntaxTree,[object Object],Decompose code in a tree-likeform,[object Object],Can beexecuted once a contextisgiven,[object Object],Used in compilers,[object Object]
SyntacticAnalysis,[object Object]
OpcodesGeneration,[object Object],Misterytool…,[object Object]
GIVE US THE TOOLS !,[object Object]
PHP_CodeSniffer,[object Object],By Greg Sherwood,[object Object],PEAR library,[object Object],Venerableproject,[object Object],Code Style,[object Object],But also a lot more,[object Object],Works at lexical analysislevel,[object Object],Heavily use the tokenizer extension,[object Object]
PHP_CodeSniffer,[object Object],[object Object],[object Object]
PHP_CodeSniffer,[object Object],Standards,[object Object],Sets of Sniffsthatdefineyourcoding style,[object Object],Installed : ,[object Object],PEAR, ,[object Object],Generic, ,[object Object],Zend*, ,[object Object],Squiz, MySource,[object Object],PHPCS,[object Object]
PHP_CodeSniffer 1.3,[object Object],Rulesets XML!,[object Object]
Inside PHP_CodeSniffer,[object Object],Sniff class main methods,[object Object],register(),[object Object],Make the sniff a listener for the declaredtokens,[object Object],process($phpcsFile, $stackPtr),[object Object],Called by the file duringparsingwhen a declaredtokenisfound,[object Object],File,[object Object],Represents a parsed file,[object Object],Holds the tokens structure and offersconveniencemethods,[object Object]
Inside PHP_CodeSniffer,[object Object],Life of a Sniff,[object Object],DisallowMultipleStatementsSniff,[object Object]
Inside PHP_CodeSniffer,[object Object],Life of a Sniff,[object Object],DisallowMultipleStatementsSniff,[object Object]
Inside PHP_CodeSniffer,[object Object],Life of a Sniff,[object Object],DisallowMultipleStatementsSniff,[object Object]
Inside PHP_CodeSniffer,[object Object],Life of a Sniff,[object Object],DisallowMultipleStatementsSniff,[object Object],$stackPtr,[object Object]
Inside PHP_CodeSniffer,[object Object],Life of a Sniff,[object Object],DisallowMultipleStatementsSniff,[object Object]
Inside PHP_CodeSniffer,[object Object],Life of a Sniff (2),[object Object]
PHP_CodeSniffer,[object Object],At SQLI we have some framework standards,[object Object],Zend Framework,[object Object],Based on Thomas Weidnerwork,[object Object],Symfony,[object Object],In collaboration with Fabien Potencier,[object Object],Waiting for a serious release after 1.3 release,[object Object]
PHP_CodeSniffer,[object Object],At SQLI we have some framework standards,[object Object],Zend Framework,[object Object],Based on Thomas Weidnerwork,[object Object],Symfony,[object Object],In collaboration with Fabien Potencier,[object Object],Waiting for a serious release after 1.3 release,[object Object],That’snice, but…,[object Object],Where are the standards for the othertools ?,[object Object],I’ldexpect a Drupal, Wordpress, Cake official standard,[object Object]
PHP_CodeSniffer,[object Object],How far a standard can go in detection ? ,[object Object]
PHP_CodeSniffer,[object Object],How far a standard can go in detection ? ,[object Object],Interestingly far for generic PHP Code,[object Object]
PHP_CodeSniffer,[object Object],How far a standard can go in detection ? ,[object Object],Interestingly far for generic PHP Code,[object Object],Very far if you know yourtool’s structure,[object Object],Imagine for example forcing PHP alternative syntax in Symfonyviews…,[object Object],Or checking for escaping in Zend Views !,[object Object]
PHP_Depend,[object Object],By Manuel Pichler,[object Object],Functional port of JDepend,[object Object],OO design analysis,[object Object],Metrics visualisation,[object Object],Dependencyanalyzer,[object Object],Works at the syntacticanalysislevel,[object Object]
PHP_Depend,[object Object],How itworks,[object Object],PHP_Depend first makes an AST off your code,[object Object],A « personal » one, made by PHP objects,[object Object],ASTComment, ASTClosure, ASTEvalExpression, …,[object Object],This is made by the Builder/Parser component,[object Object],Using PHP Reflection,[object Object]
PHP_Depend,[object Object],How itworks (2),[object Object],ThenPHP_Dependcananswer questions by « visiting » the AST,[object Object],This is the task for example of MetricsAnalyzers, thatextendAbstractVisitor,[object Object], IOC,  the visitordecideswhat to do according to AST Class : visitMethod, visitForStatement(), …,[object Object],Analyzer canfirelistenersduringanalyze() call,[object Object],To getongoing informations about the visitprocess,[object Object]
PHP_Depend,[object Object],Whatitgives:,[object Object],The Abstraction/Instability graph,[object Object]
PHP_Depend,[object Object],Whatitgives:,[object Object],The Abstraction/Instability graph,[object Object]
PHP_Depend,[object Object],Whatitgives:,[object Object],The Pyramid !!,[object Object]
PHPMD,[object Object],By Manuel Pichler,[object Object],Detectsrules violations,[object Object],Analog to PHP_Codesniffer,[object Object],Works atsyntaxanalysislevel,[object Object],Actually on the same AST,[object Object],Depends on PHP_Depend,[object Object],Has rulesets !,[object Object]
PHPMD,[object Object],Whatitgives:,[object Object],Code Size Rules,[object Object],complexities, lengths, toomany, … ,[object Object],Design Rules,[object Object],OO, exit, eval,[object Object],NamingRules,[object Object],Too short/long identifiers, oldconstructors, …,[object Object],Unused Code Rules,[object Object],Methods, members, parameters,[object Object]
phploc,[object Object],By SebastianBergmann,[object Object],Simple tool to give basic metrics,[object Object],Fast, direct to the goal,[object Object],Works mostly on lexical level,[object Object],But use bytekit for ELOC if itcan,[object Object]
phpcpd,[object Object],By SebastianBergmann,[object Object],Simple tool to detectduplicated code,[object Object],Works on syntaxanalysislevel,[object Object],Use the tokenizer to minimizedifferences,[object Object],Comments, whitespaces, …,[object Object],Takes a minimum number of lines and tokens,[object Object],Encodes according to this,[object Object],Uses an hash table to find duplicates,[object Object]
vld,[object Object],Vulcan LogicDisassembler,[object Object],By Derick Rethans,[object Object],Works atbytecodelevel,[object Object],Shows generatedbytecodes,[object Object],Calculates possible paths (CFG),[object Object],Findunreachable code,[object Object],Couldbeused for code coveragepathmetrics,[object Object]
vld,[object Object],Output,[object Object]
vld,[object Object],Output,[object Object]
Bytekit,[object Object],By Stefan Esser (SektionEins),[object Object],Works at … bytecodelevel,[object Object],Similar to vld,[object Object],Exposes opcodes to a PHP array,[object Object],bytekit_disassemble_file($filename),[object Object],Can beuseddirectly for a custom script,[object Object]
Bytekit,[object Object],CFG visualisation,[object Object]
Bytekit-cli,[object Object],By SebastianBergmann,[object Object],PHP Interface to use bytekit to spot violation rules,[object Object],Initial state,[object Object],Implementedrules :,[object Object],Check for disallowedopcodes (exampleeval, exit),[object Object],Check for direct output of variables,[object Object],In svn, check for unescapedZendView,[object Object]
Padawan,[object Object],By Florian Anderiasch,[object Object],Focus on anti-pattern detection,[object Object],alpha (?),[object Object],Works on syntaxanalysislevel,[object Object],Based on PHC (PHP compiler),[object Object],Use an XML dump of the AST PHC generates,[object Object],Makesxpathsearches on it,[object Object]
Padawan,[object Object],Interestingapproach,[object Object],Rules are fairly simple to write,[object Object],Alreadymanyinteresting tests :,[object Object],Emptyconstructs (if, else, try,..), unsafetypecasts, looprepeated calls, unusedkeys in foreach, …,[object Object],PHC not easy to install,[object Object],Risk on PHC manteinance,[object Object]
Phantm,[object Object],By Etienne Kneuss,[object Object],Highlyexperimental,[object Object],Severe limitation on PHP dynamicfeatures,[object Object],False positives,[object Object],Works on syntaxanalysislevel,[object Object],Based on Java tools (Jflex, CUP, Scala),[object Object],Reports violations,[object Object],Non  top-leveldeclarations, call-time pass-by-ref, nontrivialinclude calls, assign in conditional, …,[object Object],Exploring  Type Flow Analysis,[object Object],Tries to infer types and check for type safety,[object Object]
Conclusion,[object Object],Use the right tool for the right job,[object Object],Coding style isbetteranalysedat the lexical level,[object Object],OO design isbetterviewedaftersyntactic analyses,[object Object],Unreachable code afterbytecoding,[object Object],Contribute !,[object Object],Plenty of thingsstill to implement,[object Object],Easy to have new ideas,[object Object],At least use them (youshould!) and give feedback,[object Object]
Restitution,[object Object],Once all thisiscollectedwhat to do withit ?,[object Object],At least, show it in a suitableform,[object Object],At best, integratethis in your CI system,[object Object]
phpUnderControl,[object Object],By Manuel Pichler,[object Object],CI for PHP,[object Object],Based on CruiseControl,[object Object],Integratesnativelyvarioustools :,[object Object],PHPUnit (+XDebug for code coverage), ,[object Object],PHP_CodeSniffer,[object Object],PHPDocumentor,[object Object],PMD via PHPUnit (now PHPMD) ,[object Object]
phpUnderControl,[object Object],Whatitgives : metrics graphs ,[object Object]
phpUnderControl,[object Object],Whatitgives : report lists,[object Object]
phpUnderControl,[object Object],Whatitgives : PHPCodeBrowser,[object Object]
Arbit,[object Object],By Qafoo (with Manuel Pichler),[object Object],Basically a projectmulti-servicestool,[object Object],Ticketing system,[object Object],Repository browser,[object Object],Continuousintegration,[object Object],As Manuel is in it, somegraphicalpresentations are unique for thistool,[object Object],Still alpha,[object Object]
Arbit,[object Object],Whatitgives : more metrics graphs,[object Object]
Arbit,[object Object],Whatitgives : PHP_Dependoverview,[object Object]
Arbit,[object Object],Whatitgives : Annotated sources,[object Object]
Plugins Sonar for PHP,[object Object],By me ,[object Object],Really by the Java guysat SQLI,[object Object],Frédéric Leroy, Akram Ben Aissi, Jérôme Tama ,[object Object],Sonar is the state of the art for Open Source QA Reporting in Java,[object Object],Thought for multilanguage,[object Object],Can easelyintegrate all PHP reportingsportedfrom Java tools,[object Object],Junit => PHPUnit,[object Object],JDepend => PHPDepend,[object Object],Java PMD => PHPMD,[object Object]
Plugins Sonar for PHP,[object Object],Ok, not alwayssoeasely,[object Object],CheckStyleis not PHP_CodeSniffer,[object Object],Formats are not identical,[object Object],Multi-languagedoesn’tmean no work to add one ,[object Object],First release on May 2010,[object Object],0.2 Alpha state, but workable,[object Object],Easy to install : giveit a try !,[object Object],Last version demo : sonar-php.sqli.com,[object Object],Ok, enough, here are the screenshots,[object Object]
Plugins Sonar for PHP,[object Object],Dashboard,[object Object]
Plugins Sonar for PHP,[object Object],Components : treemaps,[object Object]
Plugins Sonar for PHP,[object Object],Time machine,[object Object]
Plugins Sonar for PHP,[object Object],Hotspots,[object Object]
Plugins Sonar for PHP,[object Object],Violations,[object Object]
Plugins Sonar for PHP,[object Object],Editing Code Profile,[object Object]
Conclusion,[object Object],Sonar reallygoesfurther,[object Object],Best integrateswithHudson,[object Object],Stillis java…,[object Object],But SonarSourcereallywants to cooperate,[object Object],How to interactwithphpUnderControl, Arbit ?,[object Object],(actuallyour solution – PIC PHP SQLI- isbased on phpUC + Sonar),[object Object],This needs to evolve,[object Object]
Listen and look at your PHP code

Contenu connexe

Tendances

What's coming to c# (Tel-Aviv, 2018)
What's coming to c# (Tel-Aviv, 2018)What's coming to c# (Tel-Aviv, 2018)
What's coming to c# (Tel-Aviv, 2018)Moaid Hathot
 
WEB PROGRAMMING UNIT V BY BHAVSINGH MALOTH
WEB PROGRAMMING UNIT V BY BHAVSINGH MALOTHWEB PROGRAMMING UNIT V BY BHAVSINGH MALOTH
WEB PROGRAMMING UNIT V BY BHAVSINGH MALOTHBhavsingh Maloth
 
Python programming introduction
Python programming introductionPython programming introduction
Python programming introductionSiddique Ibrahim
 
Get started python programming part 1
Get started python programming   part 1Get started python programming   part 1
Get started python programming part 1Nicholas I
 
Packer Genetics: The selfish code
Packer Genetics: The selfish codePacker Genetics: The selfish code
Packer Genetics: The selfish codejduart
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonJaya Kumari
 
Python Foundation – A programmer's introduction to Python concepts & style
Python Foundation – A programmer's introduction to Python concepts & stylePython Foundation – A programmer's introduction to Python concepts & style
Python Foundation – A programmer's introduction to Python concepts & styleKevlin Henney
 
The Holistic Programmer
The Holistic ProgrammerThe Holistic Programmer
The Holistic ProgrammerAdam Keys
 
Ch07 Programming for Security Professionals
Ch07 Programming for Security ProfessionalsCh07 Programming for Security Professionals
Ch07 Programming for Security Professionalsphanleson
 
Reverse-engineering: Using GDB on Linux
Reverse-engineering: Using GDB on LinuxReverse-engineering: Using GDB on Linux
Reverse-engineering: Using GDB on LinuxRick Harris
 
ShaREing Is Caring
ShaREing Is CaringShaREing Is Caring
ShaREing Is Caringsporst
 
Advanced Python Tutorial | Learn Advanced Python Concepts | Python Programmin...
Advanced Python Tutorial | Learn Advanced Python Concepts | Python Programmin...Advanced Python Tutorial | Learn Advanced Python Concepts | Python Programmin...
Advanced Python Tutorial | Learn Advanced Python Concepts | Python Programmin...Edureka!
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonRanjith kumar
 
Os Worthington
Os WorthingtonOs Worthington
Os Worthingtonoscon2007
 
Web Programming UNIT VIII notes
Web Programming UNIT VIII notesWeb Programming UNIT VIII notes
Web Programming UNIT VIII notesBhavsingh Maloth
 

Tendances (20)

What's coming to c# (Tel-Aviv, 2018)
What's coming to c# (Tel-Aviv, 2018)What's coming to c# (Tel-Aviv, 2018)
What's coming to c# (Tel-Aviv, 2018)
 
WEB PROGRAMMING UNIT V BY BHAVSINGH MALOTH
WEB PROGRAMMING UNIT V BY BHAVSINGH MALOTHWEB PROGRAMMING UNIT V BY BHAVSINGH MALOTH
WEB PROGRAMMING UNIT V BY BHAVSINGH MALOTH
 
Python programming introduction
Python programming introductionPython programming introduction
Python programming introduction
 
Get started python programming part 1
Get started python programming   part 1Get started python programming   part 1
Get started python programming part 1
 
Py tut-handout
Py tut-handoutPy tut-handout
Py tut-handout
 
C interview questions and answers
C interview questions and answersC interview questions and answers
C interview questions and answers
 
Python
PythonPython
Python
 
Packer Genetics: The selfish code
Packer Genetics: The selfish codePacker Genetics: The selfish code
Packer Genetics: The selfish code
 
Lab4 scripts
Lab4 scriptsLab4 scripts
Lab4 scripts
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Python Foundation – A programmer's introduction to Python concepts & style
Python Foundation – A programmer's introduction to Python concepts & stylePython Foundation – A programmer's introduction to Python concepts & style
Python Foundation – A programmer's introduction to Python concepts & style
 
The Holistic Programmer
The Holistic ProgrammerThe Holistic Programmer
The Holistic Programmer
 
Ch07 Programming for Security Professionals
Ch07 Programming for Security ProfessionalsCh07 Programming for Security Professionals
Ch07 Programming for Security Professionals
 
Reverse-engineering: Using GDB on Linux
Reverse-engineering: Using GDB on LinuxReverse-engineering: Using GDB on Linux
Reverse-engineering: Using GDB on Linux
 
Introduction to Python Basics Programming
Introduction to Python Basics ProgrammingIntroduction to Python Basics Programming
Introduction to Python Basics Programming
 
ShaREing Is Caring
ShaREing Is CaringShaREing Is Caring
ShaREing Is Caring
 
Advanced Python Tutorial | Learn Advanced Python Concepts | Python Programmin...
Advanced Python Tutorial | Learn Advanced Python Concepts | Python Programmin...Advanced Python Tutorial | Learn Advanced Python Concepts | Python Programmin...
Advanced Python Tutorial | Learn Advanced Python Concepts | Python Programmin...
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Os Worthington
Os WorthingtonOs Worthington
Os Worthington
 
Web Programming UNIT VIII notes
Web Programming UNIT VIII notesWeb Programming UNIT VIII notes
Web Programming UNIT VIII notes
 

En vedette

Presentation kerrang annotation
Presentation kerrang annotationPresentation kerrang annotation
Presentation kerrang annotationJodieann46
 
Pda larionov
Pda larionovPda larionov
Pda larionovdino83
 
Media Evaluation
Media EvaluationMedia Evaluation
Media EvaluationJodieann46
 
Development of teenagers
Development of teenagersDevelopment of teenagers
Development of teenagersLisa Silmser
 
Change in a Star
Change in a StarChange in a Star
Change in a StarJodieann46
 

En vedette (8)

Presentation kerrang annotation
Presentation kerrang annotationPresentation kerrang annotation
Presentation kerrang annotation
 
Tiny House Blog
Tiny House BlogTiny House Blog
Tiny House Blog
 
Pda larionov
Pda larionovPda larionov
Pda larionov
 
Media Evaluation
Media EvaluationMedia Evaluation
Media Evaluation
 
Development of teenagers
Development of teenagersDevelopment of teenagers
Development of teenagers
 
Change in a Star
Change in a StarChange in a Star
Change in a Star
 
Dow Jones Content101
Dow Jones Content101Dow Jones Content101
Dow Jones Content101
 
Assalamualaikum PROSA
Assalamualaikum PROSAAssalamualaikum PROSA
Assalamualaikum PROSA
 

Similaire à Listen and look at your PHP code

The why and how of moving to php 8
The why and how of moving to php 8The why and how of moving to php 8
The why and how of moving to php 8Wim Godden
 
The why and how of moving to php 7
The why and how of moving to php 7The why and how of moving to php 7
The why and how of moving to php 7Wim Godden
 
Code analysis tools (for PHP)
Code analysis tools (for PHP)Code analysis tools (for PHP)
Code analysis tools (for PHP)Karlen Kishmiryan
 
Development workflow
Development workflowDevelopment workflow
Development workflowSigsiu.NET
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
 
Возможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OSВозможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OSCisco Russia
 
Pharo: A Reflective System
Pharo: A Reflective SystemPharo: A Reflective System
Pharo: A Reflective SystemPharo
 
OpenMetrics: What Does It Mean for You (PromCon 2019, Munich)
OpenMetrics: What Does It Mean for You (PromCon 2019, Munich)OpenMetrics: What Does It Mean for You (PromCon 2019, Munich)
OpenMetrics: What Does It Mean for You (PromCon 2019, Munich)Brian Brazil
 
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Later
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Laterjohn-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Later
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types LaterPositive Hack Days
 
Socket programming-in-python
Socket programming-in-pythonSocket programming-in-python
Socket programming-in-pythonYuvaraja Ravi
 
Python Developer Certification
Python Developer CertificationPython Developer Certification
Python Developer CertificationVskills
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
 
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...Rouven Weßling
 
Php Development Stack
Php Development StackPhp Development Stack
Php Development Stackshah_neeraj
 
Python course syllabus
Python course syllabusPython course syllabus
Python course syllabusSugantha T
 
Open frameworks 101_fitc
Open frameworks 101_fitcOpen frameworks 101_fitc
Open frameworks 101_fitcbenDesigning
 

Similaire à Listen and look at your PHP code (20)

PHP Internals
PHP InternalsPHP Internals
PHP Internals
 
The why and how of moving to php 8
The why and how of moving to php 8The why and how of moving to php 8
The why and how of moving to php 8
 
The why and how of moving to php 7
The why and how of moving to php 7The why and how of moving to php 7
The why and how of moving to php 7
 
Code analysis tools (for PHP)
Code analysis tools (for PHP)Code analysis tools (for PHP)
Code analysis tools (for PHP)
 
Development workflow
Development workflowDevelopment workflow
Development workflow
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
Возможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OSВозможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OS
 
Pharo: A Reflective System
Pharo: A Reflective SystemPharo: A Reflective System
Pharo: A Reflective System
 
OpenMetrics: What Does It Mean for You (PromCon 2019, Munich)
OpenMetrics: What Does It Mean for You (PromCon 2019, Munich)OpenMetrics: What Does It Mean for You (PromCon 2019, Munich)
OpenMetrics: What Does It Mean for You (PromCon 2019, Munich)
 
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Later
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Laterjohn-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Later
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Later
 
Socket programming-in-python
Socket programming-in-pythonSocket programming-in-python
Socket programming-in-python
 
Python Developer Certification
Python Developer CertificationPython Developer Certification
Python Developer Certification
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
 
WoMakersCode 2016 - Shit Happens
WoMakersCode 2016 -  Shit HappensWoMakersCode 2016 -  Shit Happens
WoMakersCode 2016 - Shit Happens
 
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
 
Php Development Stack
Php Development StackPhp Development Stack
Php Development Stack
 
Php Development Stack
Php Development StackPhp Development Stack
Php Development Stack
 
Python course syllabus
Python course syllabusPython course syllabus
Python course syllabus
 
Cpcs302 1
Cpcs302  1Cpcs302  1
Cpcs302 1
 
Open frameworks 101_fitc
Open frameworks 101_fitcOpen frameworks 101_fitc
Open frameworks 101_fitc
 

Listen and look at your PHP code

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.