-
+161
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
$myPid = getmypid();
$state = shell_exec("ps -o \"%p:%P:%c;\"");
$psPid = false;
$processes = array();
$linesArr = explode(";", $state);
foreach($linesArr as $line)
{
$pProp = explode(":", $line);
$processes[trim($pProp[0])] = $pProp;
if($pProp[1] == $myPid)
{
$psPid = $pProp[0];
}
}
//checking pids of processes
if($psPid !== false)
{
if(key_exists($psPid - 1,$processes) && preg_match("/micq/i",$processes[$psPid - 1][2]))
{
$sessionConfig->addPid($psPid - 1);
}
if(key_exists($psPid - 2,$processes) && preg_match("/tail/i",$processes[$psPid - 2][2]))
{
$sessionConfig->addPid($psPid - 2);
}
}
Вот и этот код, про который я рассказывал в комментарии к #4609
raorn,
13 Ноября 2010
-
+164
- 1
- 2
- 3
- 4
function runIcqBot($username, $password) {
$command = "nohup php-fcgi process.php ". $username ." ". $password ." > logs/".$username.".log &";
shell_exec($command);
}
И похеру на безопасность... Зато ICQ-клиент прямо в браузере!
dwinner,
13 Ноября 2010
-
+156
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
char* setw_c(int width, char* str, const char align){
width = width - strlen(str) / 2;
if (align == 'l'){
std::cout << str;
if (width > 0)
for (int i = 0; i < width - 1; i++)
std::cout << " ";
return " ";
} else {
if (width > 0)
for (int i = 0; i < width; i++)
std::cout << " ";
return str;
}
}
вот так коряво я решил проблему с setw(), кириллицей и utf-8.
strlen() - чуть ли не единственная функция из cstring, более-менее нормально работающая с кириллицей в utf-8, да и то возвращает не реальную длину, а в два раза бОльшую, т.к. в utf-8 символ кириллицы занимает 2 байта, вместо одного, чего эта функция не учитывает.
bugaga_,
13 Ноября 2010
-
−180
- 1
select nvl(count(*), 0) from ...
Вот такое увидел.
Защита от нежданчика.
Oleg_quadro,
13 Ноября 2010
-
+145
- 1
- 2
- 3
- 4
- 5
public function redirect($url) {
header('Location: '.$url);
echo '<script>document.location.href = "'.$url.'"</script>';
die('<a href="'.$url.'"><h2>Нажмите сюда. У вас ебанутый браузер.</h2></a>');
}
j0kz,
12 Ноября 2010
-
+145
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
$(function(){
oCatalog=new Catalog();
});
Catalog = function (){
function test (data){
alert(data);
}
}
exoundeeq,
12 Ноября 2010
-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
std::vector<double> WBuffer;
std::vector<double> CleanWBuffer;
std::vector<Color> PixelBuffer;
std::vector<Color> CleanPixelBuffer;
void Scene3D::ClearBuffers()
{
const size_t n = static_cast<size_t>(ScreenSize[0] * ScreenSize[1]);
memcpy(&*(WBuffer.begin()), &*(CleanWBuffer.begin()), n * sizeof(*(WBuffer.begin())));
memcpy(&*(PixelBuffer.begin()), &*(CleanPixelBuffer.begin()), n * sizeof(*(PixelBuffer.begin())));
}
Быстрая очистка буферов.
CleanWBuffer предварительно заполнен 0.0, CleanPixelBuffer предварительно заполнен нужным цветом.
Можно было воспользоваться std::fill, но оно работает в несколько раз дольше.
Пришлось так вот лезть в потроха std::vector. Доставляют подряд идущие & и *.
burdakovd,
12 Ноября 2010
-
+166
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
<?php
# bla bla bla...
public function __construct ($dbname, $host = null, $user = null, $pass = null) {
$numargs = func_num_args ();
if ($numargs == 1)
parent::__construct ($dbname);
else
parent::__construct ($dbname, $host = null, $user = null, $pass = null);
$this->begin = time ();
}
# bla bla bla...
"гениальный" вызов конструктора!
dwinner,
12 Ноября 2010
-
+157
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
void Scene3D::DrawTriangle(const Point3D &A, const Point3D &B, const Point3D &C, const Color& color)
{
// ---------------------------------------------------------------------------------------
// вспомогательные вычисления
// нормаль
const Vector3D& n = (B - A) ^ (C - A);
// ...
// центр треугольника
const Point3D& medium = (A + B + C) / 3.0;
Руки как-то привыкли const TypeName& variableName набирать в определении параметров методов.
И случайно набралось такое (строки 6, 11)
Операторы (+, -, ^, /) над векторами возвращают Vector3D, не const Vector3D&.
Заметил только через полгода, и всё это время оно почему-то работало, и даже ворнингов не было.
Но такое ведь не должно работать!
Результат вычисления в правой части присваивания структура, то есть она возвращается в стеке. Если бы я присвоил её какой-то локальной переменной, для которой выделена память в стеке текущей функции, то она бы перед удалением скопировалась в локальную переменную. А так получается что ссылка (n, medium) указывает куда-то на стек, где временно хранится возвращенное оператором значение. И при следующем вызове любой функции эта область стека должна перезаписаться.
burdakovd,
12 Ноября 2010
-
+75
- 1
- 2
- 3
for ( Cluster c : Clusters.getInstance( ).listValues( ) ) {
stopNet.newInstance( ).dispatch( cluster );
}
Суровые калифорнийцы как всегда суровы...
raorn,
12 Ноября 2010