Skip to content

Instantly share code, notes, and snippets.

@ksimka
ksimka / testmd.md
Last active August 29, 2015 14:18
test md
  • list

  • lskdj fkjdf

  • a;skdjlasdjkf

    echo "abc";
  • kjshdkfjh djf

  • kjh kjhk

@ksimka
ksimka / inarray_flipisset_arraysearch.php
Created March 4, 2015 13:24
in_array vs array_flip+isset vs array_search
<?php
$a = [];
//$s = 123456;
$s = 's6tbdfgj222dJGk';
$rs = str_repeat("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 10);
$numGen = function() {
return rand(1, 9999999);
};
@ksimka
ksimka / strlen_isset_test.php
Created February 20, 2015 11:03
`isset` is twice faster than `strlen`
<?php
$strs = [];
$s = str_repeat("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 10);
$n = 100000;
for ($i = 0; $i < $n; $i++) {
$strs[$i] = substr(str_shuffle($s), 0, mt_rand(10, 100));
}
@ksimka
ksimka / goto.md
Created September 25, 2014 09:45

Igor Wiedler написал простенькую функцию retry, которая повторяет выполнение коллбека до получения успешного результата или достижения заданного количества неудач. При этом он использовал goto для реализации цикла. Когда его спросили, а почему goto, а не, скажем, рекурсия, он неожиданно очень подробно и интересно ответил. Ниже приводится перевод его ответа.

Конечно же, я рассматривал альтернативы goto. Я очень подробно их изучил, и рад представить вам результаты.

Когда парсер PHP читает исходник, код компилируется в последовательность опкодов, которая затем будет выполнена движком Zend (tm) (r). Компилятор выполняет кое-какие оптимизации, но вообще он довольно тупой. Поэтому, в зависимости от написанного вами кода он будет генерировать разные опкоды. Это напрямую влияет на производительность.

Существует несколько способов написать цикл. Начнём с упомянутого вами — рекурсии.

function retry($retries, callable $fn)

List of JSON RPC client libraries in PHP available on GitHub.

https://github.com/fguillot/JsonRPC

  • no transport injection (curl)
  • no json options (json_encode, json_decode)
  • no read timeout (no interface)
  • returns raw result from result key and null on error
  • id = mt_rand() (no way to set custom)
@ksimka
ksimka / explode_vs_sscanf_benchmark.php
Created September 11, 2014 09:10
explode vs sscanf benchmark
<?php
// Test for one case: exploding string by space to two parts
function rand_str() {
return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, rand(10, 20));
}
$strs = [];
for ($i = 0; $i < 100000; $i++) {
@ksimka
ksimka / PADN_yii2_markdown.php
Last active August 29, 2015 14:05
PADN example for yii2 / framework / console / Markdown.php
<?php
// Source: https://github.com/yiisoft/yii2/blob/a2c483fc19a0d46dcefd5e97293cde55ee552ecf/framework/console/Markdown.php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\console;
@ksimka
ksimka / wamba-redmine-wiki-style
Last active August 29, 2015 14:04
Wamba redmine wiki style
.controller-wiki div.wiki {
font-family: Helvetica, Arial;
font-size: 14px;
line-height: 1.6;
background-color: #fff;
color: #333;
-webkit-font-smoothing: antialiased;
}
.controller-wiki div.wiki p {
margin: 1.2em 0;
@ksimka
ksimka / keybase.md
Created July 16, 2014 19:13
keybase.md

Keybase proof

I hereby claim:

  • I am ksimka on github.
  • I am ksimka (https://keybase.io/ksimka) on keybase.
  • I have a public key whose fingerprint is F6C3 5BF2 286F 1ED2 1650 C26F 39AC 04FC 4141 D525

To claim this, I am signing this object: