<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Latest snippets by user Nicolas Perriault</title>
  <link rel="alternate" href="http://snippets.prendreuncafe.com/snippets/from/NiKo/order_by/date"></link>
  <id>http://snippets.prendreuncafe.com/snippets/from/NiKo/order_by/date</id>
  <updated>2010-02-23T12:06:01Z</updated>
  <author>
    <name>Symfony</name>
    <author_email>noreply@symfony-project.com</author_email>
  </author>
<entry>
  <title>Who committed in this SVN repository?</title>
  <link href="http://snippets.prendreuncafe.com/snippet/103"></link>
  <updated>2010-02-23T12:06:01Z</updated>
  <id>103</id>
  <summary type="html">[code]
$ svn log -q | cut -d '|' -f 2 - | sort | uniq
[/code]

Via [Arnaud](http://twitter.com/arnaudlimbourg/statuses/9520985693).</summary>
</entry>
<entry>
  <title>Utiliser un retour charriot dans un remplacement sed</title>
  <link href="http://snippets.prendreuncafe.com/snippet/101"></link>
  <updated>2009-06-04T16:09:15Z</updated>
  <id>101</id>
  <summary type="html">Quand on veut utiliser un retour charriot (\n) dans un remplacement avec sed, on commence généralement par essayer ce genre de truc :

[code]
$ echo &quot;one,two,three&quot; | sed &quot;s/,/\n/g&quot;
[/code]

Mais ça ne fonctionne pas ; il faut donc émuler le retour charriot, ce qui est faisable de cette façon :

[code]
$ echo &quot;one,two,three&quot; | sed &quot;s/,/\\`echo -e '\n\r'`/g&quot;
[/code]</summary>
</entry>
<entry>
  <title>Bannir les cronmails</title>
  <link href="http://snippets.prendreuncafe.com/snippet/100"></link>
  <updated>2009-06-01T11:25:27Z</updated>
  <id>100</id>
  <summary type="html">Si vous utilisez crontab, vous recevez sans doute souvent des emails à l'adresse du propriétaire du compte avec le détail des sorties standards et d'erreurs suite à l'execution des commandes programmées.

Pour éviter ces emails, on peut systématiquement masquer ces sorties lors de l'appel à la ligne, par exemple dans un crontab :

[code bash]
*/10 * * * * ./myprogram 1&gt; /dev/null 2&gt; /dev/null
[/code]
</summary>
</entry>
<entry>
  <title>Récupérer le nombre d'abonnés feedburner</title>
  <link href="http://snippets.prendreuncafe.com/snippet/99"></link>
  <updated>2009-05-14T10:45:02Z</updated>
  <id>99</id>
  <summary type="html">Pour récupérer le nombre d'abonnés à un flux Feedburner, par exemple celui du flux de prendreuncafe.com :

[code php]
&lt;?php
$feedName = 'prendreuncafe'; // identifiant feedburner
$xml = @simplexml_load_file(sprintf('https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=%s&amp;dates=%s,%s',
  $feedName,
  date('Y-m-d', strtotime('-2 day')),
  date('Y-m-d', strtotime('-1 day'))));
if (!$xml) throw new RuntimeException('Feed unavailable');
var_dump((int) $xml-&gt;feed-&gt;entry[0]['circulation']);
[/code]

Source d'inspiration : [Oncle Tom](http://case.oncle-tom.net/2009/05/14/affichage-personnalise-abonnes-feedburner/)</summary>
</entry>
<entry>
  <title>Générer automatiquement des liens internationnalisés avec symfony 1.2</title>
  <link href="http://snippets.prendreuncafe.com/snippet/97"></link>
  <updated>2009-02-06T17:00:57Z</updated>
  <id>97</id>
  <summary type="html">Par exemple, dans le layout :

[code php]
&lt;ul&gt;
  &lt;li&gt;&lt;?php echo link_to(__('French'),  sprintf('@%s?sf_culture=fr', $r = $sf_context-&gt;getRouting()-&gt;getCurrentRouteName())) ?&gt;&lt;/li&gt;
  &lt;li&gt;&lt;?php echo link_to(__('English'), sprintf('@%s?sf_culture=en', $r)) ?&gt;&lt;/li&gt;
&lt;/ul&gt;
[/code]</summary>
</entry>
<entry>
  <title>[Symfony] Effacer partiellement le cache d'une application</title>
  <link href="http://snippets.prendreuncafe.com/snippet/94"></link>
  <updated>2008-05-26T15:34:00Z</updated>
  <id>94</id>
  <summary type="html">Toujours utile depuis un contexte d'application différent de celui visé :

[code=php]
sfToolkit::clearGlob(sfConfig::get('sf_cache_dir').'/frontend/*/all/*/templates/toto.cache');
[/code]</summary>
</entry>
<entry>
  <title>Gestion des tags en SQL</title>
  <link href="http://snippets.prendreuncafe.com/snippet/93"></link>
  <updated>2008-05-15T22:06:43Z</updated>
  <id>93</id>
  <summary type="html">Un schema classique de gestion de tags :

[code=sql]
CREATE TABLE Project ( 
  project_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  name VARCHAR(50) NOT NULL, 
  url TEXT NOT NULL, 
  PRIMARY KEY (project_id) 
) ENGINE=MyISAM;

CREATE TABLE Tags ( 
  tag_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  tag_text VARCHAR(50) NOT NULL, 
  PRIMARY KEY (tag_id), 
  INDEX (tag_text) 
) ENGINE=MyISAM; 

CREATE TABLE Tag2Project ( 
  tag INT UNSIGNED NOT NULL, 
  project INT UNSIGNED NOT NULL, 
  PRIMARY KEY (tag, project), 
  INDEX rv_primary (project, tag) 
) ENGINE=MyISAM;
[/code]

Pour récupérer tous les projets taggué `php` **ou** `mysql` :

[code=sql]
SELECT p.name 
FROM Project p 
  INNER JOIN Tag2Project t2p 
    ON p.project_id = t2p.project 
  INNER JOIN Tag t 
    ON t2p.tag = t.tag_id 
WHERE t.tag_text IN ('mysql', 'php');
[/code]

Pour récupérer tous les projets taggué `php` **et** `mysql` :

[code=sql]
SELECT p.name 
FROM Project p 
  CROSS JOIN Tag t1 
  CROSS JOIN Tag t2 
  INNER JOIN Tag2Project t2p 
    ON p.project_id = t2p.project 
      AND t2p.tag = t1.tag_id 
  INNER JOIN Tag2Project t2p2 
    ON t2p.project = t2p2.project 
      AND t2p2.tag = t2.tag_id 
WHERE t1.tag_text = &quot;php&quot; 
  AND t2.tag_text = &quot;mysql&quot;;
[/code]

Tiré et adapté de la présentation [Join-fu de Jay Pipes](http://jpipes.com/presentations/joinfu/joinfu.pdf)</summary>
</entry>
<entry>
  <title>Cross apps url helper for symfony 1.0</title>
  <link href="http://snippets.prendreuncafe.com/snippet/92"></link>
  <updated>2008-05-15T15:50:14Z</updated>
  <id>92</id>
  <summary type="html">Here's a helper that allow to generate cross apps urls in symfony 1.0

[code=php]
/**
 * Generates cross-apps urls in symfony 1.0
 *
 * @param  string  the app we want to go to
 * @param  string  the route in the app. Must be valid
 * @param  array   the arguments required by the route. Optional
 * @return string
 */
function cross_app_url($app, $route, $args = null)
{
  $host = sfContext::getInstance()-&gt;getRequest()-&gt;getHost() ;
  $env = sfConfig::get('sf_environment');
  $appRoutingFile = SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'routing.yml' ;
  $route = substr($route, 1, strlen($route)) ;
  if (file_exists($appRoutingFile))
  {
    $yml = sfYaml::load($appRoutingFile) ;
    $routeUrl = $yml[$route]['url'] ;
    if ($args)
    {
      foreach ($args as $k =&gt; $v)
      {
        $routeUrl = str_replace(':' . $k, $v, $routeUrl) ;
      }
    }
    if (strrpos($routeUrl, '*') == strlen($routeUrl) - 1)
    {
      $routeUrl = substr($routeUrl, 0, strlen($routeUrl) - 2) ;
    }
  }
  return sprintf('http://%s/%s/%s',
                 $host,
                 ($env == 'dev' ? $app . '_dev.php' : ($app != $main_app) ? $app : ''),
                 $routeUrl);
}
[/code]

Adapted from [here](http://www.symfony-project.org/forum/index.php/mv/msg/7460/31105/)</summary>
</entry>
<entry>
  <title>Logger compatible Firebug et Opera Console</title>
  <link href="http://snippets.prendreuncafe.com/snippet/90"></link>
  <updated>2008-05-10T12:16:48Z</updated>
  <id>90</id>
  <summary type="html">Une petite fonction qui permet de logguer dans la console de Firebug ou d'Opera, sans déclencher d'erreur si ces derniers sont indisponibles.

[code=javascript]
function log() {
  try {
    console.log.apply(console, arguments);
  } catch(e) {
    try {
      opera.postError.apply(opera, arguments);
    } catch(e) {
    }
  }
}

log(&quot;Voici un objet: %o&quot;, {toto: &quot;tata&quot;, coucou: true});
[/code]</summary>
</entry>
<entry>
  <title>Extraire toutes les chaînes d'un fichier binaire</title>
  <link href="http://snippets.prendreuncafe.com/snippet/89"></link>
  <updated>2008-04-23T14:36:03Z</updated>
  <id>89</id>
  <summary type="html">En fait, c'est tout bête (mais qu'est ce que ça peut être utilie !) :

[code]
$ strings /usr/bin/iconv 
Written by %s.
char
UCS-4
conversion from %s unsupported
conversion to %s unsupported
conversion from %s to %s unsupported
try '%s -l' to get the list of supported encodings
[...]
[code]</summary>
</entry>
</feed>
