October 30, 2025

Another fascist invades your system

Another fascist invades your system

Oracle carries on with its fascist encroachment into domains that are none of their business. This time, with Netbeans. Try to create a new PHP project with existing sources that reside on a mounted network drive from your web server, and you are going to be slapped in the face with Project metadata cannot be located directly in filesystem root.

You have no business telling infrastructure owners where their projects can or cannot reside. We won't share the folder above the project sources because seeing what files reside in it is not authorized for those who are authorized to work on the web site sources. But this simple thought does not occur to the terminal geniuses that live in Oracle's ivory tower. Reality is foreign for them, and they shun any touch with it.

Genius is as genius does: always as a degenerate.

Posted by: LinuxLies at 05:39 AM | No Comments | Add Comment
Post contains 145 words, total size 1 kb.

October 23, 2025

How fucked is PHP?

How fucked is PHP?

If you thought that something was fucked up, you haven't seen the new, oh, so wonderful PHP DateTime and DateInterval interfaces. They will blow your mind.

$date = new DateTime(); // "2025-10-23 16:38:25.308372"
var_dump($date);

$interval = new DateInterval("PT30M");
var_dump($interval);

$newdate = $date->add($interval);
var_dump($newdate); // "2025-10-23 17:08:25.308372" - 30 min later

if($date == $newdate) echo "Equal"; // Prints 'Equal' - why?
$diff = $date->diff($newdate);
var_dump($diff); // All zeros - why?

echo $diff->format('%r%i'); // 0 - why?
echo $diff->format('%r%s'); // 0 - why?

$diff = $newdate->diff($date);
var_dump($diff); // All zeros - why?

echo $diff->format('%r%i'); // 0 - why?
echo $diff->format('%r%s'); // 0 - why?

So, we have two date/times, 30 minutes apart, but according to PHP they are equal.

I wasted almost 2 hours on this shit, trying to figure out if something in my code has expired or not. I can do this in C#, Java, TSQL, MySQL, all in a matter of a few seconds. In PHP? Nope. No soup for you, PHP developers. The collective won't let you know the difference between to date/times.

PS: And if you replace DateTime() with DateTimeImmutable(), then you will see the correct 30 min difference but still 0 second difference. What's this obsession with immutability where no one gives a fuck?

Posted by: LinuxLies at 04:05 PM | No Comments | Add Comment
Post contains 216 words, total size 1 kb.

October 22, 2025

Another Linux lie: we have a DB engine

Another Linux lie: we have a DB engine

Truth is, you kind of do but not really.

Enter MySQL, the supposedly top DB. Its SQL syntax has LIMIT and OFFSET keywords, but their arguments are constants. I grant you that constant LIMIT is quite acceptable, but only a terminal genius could have decided that a constant OFFSET is acceptable.

Dudes, offset is for paging, and when you flip the 1st page, your zero offset should become whatever the size of your page is, in records, i.e. 50 for example. Next, it should become 100. How on Earth are we supposed to page our result sets, if OFFSET is a constant? By using nothing but dynamic SQL? Yuck!

Bottom line is, a DB engine cannot be considered top, not even production-ready, if it has such an absurd, idiotic limitation.

Genius is as genius does: always as a degenerate.

Posted by: LinuxLies at 10:54 AM | No Comments | Add Comment
Post contains 155 words, total size 1 kb.

October 20, 2025

Another Linux lie: we have a web scripting language

Another Linux lie: we have a web scripting language

Truth is: you don't.

Enter the oh, so wonderful, multi-engine PDO which is supposed to be a glorious replacement for dated and worn mysqli. Not so fast!

Building on its 'by idiots, for idiots' reputation, PHP collective FUBARed PDO by having not tested it with stored procedures. Idiots who use PHP are quite content with their inline queries. Select a record here, insert a record there, done. For real work, we need to call stored procs, and here lies a snag: it does not work.

Try to CALL sp_something, and you will be savagely slapped on the face by this error:

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while there are pending result sets. Consider unsetting the previous PDOStatement or calling PDOStatement::closeCursor()

You can then call closeCursor() to your heart's content, on the previous query() calls. You can unset() your query or statement objects. All of that will be exercise in futility because the stored procedure call will keep throwing.

Genius is as genius does: always as a degenerate. They never tested stored procedures. Had they ever tested, they would have realized what kind of shit they released. But they had not. They never do. Instead they hire PR spin doctors to bully the affected and frustrated users into silence, and thus our global ID degrades back into stone age.

If you are facing this problem, all you have to do is to add closeQuery() after your fetch(), and the error will go away, and everything will work.

pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true) makes no difference whatsoever. True or false, PDO will still throw if you do not close your cursors. How inline SQL is able to fetch its results is beyond me. Ask the genius degenerates at PHP collective why.

Posted by: LinuxLies at 09:15 AM | No Comments | Add Comment
Post contains 310 words, total size 2 kb.

October 18, 2025

Another Linux lie: we have DB server

Another Linux lie: we have DB server

Truth is, you kind of do but not really.

Enter MySQL, the oh, so glorious top DB server on this planet. Not so fast! It assigns the data type's default value to NOT NULL columns whose values are not provided in the INSERT statement. Wow! What a novel concept: not null? Fuck it! We'll just assign the default.

What's the point of NOT NULL, geniuses? To disallow NULL values. You circumvent the developer's direct order and hide shit from developers. Nuff said.

Now that I scratched this pile of dung, I found another candidate for the 'by idiots, for idiots' category.

Posted by: LinuxLies at 07:17 AM | No Comments | Add Comment
Post contains 115 words, total size 1 kb.

October 15, 2025

Another Linux lie: we have a web scripting language

Another Linux lie: we have a web scripting language

Truth is, you kind of do but not really.

Enter PHP, a "by degenerates, for degenerates" scripting language that pretends to work but only for some, not for everyone. Those who do not sprehen zi deutch, parler vu frances, or speak English, have to put up with this shit: PHP setlocale has no effect. Also, useful reading: https://www.php.net/manual/en/function.setlocale.php#117529. Note: no mention in the official docs. Bang your heads against the wall, suckers! Courtesy of PHP "collective" that belongs in a reeducation camp.

Dudes, I thought that when Unicode was introduced, some 25 or more years ago, this crap was done for, once and for all. Today is 2025, and PHP still cannot do locales other than Latin.

Truly, PHP: by idiots, for idiots, or by degenerates, for degenerates.

For everyone who is struggling with PHP setlocale(), see the below script that I put together. In the legacy code that cannot be changed to the oh, so wonderful modern OOP style, it works for some but not other languages. Comments welcome regarding the non-working Greek, Turkish, and Bulgarian languages.

<?php
echo "<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\"></head><body>";

$loc = [
 ['el_GR.UTF-8 UTF-8'	, 'Gre'	,'cp1253'	]
,['el_GR.UTF-8'         , 'Gre'	,'cp1253'	]
,['el_GR'               , 'Gre'	,'cp1253'	]
,['tr_TR.UTF-8 UTF-8'   , 'Tur'	,'cp1254'	]
,['tr_TR.UTF-8'         , 'Tur'	,'cp1254'	]
,['tr_TR'               , 'Tur'	,'cp1254'	]
,['bg_BG.UTF-8 UTF-8'   , 'Bul'	,'cp1251'	]
,['bg_BG.UTF-8'         , 'Bul'	,'cp1251'	]
,['bg_BG CP1251'        , 'Bul'	,'cp1251'	]
,['bg_BG'               , 'Bul'	,'cp1251'	]
,['uk_UA.UTF-8 UTF-8'   , 'Ukr'	,'cp1251'	] // Even though koi8-u is required
,['uk_UA.UTF-8'         , 'Ukr'	,'cp1251'	] // Even though koi8-u is required
,['uk_UA'               , 'Ukr'	,'cp1251'	] // Even though koi8-u is required
,['ru_RU.UTF-8 UTF-8'   , 'Rus'	,'cp1251'	]
,['ru_RU.UTF-8'         , 'Rus'	,'cp1251'	]
,['ru_RU ISO-8859-5'    , 'Rus'	,'cp1251'	]
,['ru_RU'               , 'Rus'	,'cp1251'	]
,['sr_RS.UTF-8 UTF-8'   , 'Srp'	,'cp1251'	]
,['sr_RS.UTF-8'         , 'Srp'	,'cp1251'	]
,['sr_RS'               , 'Srp'	,'cp1251'	]
,['de-DE'               , 'De'	,'cp1250'	]
,['es-ES'               , 'Spa'	,'cp1252'	]
,['fr-FR'               , 'Fre'	,'cp1252'	]
,['fr-CA'               , 'Fre'	,'cp1252'	]
,['pt-PT'               , 'Por'	,'cp1252'	]
];

echo "<table>";
for($i=0; $i<count($loc); $i++) {
	$l = setlocale(LC_TIME, $loc[$i][0], $loc[$i][1]);
	$tm = iconv($loc[$i][2], 'utf-8', strftime('%B'));
	echo "<tr><td>$tm</td><td>requested:</td><td>" . $loc[$i][0] . "</td><td>set to:</td><td>$l</td></tr>";
}

echo "</table>
</body>";
?>

Its output:

Octoberrequested:el_GR.UTF-8 UTF-8set to:Gre
Octoberrequested:el_GR.UTF-8set to:Gre
Octoberrequested:el_GRset to:Gre
Octoberrequested:tr_TR.UTF-8 UTF-8set to:Tur
Octoberrequested:tr_TR.UTF-8set to:Tur
Octoberrequested:tr_TRset to:Tur
Octoberrequested:bg_BG.UTF-8 UTF-8set to:Bul
Octoberrequested:bg_BG.UTF-8set to:Bul
Octoberrequested:bg_BG CP1251set to:Bul
Octoberrequested:bg_BGset to:Bul
жовтеньrequested:uk_UA.UTF-8 UTF-8set to:Ukrainian_Ukraine.1251
жовтеньrequested:uk_UA.UTF-8set to:Ukrainian_Ukraine.1251
жовтеньrequested:uk_UAset to:Ukrainian_Ukraine.1251
Октябрьrequested:ru_RU.UTF-8 UTF-8set to:Russian_Russia.1251
Октябрьrequested:ru_RU.UTF-8set to:Russian_Russia.1251
Октябрьrequested:ru_RU ISO-8859-5set to:Russian_Russia.1251
Октябрьrequested:ru_RUset to:Russian_Russia.1251
oktobarrequested:sr_RS.UTF-8 UTF-8set to:Serbian (Latin)_Montenegro.1250
oktobarrequested:sr_RS.UTF-8set to:Serbian (Latin)_Montenegro.1250
oktobarrequested:sr_RSset to:Serbian (Latin)_Montenegro.1250
Oktoberrequested:de-DEset to:de-DE
octubrerequested:es-ESset to:es-ES
octobrerequested:fr-FRset to:fr-FR
octobrerequested:fr-CAset to:fr-CA
outubrorequested:pt-PTset to:pt-PT

In the modern OOP code you will use this:

$fmt = new IntlDateFormatter(
	'gr_GR',
	IntlDateFormatter::FULL,
	IntlDateFormatter::FULL,
	'Europe/London',
	IntlDateFormatter::GREGORIAN
);
$fmt->setPattern('LLLL');
echo $fmt->format(strftime('%B', mktime(0, 0, 0, $monthNum);

Subtle difference being that the "old" code properly capitalized the month name, whereas the oh, so wonderful "new" code does not. Tedium ad nauseam^2.

Posted by: LinuxLies at 08:12 AM | No Comments | Add Comment
Post contains 389 words, total size 6 kb.

October 10, 2025

Another Linux lie: we have a source control system

Another Linux lie: we have a source control system

Truth is, you don't.

The genius developer Linus Torvalds was not able to add a 'Follow' menu item to a file list in gitk, or it did not occur to him to do so, or he simply was unwilling to do so.

Instead this genius added a command-line option -follow.

This must be manifestation of his genius, no less.

This is just as genius as throwing Fatal: source directory is empty when renaming directories, instead of Fatal: source directory is not in index. Let them figure it out, right, Linus?

Genius is a genius does: as a degenerate.

Posted by: LinuxLies at 12:59 PM | No Comments | Add Comment
Post contains 116 words, total size 1 kb.

October 06, 2025

iOS XMPP client Siskin is a malware

iOS XMPP client Siskin is a malware

It immediately leaks the XMPP server's IP address to a botnet which immediately engages in a massive attack on all services on that IP address.

STAY AWAY FROM SISKIN!!!

Posted by: LinuxLies at 07:01 AM | No Comments | Add Comment
Post contains 43 words, total size 1 kb.

<< Page 1 of 1 >>
31kb generated in CPU 0.0269, elapsed 0.061 seconds.
32 queries taking 0.0393 seconds, 158 records returned.
Powered by Minx 1.1.6c-pink.