new cv 2019
Just another web 3.0 blog :: prev - next

--- FFmpeg group files by encoding ---

destinationFOlder=~/desktop #list files recursively within folder, group them by specs x=`find . -type f -size +20M`;rm *.list;for i in $x;do ffprobe -hide_banner -loglevel fatal -show_error -show_format -show_streams -print_format json $i >info.txt; j=`php -r '$x=file_get_contents($argv[1]);if(!trim($x))die;$x=json_decode($x,1);if(!$x)die;$x=[$x["format"]["format_name"],$x["streams"][0]["codec_name"],$x["streams"][0]["width"],$x["streams"][0]["height"],$x["streams"][0]["r_frame_rate"]];echo preg_replace("~[^a-z0-9.-_]+~i","",implode("-",$x));' info.txt`; ');" onmouseout="HT()">$i);$ef=end($ef);if(substr($ef,0,2)!="dd"){$i2=str_replace($ef,"dd".date("Ymd-His",filemtime($i))."-drn-".preg_replace("~[^a-z0-9.-_]+~i","",$ef),$i);rename($i,$i2);die($i2);}die($i);' $i $j`; echo ">$i>$j";echo "file '$i'" >> $j.list; done; #-- then foreach list concat those files x=`find . -name *.list`; for list in $x; do php -r '$list=$argv[1];$x=explode(" ",file_get_contents($list));asort($x);file_put_contents($list,trim(implode(" ",$x)));' $list reOrdersList;ffmpeg -y -f concat -hide_banner -loglevel error -safe 0 -i $list -c copy -acodec copy $destinationFOlder$list.mp4;done; #final cleanup assemby files php -r '$x=explode(" ",file_get_contents($argv[1]));foreach($x as $v){$v=trim(str_replace(["file ","./"],"",$v),chr(39));unlink($v);echo" del:".$v;}' movmp4m4a3gp3g2mj2-h264-4096-2160-240001001.list cleanupFilesUsedToBeConcatOnceOk

--- Alp Web Studio ---

Alp web Studio : Votre agence digitale spécialisée dans le web et la stratégie internet depuis 2006 !

--- Css sprites dynamic updates ---

Replaces the previous 2007 version, faster, accurate, easy to change + spritesgenerator ( don't miss the run button ) :

--- phpoo++ notfound classes ---

#-notfound.class.php class notfound{ public $data=[];#fs, mais individuelles #appels functions not set function __call($name,$args){ #die("__CALL:".$name.":".print_r(compact('args'),1)); $name=strtolower($name); if(array_key_exists($name,$this->data))return $this->data[$name];#obj->name(); #failsafe for _ method differences $name=strtolower(str_replace('_','',$name)); $matches=[$name,'get'.$name,'set'.$name]; foreach($matches as $method) if(method_exists($this,$method))return $this->$method($args); #aliases $aliases=['gettitre'=>'getnom']; foreach($aliases as $souhait=>$exists) if($name==$souhait && method_exists($this,$exists))return $this->$exists($args); #getters, setters not found $reste=substr($name,3); if(substr($name,0,3)=='get')return $this->$reste; if(substr($name,0,3)=='set')$this->$reste=reset($args); #global namespaces functions if(in_array($name,['ajoutsessionpubaffiliation','create_centre_fiches_offre_fiche']))return; if(function_exists($name))return call_user_func(''.$name,$args[0]); #$f=__FILE__.':'.__LINE__;die('
'.print_r(compact('f','name','args'),1));              
        return $this;#anyways
    }
    /*private function __construct(){}*/
    function __construct($p=[]){
        if(is_array($p))foreach($p as $k=>$v)$this->$k=$v;#register those parameters if passed
        #$class=static::class;if(!isset(static::$instances[$class]))static::$instances[$class]=$this;else static::$additional[$class][]=$this;
    }#register him anyways, la seconde construction ne sera pas bindée..
}

#-autoloader.php

spl_autoload_register('load1');
function load1($classname) {/*__autoload*/
  static $loaded;if(is_array($loaded)&& in_array($classname,$loaded))return;
  $f = "./". $classname .".php";
  if(is_file($f)){require_once($f);}#but the globals remains nested here forever ..
  else{
      require_once'notfound.class.php';
      eval("class {$classname} extends notfound{};");#;echo',nf:'.$classname;
      #file_put_contents('/home/500.clog',"
".date('YmdHis').':'.__FILE__.__LINE__.':'.$classname,FILE_APPEND);
  }
  $loaded[]=$classname;
}

--- web development agencies thing ive seen ---

** Retour sur 10 années d'expérience d'agences et de développement web ** J'ai vu au long de nombreuses agences web dans lesquelles je suis intervenu : Des "leads développeurs" dont l'unique préoccupation était les single quotes pour la performance d'un site en ignorant tous les autres aspects. Des développeurs qui ne l'était pas, pratiquant le copier-coller et refusant des choses nouvelles, ou même ne connaissant pas le sql mais doctrine, oui, connaissant les emballages, mais pas le contenu .. Des développeurs refusant de faire du front ou inversement des développeurs refusant de faire du back .. Des chefs de projets ne se fiant qu'à leur avis, ne se remettant jamais en question et bluffant completement sur les temps de rendus, sans demander aux développeurs, mettant la pression à ces derniers jusqu'au point de rupture. Des "directeurs" qui ne savent pas du tout de quoi ils parlent, en même temps c'est normal, il ne s'agit que de simples titres attribué à des commerciaux afin de leur donner plus de crédit, de poids vis à vis des clients. Des projets cloisonés, non documentés, sur lequels 13 personnes on été successivement affectées sans que personnes n'ait de réelle vue d'ensemble. De réelles catastrophes et des gens en face, qui ne veulent pas en tirer des leçons, ne se remettant jamais en cause. Quelquefois, des gens brillants, osant se remettre eux-mêmes en question avant les autres, mais en général, hélàs, ces derniers ne font pas "vraiment" carrière, demeurent "indépendants", au final, car ces derniers ne vendent pas "assez bien" quand les choses sont posées, sans fausses-promesses, ni d'ambition à s'élever en écrasant / dévalorisant ses collègues. * Sous réserve d'avoir bien compris .. voilà comment on en parvient là .. pas assez de paroles pour les gens qui éxecutent, des chefs qui ignorent les alertes et avertissements ..

--- Website checklist ---

1) Has backups ( source, sql, medias, static files ) ? 2) Version Control ? 3) Portable ? Minimum dependencies ? Easy To Migrate settings ? 4) Mysql crash proof ? 5) Redis crash proof ? 6) Has a failsafe ? Failover ? 7) Has a developer logs && maintenance logs 8) Optimized queries, cache, 304, cdn 9) Elastic Ip adress or short TTL domain name ( in case main server has no failover and needs to be switched .. ) chown 33:33 -R .;#www-data ( apache or nginx user ) find . -type d -exec chmod 775 {} ; find . -type f -exec chmod 644 {} ; - Avoids spending 70% time switching files && environments - Avoids spending 25% time with phpmyadmin in prod environment - Avoids spending 15% time reviewing log files Using Frontcontroller : assume .php files can't be accessed directly by their respective urls ( frontcontroller defines FRONTCONTROLLER ), if(!defined('FRONTCONTROLLER'))die; Frontcontroller for 404 : send 200 headers if ressource matches a route

--- 9 layers php cache for high performance websites ---

The way of optimizing most PHP Websites are pretty simple & don't require any expensive webserver to run heavy load applications. ( quiet a long time since I haven't written anything here, becuz I've just never had the time at all ... ) The first places to look for any optimizations are obvioulsy within the mysql queries & php code : as for year 2008, this blog upon a collocation host, took more than 83 sec to generate a page as 4 users online .. First step : implement a timer & debug functions ( as registered shutdown functions ) within your code & log them !! Here is the 9 layers PHP cache I've setup this far : 1 : Mysql results cache & mysql inner cache & mysql indexes **** 2 : Full page html cache expires in future + binded with 304 handler ( with inner codes to invalidate data from separate block suppressed with grep upon cron ) ***** ( you won't see them performing better if you put them in ram .. as the page's output will take the more time here .. that's why 304 has to be implemented here ) 3 : Opcode cache ( newer php version are faster, indeed )** 4 : JSON serialized data arrays served with 304 headers whetever or not the data has been modified ( upon invalidation ) *** 5 : Array based file cache in Ram ( includes redis, memcache ) *** 6 : Individual static html files cache for individual blocks 7 : 304 headers using browser own cache **** 8 : Reverse-proxy : consider using a cdn is the same effect here 9 : Cdn : cloudflare Then I'll demystify some legends : - Well configured apache performs better than NGINX ( AllowOverride Off, logging static files .. ) - Amazon t2.micro instance aren't so expensive after all and are quite fast !

--- offre emploi développeur php genève ---

Vous maitrisez Zend Framework, Magento, Symfony && Drupal ? Le shell linux vous est très familier, et vous concevez régulièrement des applications Android ? Rejoignez dès aujourd'hui notre équipe

--- php : &reference bug ---

A connaitre car peu évident à identifier ... Bug de passage en référence non nettoyé $_GET=['a'=>'b']; foreach($_GET as &$v)$v='blabla'; #unset($v);#pour ne jamais risquer de ré-ecrire cette variable #plus loin .. $v='autre valeur'; echo $_GET['a'];#autre valeur En particulier lorsqu'il s'agit d'une application symfony avec plus de 3600 fichiers sources, ou d'une pré-injection "nettoyant" les tableaux d'entrée GET,POST etc.. à moins de mettre unset($v);# à la fin de la première boucle

Developpeur php Geneve - php - rando - trip - india - web - php - dev - eco - science - astro - shop - annecy - ffmpeg - cv - alp - studio - pro - avis - agence - w - mea