Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
Get a devDuck
Rubber duck debugging has never been so cute! Get your favorite coding language devDuckBuy Now
Search - "parser"
I was an intern - as a high school student. They had no idea what to do with an intern, let alone a high school student that was only there around three hours a day.
They tried to saddle me with a massive "how to use Perforce" manual, but I flat refused and told them to give me some real work.
In the end I wound up writing a text parser in Python to get some specific info from some files. They decided it wasn't actually needed after I finished it (I don't think they expected me to), on my last week there. I just played solitaire the rest of the time. I learned a few things:
1. I never want to work at Adtran.
2. Perforce should die in a fire.
3. Experience != Expertise.
4. Don't be afraid to put yourself on the line if it means potentially accomplishing something.3
To become an engineer (CS/IT) in India, you have to study:
1. 3 papers in Physics (2 mechanics, 1 optics)
2. 1 paper in Chemistry
3. 2 papers in English (1 grammar, 1 professional communication). Sometimes 3 papers will be there.
4. 6 papers in Mathematics (sequences, series, linear algebra, complex numbers and related stuff, vectors and 3D geometry, differential calculus, integral calculus, maxima/minima, differential equations, descrete mathematics)
5. 1 paper in Economics
6. 1 paper in Business Management
7. 1 paper in Engineering Drawing (drawing random nuts and bolts, locus of point etc)
8. 1 paper in Electronics
9. 1 paper in Mechanical Workshop (sheet metal, wooden work, moulding, metal casting, fitting, lathe machine, milling machine, various drills)
And when you jump in real life scenario, you encounter source/revision/version control, profilers, build server, automated build toolchains, scripts, refactoring, debugging, optimizations etc. As a matter of fact none of these are touched in the course.
Sure, they teach you a large set of algorithms, but they don't tell you when to prefer insertion sort over quick sort, quick sort over merge sort etc. They teach you Las Vegas and Monte Carlo algorithms, but they don't tell you that the randomizer in question should pass Die Hard test (and then you wonder why algorithm is not working as expected). They teach compiler theory, but you cannot write a simple parser after passing the course. They taught you multicore architecture and multicore programming, but you don't know how to detect and fix a race condition. You passed entire engineering course with flying colors, and yet you don't know ABC of debugging (I wish you encounter some notorious heisenbug really soon). They taught 2-3 programming languages, and yet you cannot explain simple variable declaration.
And then, they say that you should have knowledge of multiple fields. Oh well! you don't have any damn idea about your major, and now you are talking about knowledge in multiple fields?
What is the point of such education?
PS: I am tired of interviewing shitty candidates with flying colours in their marksheets. Go kids, learn some real stuff first, and then talk some random bullshit.18
My own language, hence my own parser.
Reinvented the regular expression before realizing it already existed (Google didn't exist at the time).
I'm a living reference for regular expressions since then.7
PineScript is absolute garbage.
It's TradingView's scripting language. It works, but it's worse than any language I have ever seen for shoddy parsing. Its naming conventions are pretty terrible, too:
transparency? no, "transp"
sum? no, cum. seriously. cum(array) is its "cumulative sum."
There are other terrible names, but the parser is what really pisses me off.
1) If you break up a long line for readability (e.g. a chained ternary), each fragment needs to be indented by more than its parent... but never by a multiple of 4 spaces because then it isn't a fragment anymore, but its own statement.
2) line fragments also cannot end in comments because comments are considered to be separate lines.
3) Lambdas can only be global. They're just fancy function declarations. Someone really liked the "blah(x,y,z) =>" syntax
4) blocks to `if`s must be on separate lines, meaning `if (x) y:=z` is illegal. And no, there are no curly braces, only whitespace.
There are plenty more, but the one that really got me furious is:
98) You cannot call `plot()`, `plotshape()`, etc. if they're indented! So if you're using non-trivial logic to optionally plot things like indicators, fuck you.
Whoever wrote this language and/or parser needs to commit seppuku.15
B "Do this work (basically a document parser) "
A "Done using regexp"
B "The data coming in is different now"
A "ok, updated the regexp parts to account for this"
B "hmm, I you should rewrite it using library tool coworker made"
A "eeer ok, redone all the work now but it's a little hacky"
B "oh, library tool isn't flexible enough. Hmmm maybe use regexp?"
A - literally dead6
So I was applying for a research position in linguistic department, and had the interview today.
Prof: So you know excel right
Me: (show a project to him to prove I at least know csv file)
Prof: Ok so you know excel.
Me: Yeah kinda.
Prof: Ok that's good. Cuz right now we are using amazon Turk, and the data they returned, which are excel files, are not really the way we want it.
Me: Ok sounds like a parser can fix it......
Prof: Yeah.... the students in the lab are doing it manually now
Prof: Ok move onto next matter7
So we hired a junior engineer. 1 year of experience, this is his second job.
First task: Send some data to a web service using its REST API. Let me know when you've finished.
Two hours later I go to check on him.
- "I'm trying to decode this weird format the server uses"
He was writing a JSON parser in Python from scratch.
I'M SO PROUD, I WROTE A FULLY-FUNCTIONAL JSON PARSER!
I used some data from the devRant API to test it :D
(There's a lot of useful tests in the devRant API like empty arrays, mixed arrays and objects, and nested objects)
Here's the devRant feed with one rant, parsed by Lua!
You can see the type of data (automatically parsed) before the name of the data, and you can see nested data represented by indentation.
The whole thing is about 200 lines of code, and as far as I can tell, is fully-featured.27
Today was fucking awesome!
I always wanted to do a project in C++ since I've been more of a Java guy for years now.
And today, I finally wrote a full console program in C++! (For windows, it's a .exe)
The purpose of that program is to show if a file has a file lock on it (because of copying for example).
It started as simple as that, but got complicated quickly:
- It needs colors! So I added colors.
- Just a single file? Boring. I need wildcards, so I can put a * for anything in the file name! Jup.
- Just one directory? Boring. I need a recursive directory walk! Got it.
- But wait! There has to be an option to switch between recursive and wildcard/single mode! So I checked if the first argument equals "-r"! Hacky but works.
- Oh uh... that spams a lot now! The purpose was to show locked files, so I need another argument to specify that I only want to see locked files! Damn now it get's hard... I need a Linux-like command line argument parser (this -h and -s "hello" stuff). So I took the opportunity to write one myself! Done.
- Refactoring everything to use my new fancy parser...
- Adding more and more arguments, just because I can:
- "-d" hides "access denied" messages
- "-l" shows only locked files
- "-r" activates recursive directory walk
- "-f" formats everything nicely, basically printf("%-150.150s | %s", filename, locked); a maximum width which get's truncated if too long so everything lines up nicely
- "-h" which of course displays the help page
- "-w file" watches a file, if the file is locked it will refresh every 500ms, if it's still locked nothing happens, if it's unlocked, the program prints "unlocked" in green and exits. And yes, it does have a rotating line (something like this: "-" "\" "|" "/" "-" and so forth...)
That project was just awesome to make. I learn languages fastest if I just do a big project in them, and today, I really learned a lot.
Thank you for reading all this!3
For a week+ I've been listening to a senior dev ("Bob") continually make fun of another not-quite-a-senior dev ("Tom") over a performance bug in his code. "If he did it right the first time...", "Tom refuses to write tests...that's his problem", "I would have wrote the code correctly ..." all kinds of passive-aggressive put downs. Bob then brags how without him helping Tom, the application would have been a failure (really building himself up).
Bob is out of town and Tom asked me a question about logging performance data in his code. I look and see Bob has done nothing..nothing at all to help Tom. Tom wrote his own JSON and XML parser (data is coming from two different sources) and all kinds of IO stream plumbing code.
I use Visual Studio's feature create classes from JSON/XML, used the XML Serialzier and Newtonsoft.Json to handling the conversion plumbing.
With several hundred of lines gone (down to one line each for the XML/JSON-> object), I wrote unit tests around the business transaction, integration test for the service and database access. Maybe couple of hours worth of work.
I'm 100% sure Bob knew Tom was going in a bad direction (maybe even pushing him that direction), just to swoop in and "save the day" in front of Tom's manager at some future point in time.
This morning's standup ..
Boss: "You're helping Tom since Bob is on vacation? What are you helping with?"
Me: "I refactored the JSON and XML data access, wrote initial unit and integration tests. Tom will have to verify, but I believe any performance problem will now be isolated to the database integration. The problem Bob was talking about on Monday is gone. I thought spending time helping Tom was better than making fun of him."
<couple seconds of silence>
Boss:"Yea...want to let you know, I really, really appreciate that."
Bob, put people first, everyone wins.11
So I tried to start learning Spring 5
How the fuck do you guys do it? Holy shit.
30 seconds in:
"Spring really isn't hard, you start with this request handler interacting with a view parser..."
Alright, sounds good
2 minutes in:
"So in order to use SpringResponseDriverActionHandlerServiceRequesterService you'll need to import com.org.java.spring.util.driver.comagain.request.response.request.drivers and include this 37 level deep nested XML property and finally extend this abstract class and implement it over an iterable list with this specific annotation aaaaaaand.... Done"
> Hello, world!
"See, spring is easy!"12
writing an assembler for my compiler, Manticore.
Currently working on writing a hand written parser and parse tree node system.7
Ok. Yesterday I finished building my compiler I have to say: it was a pretty darn big thing with 7000 Lines of code.
I did it alone and with almost no help.
I wanted to give some advice in case someone wants to program a compiler. I knaw its useless in times of lex and yacc, but anyway.
-have a good idea for the language
-learn about parser/lexer
-do it like me: output the assembler to a file and let it assemble/link by the linux standart-tools (call the commands)
-Have fun. Fun is essential in coding
I hope I was able to help people who want to build a compiler alone... Yau can always ask questions ;~)
But no...this rant is directed to whomever wrote the fucking JSON parser in Chrome (definitely Trod). And here's why...
In this picture on the left we can see a happy array being happily stored in memory, happily ordered, after being parsed from a fetch request...
And on the right, a quick refresh and a fart of Trod code later...
THE FUCKING ORDER CHANGED!!!
I hope you hear me you troll of a God...BRING IT... I've fixed worse shit than this so let's dance you asshole...
*quietly but graciously leaves to securely wrap head and testicles in tin foil*12
Super excited to get my first ML project on, been working on this on - off for a couple of years. Now that I had sometime to spare could get it completed :) And along the way learned a lot of things as well :)
Let me know what you guys think.
A lot of thanks to this Repo that helped in parsing the image to string.
Of course PR's and suggestions really welcome and appreciated.10
I know it's not done yet but OOOOOH boy I'm proud already.
Writing a JSON parser in Lua and MMMM it can parse arrays! It converts to valid Lua types, respects the different quotation marks, works with nested objects, and even is fault-tolerant to a degree (ignoring most invalid syntax)
Here's the JSON array I wrote to test, the call to my function, and another call to another function I wrote to pretty print the result. You can see the types are correctly parsed, and the indentation shows the nested structure! (You can see the auto-key re-start at 1)
Very proud. Just gotta make it work for key/value objects (curly bracket bois) and I'm golden! (Easier said than done. Also it's 3am so fuck, dude)15
I give the junior dev that i've negatively referenced in my previous rant access to the repo for my upcoming project. The project handles a wide array of healthcare message parsing so you can imagine the complexity of some of these parsings as the messages go 10-20 layers deep.
He takes one look at the parser and says "Dude, its no wonder your kids are so fucking clumsy, have you taken one look at this cod...". I interrupted him sternly to insist that I will knock each tooth of his down this throat until he is gagging on them.
This asshole knows nothing about my kids except the usual funny story I tell in the office and yet feels it was his realm to shit on my work and my children at the same time. He has been kissing ass so hard sense that its creepy but I still cannot express how much i dislike this kid.10
I've recently received another invitation to Google's Foobar challenges.
A while ago someone here on devRant (which I believe works at Google, and whose support I deeply appreciate) sent me a couple of links to it too. Unfortunately back then I didn't take the time to learn the programming languages (Python or Java) that Google requires for these challenges. This time I'm putting everything on Python, as it's the easiest language to learn when coming from Bash.
But at the end of the day.. I am a sysadmin, not a developer. I don't know a single thing about either of these languages. Yet I can't take these challenges as the sysadmin I am. Instead, I have to learn a new language which chances are I'll never need again outside of some HR dickhead's interview with lateral thinking questions and whiteboard programming, probably prohibited from using Google search like every sane programmer and/or sysadmin would for practical challenges that actually occur in real life.
I don't want to do that. Google is a once in a lifetime opportunity, I get that. Many people would probably even steal that foobar link from me if they could. But I don't think that for me it's the right thing to do. Google has made a serious difference by actually challenging developers with practical scenarios, and that's vastly superior to whatever a HR person at any other company could cobble together for an interview. But there's one thing that they don't seem to realize. A company like Google consists of more than just developers. Not only that, it probably consists - even within their developer circles - of more than just Python and Java developers. If any company would know about languages that are more optimized such as C, it would be Google that has to leverage this performance in order to be able to deliver their services.
I'll be frank here. Foobar has its own issues that I don't like. But if Google were a nice company, I'd go for it all the way nonetheless - after all, they are arguably the single biggest tech company in the world, and the tech industry itself is one of the biggest ones in the world nowadays. It's safe to say that there's likely no opportunity like working at Google. But I don't think it's the right thing. Even if I did know Python or Java... Even if I did. I don't like Google's business decisions.
I've recently flashed my OnePlus 6T with LineageOS. It's now completely Google-free, except for a stock Yalp account (that I'm too afraid to replace with my actual Google account because oh dear, third-party app stores, oh dear that could damage our business and has to be made highly illegal!1!). My contacts on that phone are are all gone. They're all stored on a Google server somewhere (except for some like @linuxxx' that I consciously stored on device storage and thus lost a while back), waiting for me to log back in and sync them back. I've never asked for this. If Google explicitly told me that they'd sync all my contacts to my Google account and offer feasible alternatives, I'd probably given more priority to building a CalDAV and CardDAV server of my own. Because I do have the skills and desire to maintain that myself. I don't want Google to do this for me.
Move fast and break things. I've even got a special Termux script on my home screen, aptly named Unfuck-Google-Play. Every other day I have to use it. Google Search. When I open it on my Nexus 6P, which was Google's foray into hardware and in which they failed quite spectacularly - I've even almost bent and killed it tonight, after cursing at that piece of shit every goddamn day - the Google app opens, I type some text into it.. and then it just jumps back to the beginning of whatever I was typing. A preloader of sorts. The app is a fucking web page parser, or heck probably even just an API parser. How does that in any way justify such shitty preloaders? How does that in any way justify such crappy performance on anything but the most recent flagships? I could go on about this all day... I used to run modern Linux on a 15 year old laptop, smoothly. So don't you Google tell me that a - probably trillion dollar - company can't do that shit right. When there's (commercialized) community projects like DuckDuckGo that do things a million times better than you do - yet they can't compete with you due to your shit being preloaded on every phone and tablet and impossible to remove without rooting - that you Google can't do that and a lot more. You've got fucking Google Assistant for fucks sake! Yet you can't make a decent search app - the goddamn thing that your company started with in the first place!?
I'm sorry. I'd love to work at Google and taste the diversity that this company has to offer. But there's *a lot* wrong with it at the business end too. That is something that - in that state - I don't think I want to contribute to, despite it being pretty much a lottery ticket that I've been fortunate enough to draw twice.
Maybe I should just start my own company.8
"I'm almost done, I'll just need to add tests!"
Booom! You did it, that was a nuke going off in my head.
No, you shouldn't just need to add tests. The tests should have been written from the get go! You most likely won't cover all the cases. You won't know if adding the tests will break your feature, as you had none, as you refactor your untested mess in order to make your code testable.
When reading your mess of a test case and the painful mocking process you went through, I silently cry out into the void: "Why oh why!? All of this suffering could have been avoided!"
Since most of the time, your mocking pain boils down to not understanding what your "unit" in your "unit test" should be.
So let it be said:
- If you want to build a parser for an XML file, then just write a function / class whose *only* purpose is: parse the XML file, return a value object. That's it. Nothing more, nothing less.
- If you want to build a parser for an XML file, it MUST NOT: download a zip, extract that zip, merge all those files to one big file, parse that big file, talk to some other random APIs as a side-effect, and then return a value object.
Because then you suddenly have to mock away a http service and deal with zip files in your test cases.
The http util of your programming language will most likely work. Your unzip library will most likely work. So just assume it working. There are valid use cases where you want to make sure you acutally send a request and get a response, yet I am talking unit test here only.
In the scope of a class, keep the public methods to a reasonable minimum. As for each public method you shall at least create one test case. If you ever have the feeling "I want to test that private method" replace that statement in your head with: "I should extract that functionality to a new class where that method public. I then can create a unit test case a for that." That new service then becomes a dependency in your current service. Problem solved.
Also, mocking away dependencies should a simple process. If your mocking process fills half the screen, your test setup is overly complicated and your class is doing too much.
That's why I currently dig functional programming so much. When you build pure functions without side effects, unit tests are easy to write. Yet you can apply pure functions to OOP as well (to a degree). Embrace immutability.
It's really not helpful that a lot of developers don't understand the difference between unit, functional acceptance, integration testing. Then they wonder why they can't test something easily, write overly complex test cases, until someone points out to them: No, in the scope of unit tests, we don't need to test our persistance layer. We just assume that it works. We should only test our businsess logic. You know: "Assuming that I get that response from the database, I expect that to happen." You don't need a test db, make a real query against that, in order to test that. (That still is a valid thing to do. Yet not in the scope of unit tests.)9
You want to call a function? STOP!!!
Nowadays it is so amateur and old fashioned! Instead you must:
- Make a soap request
- Write a router to handle soup requests
- Write an XML to define which controller responds to this request
- Write an XML parser on top of another XML parser
- Write a controller to trigger an event in response to the request
- Write an XML which defines the event
- Write an XML that defines the event observer
- Write a plugin which calls event observers
- Write a router which delegates the task of calling event observers to that plugin
- Write an event observer which calls another plugin
- Write a plugin that "Calls a function".
It's better because... it's more Object Oriented!22
I have to write an xml configuration parser for an in-house data acquisition system that I've been tasked with developing.
I hate doing string parsing in C++... Blegh!18
I once reviewed some code that parsed HTML using regex (red flag #1), and it turns out that it had to be done that way because the company's HTML was so malformed that no actual parser would accept it without erroring1
After three weeks looking for decent pdf parser that will handle all documents I gathered for my project I decided to write my own.
All those I tried end up with more then 10% not correctly parsed pdfs or require to much coding.
I was sceptic so I waited another week debating if it’s good idea to do it and I said yes.
Spent 16 hours straight coding pdf document extraction library and command line tool based on pdf.js
Fuck, now when I open pdf I see opcodes instead of text.
Got two more hours until client planning meeting and then I go to sleep for a while.
Time to start testing this more deeply as I have about 60k ~ 20GB pdf documents to parse and then I need to build some dependency graph out of its text.
At least it’s more funny then making boring REST API for money.4
Spent all morning trying to write a JSON parser in Python just to get a bit of practice (technical interview next week).
After an hour or more... Didn't get far and finally gave up...
Then I remember Python has a built-in json module... (yea no need to write in myself).
Since libraries are just py files, I open the source code... And wow!
All the public methods are nicely documented with informative comments and descriptions.
But then I look at the method calls and .... I don't understand what it's doing....
Soo... I made a bytecode editor for Java just for fun. On the left you can see the original decompiled class, on the right a slightly changed class which still runs normally. Below you can see the pure ASM bytecode :)
It's pretty awesome for learning how bytecode works (together with a listing like https://en.wikipedia.org/wiki/...)! It also has an AutoComplete feature and some syntax highlighting (which I'm still working on).
What's special about it? It's a pure text parser! It assembles a full class from just a String!
If you want to look at it: https://github.com/SuspiciousActivi...
(I'm new to GitHub, don't judge me :D)4
That feel when the html parser you are stuck with randomly strips out css and js so you have to reinvent grid layouts with tables.4
Why I don't use Stack Overflow 99% of the time:
Me: I'm not a ruby developer, but I have to write a small script in ruby. I ran into a problem where i'm getting behavior I don't expect. I have a method which expects an array, and when multiple items are passed into it from the command line parser, behaves appropriately, but when only one command line argument is passed, the method breaks because it was passed a single element, not an array of one element. Here's my code, how do I get my desired behavior?
Most highly voted answer: your problem is your passing it a single element and not an array
Question downvoted into oblivion. As if i'm a pleb for not immediately having a perfect grasp of dynamic typing because when I have the choice I stick with strong nominative typing.8
Today I woke up with 2 things in my personal todo list
1. As coder, I need to figure out why my yaml parser doesn't work
2. As Lv 60 wizard, I need to clear morroc 245. Wtf with that once punch kill charge attack....8
Todays story: conversation between me and my brain about a app that i have planned for a long while.
The application is just a huge, specyfic json editor/manager for a game that i like. The game uses json files to determine unit charactetistics. So in order to make modding easier i want to make a tool for that that is fancier and easier to use than a notepad.
Brain> Lets make a app that allows you to mod the game easier!
Me> Good idea. How would you want to make it?
Brain> Lets use C# cause you main that lang currently and you have experience with json parser lib.
Me> That is true. So what do you wanna implement first?
Brain> Oh. I have thought about it before! I want to implement: (10 000 features) and maybe few more later!
Me> It sounds like a infinity project, shouldnt you implement like 1 or 2 features at first and then jump to other ones?
Brain> Yes... but i dont wanna refactor those features latter so let just implement them all at once!
Me> Dammit brain! Let just implement just one feature now! Like a simple json editor. You can use inhieritance to reuse the code later.
* Starts with that one feature but one day later starts coding 6 more *
* Cant publish the app yet, the code looks like shit, gui is unfinished because brain wanted only to test those 6 unfinished features without propely implementing them *
Me> Brain WTF! You said that you are going to focus on one feature at the time!
Brain> I got carried a bit...
Me> Ok. I understand. Let just refactor the code and clean the project out of those unfinished features.
Brain> No. I have a depression now...
* 2 month passes by without any progress on ANY of my projects*
Brain> I still have depression...
Me> Ok i dont care about that anymore! Tell me something that i dont know!
Brain> Oh I have good news as well!
Brain> What about the home server that is going to store all mods made by the users so they can share it? It would be a good practice with networking!
Me> * Gives up *1
I wrote a program a few years ago which needed to fetch data from a website. Instead of using the API, I used a html parser and extracted the data myself.
The code still runs flawlessly.1
CoWorker: “Yea then just use double inheritance to grab the methods off the two classes.”
Me: “Yea that doesn’t seem right... the first object is a string parser the second object predicts future occurrences...”
CoWorker: [louder] “No trust me, I’m taking a developer course right now. If you inherit both classes your new class can use all the needed methods!”
Me: “Okay, go for it bro.”
So tired of people who think they know what they’re doing...4
So, I spent the last two days hunting down a bug about some of the static assets not getting versioned.
It turned out to be a mistake by some newbie missing a quote in html. The html parser responsible for versioning the assets broke once it ran into that bad html.
Somehow, I don’t feel satisfied. I guess I shouldn’t hope for big reasons for seemingly big problems.
Most recently... taking something previous devs had failed at and knocking it out of the park.
Best example was a statistical regression and graphing tool on ASP MVC.
The devs were doing a massive brute force recalculation on the server layer. It would take 24h then fail to save (Entity framework brute force).
We moved it to the database layer and got it down to a passable time.
The same devs were outputting charts to ie 9, chrome, firefox... same deal, half an hour on the initial request (parser churn in the browser)... then failure.
Again got it into a passable time by switching to web sockets and long polling then outputting 1000 or so points at a time to give the browser time to render.
Taking those two cock ups and making them a workable solution was awesome.
Since then, teaching. We have apprentices, newcomers, interns all jumping in and looking to get working. They're all different, what works to teach one person won't the next, each of them so far has caught on to what I was teaching. It's a proud moment to be able to impart knowledge and see someone pick it up, enthusiastically... it's also awesome to see someone excited about what you do.
A friend of mine (beginner) wrote a Python script that calculated the derivative function of an function the user typed in. He showed it to me and
I said: "You should not use eval()!"
He: "Oh, ok. May you write a parser?"
I: "Wait! It's ok. Just use eval!" 😂6
So for those of you keeping track, I've become a bit of a data munger of late, something that is both interesting and somewhat frustrating.
I work with a variety of enterprise data sources. Those of you who have done enterprise work will know what I mean. Forget lovely Web APIs with proper authentication and JSON fed by well-known open source libraries. No, I've got the output from an AS/400 to deal with (For the youngsters amongst you, AS/400 is a 1980s IBM mainframe-ish operating system that oriiganlly ran on 48-bit computers). I've got EDIFACT to deal with (for the youngsters amongst you: EDIFACT is the 1980s precursor to XML. It's all cryptic codes, + delimited fields and ' delimited lines) and I've got legacy databases to massage into newer formats, all for what is laughably called my "data warehouse".
But of course, the one system that actually gives me serious problems is the most modern one. It's web-based, on internal servers. It's got all the late-naughties buzzowrds in web development, such as AJAX and JQuery. And it now has a "Web Service" interface at the request of the bosses, that I have to use.
The programmers of this system have based it on that very well-known database: Intersystems Caché. This is an Object Database, and doesn't have an SQL driver by default, so I'm basically required to use this "Web Service".
Let's put aside the poor security. I basically pass a hard-coded human readable string as password in a password field in the GET parameters. This is a step up from no security, to be fair, though not much.
It's the fact that the thing lies. All the files it spits out start with that fateful string: '<?xml version="1.0" encoding="ISO-8859-1"?>' and it lies.
It's all UTF-8, which has made some of my parsers choke, when they're expecting latin-1.
But no, the real lie is the fact that IT IS NOT WELL-FORMED XML. Let alone Valid.
THERE IS NO ROOT ELEMENT!
So now, I have to waste my time writing a proxy for this "web service" that rewrites the XML encoding string on these files, and adds a root element, just so I can spit it at an XML parser. This means added infrastructure for my data munging, and more potential bugs introduced or points of failure.
Let's just say that the developers of this system don't really cope with people wanting to integrate with them. It's amazing that they manage to integrate with third parties at all...3
I have to create python parser (3.6) using code provided by client (2.7), that they used in their company, and it is full of crap like:
if not b:
c = [1,2,3]
if not b:
c = [1,2,3]
c = [1,2,4]
text = ""
for i in something:
text += "real text " + some_string + " \n"
text += "another line " + some_string + " \n"
text += "and another " + some_string + " \n"
text += "and so on " + some_string + " \n"
... (many lines instead of one appended text block)
Of course above variable names are just for shortening code, but there are variables like oo, ooo, var_ or var__... cause you know, PEP8 does not exist.9
So I had been developing a real estate website and developing a MLS feed parser. I had only 1 year experience at that time and parsing a XML feed was already complex enough. On top of it, the client wanted to automate feed download from the MLS provider through HTTP authentication. Managed to do it. Everything worked for 15 days and on 16th day the property location markers stopped appearing on Google maps. Turned out that address to lat-long reverse geocoding was failing because API limit exhausted. My bad, I coded it on view instead of caching the lat-long in database. Fixed it in a day and viola!
First you make a filthy JSON protocol where numbers are encapsulated into strings.
Then you document this little fact nowhere. Actually you don't document anything at all.
Then you make a shitty parser that ignores any exception. So that when I try to send my objects, it took two hours to figure out it was "my fault" as I was sending actual integers instead of strings.
I think you deserve to suffer a terrible agony for exactly the amount of time I lost.2
I worked with this hack of a backend dev that was too lazy to add a complex(ish) object to our CMS tool. His solution?
One giant-ass text box with the label "put JSON here".
If tech people were using it I wouldn't mind, but our poor content managers have no idea what json is. Plus like... no examples, no schema... they would have to change shit then go look at the website to see if it worked. Fucking asshole.
Plus.. I mean SHIT, MAN! This was in a Node.js tool... if you have the Json parser you could just GENERATE the respective form fields. DO YOUR JOB2
This way of converting "string" to "s" (for example)
0) program reads the whole buffer, stores it as an array of instructions
1) program reverses the order of the instructions
2) parser makes standard token from an instruction ("asd" -> ASD)
3) parser2 assigns operands to instruction
4) parser 3 makes string from instruction token ?????
5) parser fucking 4 makeS A MUTABLE STRING INSTRUCTION
6) PARSER FIVE SUBSTITUES OPERANDS
7) AND THEN CUTS IT TO A REVERSED ARRAY OF COMMANDS
8) AND PUSHES IT UNTO THE STACK
We're rebuilding out company's platform from the bottom up, and throughout this process I've learned a lot. However, the stuff I've done lately has fascinated me the most. We're implementing OpenOffice for converting files to PDF. Since I started with this task I've had to implement secure running of OpenOffice by sandboxing and queues, but by far the coolest thing was what I did today. I was trying to implement IPC, and damn was it fun. I actually ended up writing a full parser for raw byte streams, since we had to include some special information. It was fun 😁
The worst part of being a dev? Working in teams.
And I don't mean that in the "I'm the best ninja code wizard in the whole world and you're all holding me back" kinda way. I'm thinking more in the lines of someone who has to deal with that kind of attitude on a daily basis. As someone who recently was put in a leading position in a dev team, this is by far one of the worst experiences that came with it.
- One dev completely changed the naming scheme for variables in a class he worked on for one. single. bug fix. His reason? He just didn't like it!
- Another one noticed that data he was supplied with was not in the specified format. Instead of flagging this with the project leads, he just rewrote his parser to fit the data. A couple of weeks later the supplier noticed the error, fixed the format and suddenly everyone wondered why the software failed processing the data.
- Or that one senior dev, that just refuses to accept changes because "it was always done like this and it worked" No, it didn't. That's why it was changed!
Once a dev team reaches a certain size, people need to realize that stuff like coding rules and process guidelines are not there to annoy them but to help the whole team work as efficient as possible. I don't care how good a programmer you are, if you can't check your ego you don't belong in any kind of team-oriented development project!
I am a Technical Lead in the department in my company that writes code for our clients that have money but doesn't have the technical expertise to handle the complexities of our own software.
Part of my tasks involve taking care of a few projects written by employees that have left after using third-party tools rather than using our own software. No one else in this department knows these third-party tools, they only know our own, and my *still limited* web development experience means I get dumped these things in my lap.
And I'm SO pissed at these projects and their authors and the manager that let these ex-employees write these things. There is this one project that was managed by two different "developers" (I don't know they deserve this title) at two different times, and it is so riddled with different technologies it makes me want to throw up almost daily.
Don't believe me? Here is a complete list of the dependencies listed in the package.json of this project: babel-polyfill, body-parser, cookie-parser, debug, edge, edge-sql, excel-to-json, exceljs, express, html-inline, jade, morgan, mssql, mysql, pug, ramda, request, rotating-file-stream, serve-favicon, webpack, xlsx, xml2js
What this doesn't even show, is that one part of this project (literally one page) is made using react, react-dom, react-redux, and jade. The other part (again literally one page) is made using Angular and Pug. In case you missed it while picking up your jaw, there's also mssql, mysql, edge and edge-sql. excel-to-json, exceljs, xlsx.
Oh you want *more* juicy details? This project takes the entire data object used by the front-end, stringifies it into JSON, and shoves it into the database *as a single field*. And instead of doing WHERE clauses in the SQL queries, it grabs the entire table, loops, parses the json, and does a condition on it. If even one of those JSON entries gets corrupted, the entire solution breaks because these "developers" don't know what try/catch is.
The client asked for a very simple change in their app, which was to add a button that queries the back-end for a URL, shows it in a modal dialog, after which a button is clicked to verify the link by doing a second query to the back-end before modifying a couple of fields in the page.
This. Took. Me. Two. Months*. Save me. Please, save me.
*between constant context switches between this and other projects that were continuously failing because of their mistakes.4
Oh god where do I begin, built a JSON parser that supported comments, build a basic debug terminal for web pages, I could go on forever
I "fight" with another developer at the end of a school project (a website).
The "other developer" complained because he had received a lower rating than mine.
He went to the teacher telling them that I had to lower the evaluation because during the project I watched TV series, And the teacher replied: there are those who can do it and some like you do not.
He could not do it because when he concentrated he could not do anything, you think when he lost himself in TV series.
There were various quarrels because I had this attitude but a higher rating (and anyway with a product a thousand times better than his), while he gave 100% he could not do anything.5
god damn it c++, you and your ambiguous, contextual grammar!
currently working on a c++ and c parser, went from trying to use a parser generator to now writing a parser by hand.3
!rant && isSorry = true
this aint StackOverFlow but I need a tiny help here, I'm receiving data result from an API that is formatted as x-www-form-urlencoded, do I add a valid url at the beginning and use URI parser in Android or is there some other solution for it?
Sample of the result I'm receiving:
Eval is evil. I heard it often. So apparently, they put it there just merely to test you, whether you are a sinful coder deserving eternal damnation or not...
So, one thing I don't really like from people is sometimes they just believe in things without questioning anything. And worst... sometimes they get offended when some random poor guy ask a sensible question regarding to the belief.
Just because Richard Stallman said vi is evil, then they hate every vim users in the world.
Just because this easy-but-effective solution is not PSR-3 compliant, then they ditch it at all...
Ok, back to the eval-is-evil thing.
Yesterday, I show some part of code using safe-eval npm package to someone. And the reaction is like "yike... it's eval..."
So yes, eval is evil. But only if it's miss-used, just like anything else...
The drawbacks of eval are:
2. Performance. Eval is slow. Yes it is, because it is running a parser inside a parser. So it is just a mere calculator. And yes, it is slower 100 ms than native program. Problem?
3. Untrace-able error stack. But again, you just use that eval once. And if it is trowing an error, just catch it and let the user know that his input is wrong. Problem?
No, there is no real problem here. It's just eval is evil and it is...10
Ugh... some people...
Just left the office early because of the toxic climate. That one infamous collegue is basically unable to communicate without being a narcissistic 5-year-old and was arguing whether we should write a test (I was going to write the test) that would need a single additional branch in the build system.
(The test was for a parser and it should test whether it can handle absolute paths. A simple regression test with a file and an expected output. Because absolute paths are different for every platform and user, the files to be parsed would have to be generated with appropriate paths before the tests were run. Well that would require one single python script and a single line in the script that runs the script and DONE)
Well that guy was unable to focus on his own work and started an argument about whether that test was necessary.
Even though I still think it is necessary, it might have been a reasonable argument if he would have acted more agreeable. But he was saying the feature was useless anyways "everyone will use relative paths only anyways" and "because noone here cares a ratass about maintaining the tests it will all fall on me again" ..
Wtf was this guys problem, I (CAPS) was going to write the stupid test and since when do we not write tests in order to better maintain our product? I get that he worries that the test environment will get more messy, but thats better than having the product code go messy or unfunctional! And c'mon guys, how are absolute paths a redundant feature...
Hey this is my first post on This new fitness-tracker-app community
I will tell y'all my workout :)
-programming a parser
FUCKING HELL PLEASE STOP ALREADY THIS IS THE WORST SHIT IVE EVER DONE EVERY WHERE IF STATEMENTS JUST TO CONSUME FOUR FUCKING TOKENS I DONT WANT TO DIE BUT I'D LIKE THIS PROJECT TO BE FINISHED ALREADY BECAUSE THIS IS ANNOYING AS FUCK I REALLY WANT TO KICK MY COMPUTER WHILE TELLING IT TO BE THE MOST STUPID BRAIN ON THE WORD AND THEN REMEMBERING THAT ITS NOT A BRAIN FUCK MY FUCKING FUCK HELL THEN I WOULD KILL THE PEOPLE WHO THOUGHT THAT MAKEING std::vector::end() RETURN AN ITERATOR WITHOUT ELEMENT WAS FINE AND THEN I'D KILL ALL THOSE WHO COME INTO MY ROOM THUS DISTURBING MY WORKFLOW
Any Symfony expert here? I've got quite a tricky question, that I'd love to disqus with another dev.
It's about twig within symfony. I'd like to add a custom node parser, but not for an own tag, but to set some value on each template if it's not set (which can't be done with globals in this case!). I've thought about using a visitor, but from my understanding it gets executed to late, as it requires (probably) to modify the twig AST at compile/parse time.7
FUCK YOU EMOJIS! FUCK YOU AND YOUR EVER FUCKING GOD DAMN SPECIAL WAY OF BEING HANDLED.
Now that I have that part out...
I really fucking hate emoji at this time. Currently I'm working on one of my projects that has markdown support. One of the things I'm extendending the parser with is github style emoji (eg. :smile:) now this part works great. The problem however is getting that short code into a unicode char for HTML. And at the same time I have to take any unicode emoji inserted into the text box by phones and stuff and convert them into the shortcode (My database does support emoji but it's much nicer to store all emoji with the same standard)
All of this has taken 5 hours of research (needed a database of unicode -> short names) and several hours of converting the data from someone elses json into something I can use. (AKA Shrinking the damn file to only what I need) and now I've spent 5 more hours working on the actual code. And I still don't have it working properly.3
Someone raised a PR for the opensource project "fast XML parser". Since this was a major change, it was difficult to review. I asked for the purpose and requested to break it into multiple PRs, where 1 PR should have related changes only. And any good change but unnecessary change can be avoided to scheduled for later.
We had long arguments for a month or two.
I don't know why but instead of breaking the PR, the contributor keep updating his PR for every commit someone made on the original repo.
He also stopped contributing for other changes, and commenting on other issues. (Change in the behavior)
Finally after 5-6 months, I had to close the PR as it was not active, having conflicts and not as per guidelines.
I'm thinking of designing a programming language.
I want it to have easy to read syntax like python. Inheritance and interfaces like java. More advanced concepts like pointers and memory management like c++.
I was originally going to write my own compiler but I figured it's not worth reinventing the wheel. So the current plan is to basically just create a parser that turns a source file into c++ code and then that is compiled with g++. The only problem I can think of with that is catching runtime errors.
How does this language sound?
My purpose is to have a language that is as easy to read as python but with the speed of a compiled program and the ability to use it for embedded projects. I feel like reading larger C++ projects can be quite time consuming. So I figure the trade off of taking a little longer to write the code to make it more obvious what is going on is better than having a lot of syntax that can be tough to walk though the logic of (I find this often with c and c++, not like I don't figure it out but It definitely takes longer than it does to read and understand python)4
Why do people keep inventing new object serialisations when there is already JSON and XML? Why do people think that a custom format and parser would be better than an industry standard and a parser that has years of development improvements? :-S
How would you teach / punish these people?3
My project back in university, where I used bash and NLP and Python to create a utility thay would execute sentences written in English. Much like typing "change my wallpaper to abc.jpg"
Even though the tokenizer took almost five minutes to tokenize a sentence ( longer than five words ), and the parser took even longer, I still love it, for it was my first dive into ML !
finally after months and months of just planning and doing boring stuff a piece of code that was really just fun to code and plan for some days:
i just wrote my first "real" parser for a simple DSL. so much fun! i just really can recommend that to everybody.
i've use a parser combinator. the concept of this parser combinator ist to combine simple parsers (like when it starts with a number or a "-" and continues with numbers then its an integer etc) into a big one. i've written it in c# and used "Sprache" first and after some time i switch to "Superpower". a really great lib, but lacks a bit of documentation. anyway, i've your're interested in these things and want learn how your "daily code" gets parsed i would recommend that to you! :)
greetings to all fellow devRanters and happy coding / parsing! :)1
Keep going into application level timeouts and insufficient number of xml messages frames transmitted through tcp sockets.
Found that a "custom" C-written xml parser needs 10 seconds to find the core data within 2500 chars of that xml.
I knew that C is blazing fast but that's until it's used by some dick head.2
Trying to create an html parser for terminal devrant, and it's really hard. Made a working xml parser for now. It actually worked!13
I just took up a challenge to convert an image into a file with its RGB values and then an opposite script which reversed the process. I can't believe how in the zone I was.
I plan to add split work loads with multithreading and a user-friendly CLI parser.2
Sometimes I am wondering... are there other almost-18-year-olds who want to write a parser generator? 🤔
What are other teens working with?8
The Uniparser: a single, self-describing general parser capable of parsing/syntax highlighting/linting every language ever made.
Yesterday I asked a question on stack overflow about what algorithm I should use in order to parse command line strings like in gnu getopt for example.. And I've got downvoted for no GOOD FUCKING REASON. On top of that, my question is on hold. WTF?! For some time now stack overflow is becoming more and more a community of fucking cunts, arse-holes and toxic people.
" What parser algorithm is best suited for command line parsing? [on hold] "
"I want to write my own command line library from scratch. What algorithm should I use in order to parse gnu style args like in getopt for example ? I mean what's the best way other than tokenizing and parse them in a naive way? Should I try to look at LR, LL algorithms or this is way too overkill?"
"Your question sounds like "I want to do X. What's the best way to do it?". Too broad, you need to be more specific about what problem you're having. (And keep your question clean. No meta-stuff in there.)"
I mean, what more context-specific reason should I add you dense motherfucker!? I want an algorithm to parse your momma's cunt so hard 'till it blows the fuck up. This what you want? You fucking senseless piece of garbage. God, give me a car to run over their fucking internet cable and over their head, too.8
Spent last 2 days trying to get an upstream data file loaded. I've now concluded it's just corrupted during transfer beyond repair... But I got to practice lots of Linux commands trying to figure out what the issue was and fix it (xml parser was throwing some error about nulls originally)
vi, grep, head, tail, sed, tr, wc, nohup, gzip, gunzip, input output redirection
This was a project for school, we had to simulate an app that traced bus routes over a map.
All the teams but mine do it in Java (desktop app), we took another approach and did it on Android with the Maps API.
I had fun coding a parser, this parser job was to read a file and load the bus routes and draw them on the map.
It was structured like:
The fun part was coding and telling my teammates "chill out, it will work", so we finished, built and run and... done! First code working smooth AF.
I know it's a simple parser and a simple app, but it was a nice feeling not having to debug the app.1
So I bet you used googl3 docs at a certain point in time, does anybody know if thrre is an opensource library that provides an editor for word files in the browser, similar to google docs?
Hey! I wrote "Memories of writing a parser for man pages" what do you think about it?
One year ago I made a resolution to do one of two things: get serious about learning neural networks, or finish one of the side projects (markdown based wiki with some nifty features). Didn't do the first one, and got the second one to about 50%.
Not really happy as I did not complete any goal. Still some decent work was done and built an open source parser. So, I guess I am 50% happy.
What were your achievements this year? Did you achieve 100%?3
Hey Java Devs, Snakeyaml is trolling us all. For their parser you must use spaces for indentation.
We say TAB, they say TOO BAD. #ForcedConvention1
So one of the IPSPs I work with wanted to add another bank account to our app. All the code does is downloading the account history as CSV, parsing it and sending for further processing.
So I registered above mentioned new bank account, added credentials, the app requested a history file from the bank, sent it to the parser... and stopped there. No output. No error. Nothing. "What the heck!?", I thought. Compared this CSV with our test suite example and soon enough it turned out the new account gets a slightly different format, it's missing one of the identifiers - we send an empty field to the next module. Good. Case solved, right?
I called the IPSP's representative - will be sorted out. Four days passed. I called the bank's representative - they'll look into it. A week passed. Finally I called our people to pass the bad news - they'll have to fix that in **our** code. What a shame. So much work! They'll have to put down their coffee and doughnuts for 5 minutes...!
- "So, I've found the issue. I compared the test suit file with the one from production. Prod CSV is missing an identifier."
- "Oh? Let me see... No, mate, nope, nada, that's not the cause of it. Our tests ignore that file. We hardcoded different values."
- "And you didn't fix the input file?"
- "Nah, mate, it was such a slight difference there was no point. It could be reverted in a minute."
I considered ending my rant here but I decided to highlight few aspects:
1. The issue remains unsolved, I just stopped caring since nobody else does.
2. Apparently versioning systems aren't enough to convince some people files that aren't in use should be removed from the source.
3. Company policy that forbids developer access after staging leaves literally **nobody** who can understand how huge amount of time can be wasted by the slightest difference.
Do any of you python programmers have any tips for simple projects you can do to learn python?
I am mainly a backend/system engineer comig from C++, slowly picking up rust and have been using bash as my scripting language so far. bash is nice because it is so fundamental in the linux world but you just dont get very far with it and its usually not pleasant to write.
So I would like to learn python, though I have no idea what I can do to practice it, so that I can just quickly whip up a script the next time I need something done in the file system or want to write a simple parser for something.
Do you guys have an idea of something small (not necessarily useful) which makes use of pythons strengths? Just looking for ideas here, so stick it all out 👋💕13
So this is a simple calculator I created by using react native. Pretty useful.
A very critical bug was found in this pitty app. Everything works well, but it has this line in it:
For me? Oh I'm a wreck stupid script kiddies who use eval that too lazy to create a so called clean solution...
Also, this funny ecma script foundation put this eval thing so that you should not use it ever...
I heard a similar funny-but-ironic story about a Supernatural Entity who put a pity apple tree in the garden of eden, so that, everyone eat it's fruit become pricky mother fucker who never listen at anyone's argument. They blindly follow everything told by the linter. Because the linter is a perfect entity who knows your use case more than you.
And I'm really sorry, I'm just a sad moron script kiddies, please -- this rant and tell me again why eval is evil.
Because I'm too stupid to understand the risk of using eval, even if it is safe-eval. Also, tell me again this safe-eval is not save if I accidentally put global context as argument. I don't do it, but let's consider this possibility as bug...
No, mother fucker, you are not superior. You are just an asshole trying to act cool. You say something is dirty, and you don't provide any cleaner solution. Why? because you are a knight with shining armor. A certified developer who never goes to real battlefield. It is always fun right?, to see how people doing things "wrongly" and make fun of it without doing anything...
Ah, don't worry, you don't need to know how to do things correctly. You only need to pray to your linter 12 times a day in order to feel superior...5
A command line tool built in Python that helps you analyse your git logs by exporting them into a csv/json file.
Can fetch the logs from a given file path or a git directory.
When your CS group is awol and the project is due in 3 days. But you just got back from spring break so are still drink as fuck off the most delicious Apple cider ever, angry orchards. So In a drunken furor you Google how to write an LL(1) recursive decent parser, all the while screaming into the empty echo chamber of your group slack about how bullshit it is.
I had a good night what about you?
Side project update.
Made simple nlp library in python and published it’s first version to open source.
Now I can feed it with parsed pdf text.
See rant https://devrant.com/rants/2192388/...
Cause during reading book about nltk I couldn’t find simple extendible way to provide support for polish language and I wanted to abstract stemming, word normalization, tokenizer etc. so I can provide ex. different conditions for separate text files and don’t write much code what is an asset when you work solo.
It’s about 12GB of pdf public accessible law data I am trying to handle ( at first ) which is about 35000 files from last 90 years.
So far I automated downloading web pages and pdf documents from them. Extracting data from web pages and saving it to database. Extracting text from pdf files. I have about 5-6 projects to do all of it above maybe at the end I will put it to some workflow manager like Luigi or just run it by cronjob.
First thing for website version 1.0 part is find correlation between all documents inside law text using nlp library by building custom conditions. Then just generate directory structure and html files with links between documents.
Website version 2.0 is already in my mind but it will be creepy to make it and will take at least 1-2 months and I want to publish fast.
I have some pdfs with only images instead of text and tesseract worked quite good with them so maybe I will try to process them when everything go live.
Learned a lot about pdf as now I know that font in pdf is not always providing unicode characters ( stupid form of obfuscation) so when you extract text you need to build glyph vector to text map for every font.
Pdf is full vector representation - just like svg - what is logic if you think a bit and know that some printers are running using postscript.
Let’s hope next update will be about flutter mobile app which started all of shit above. It’s almost ready ( except getting data from api I am trying to do and logo for release version ). It’s last piece of puzzle.3
So, there is this one client, who wants a website to be made for his hardware shop, and wants the inventory display and has given me their brochure's PDF and that fucking PDF contains Images and no text and he fucking expects me to write that shit down >:(
Tried all techniques to get text from the brochure , parser , OCR , everything.
And the PDF is 100 pages long and I'm dire need of money .
Come on, how hard can it be?
On every fucking TLV data structure I get to handle, the hobo who defined the structure obviously stopped reading the TLV specification after the second sentence.
Fucked up tags, misuse of length encoding, and as a result no real TLV parser can handle that crap. Workarounds and manual parsing all over the place for *every* *single* interface.
Get your shit together, and if you don't want to handle the complex parts, then at least make the simple types right.
Was using an open source piece of software for data storage and visualisation to work with the loggers my company makes. When importing old data for historical views, some of the csv imports would fail without any specific error messages.
It took me a couple of hours but after looking at their csv parser and making my own little one to test with, I eventually found out that it was all down to the way datatime (I think it was?) in java deals with DST, which apparently was to just fuck shit up.
Anyhow, a few simple lines added into the parser later and it all works just fine.
Was super proud of that one as it was the first time I actually looked somewhat good in front of my senior dev.
Coolest but probably most unnecessary feature in the dev world: A whitespace (programming language) to Java bytecode transpiler. Well I kinda started, but never finished actually due to lack of motivation to really finish it. At least the Parser and Interpreter were fully functional.
Motherfucking colspan broke my damn breaks my damn parser.
Which unnecessary, inferior lifeform just adds this shit occasionally and without patterns.
If I mtet that person I'll make sure it's ass will have a colspan="minutes of my life wasted because of you"
Given that an XML parser probably/should uses a regex to find the beginning ("<--") and end ("-->") of a comment, WTF can I not use "--" inside one?7
Still as a scholar who has had his intership I decided that I was finally confident enough in my ability to apply for a small part-time programming job. I had an internship at a cool exhausting place with tons of expertise and I've proven myselve over there. So now I wanted a job on the side. Nothing special, just something that would make a little money with programming instead of washing dishes at the restaurant.
So I started at this small internet based startup (2 or 3 progammers) as a backend-oriented programmer. The working hours were amazingly compatible with my school schedule.
The lead dev also sounded like a smart guy. He had worked as a backend guy for years and had code running on verry critical public infrastructure that if it were to fail we'd be evacuated from our homes.
As a first asignment I got an isolated task to make an importer for some kind of file format that needed integration. So I asked for access to the code. I didn't get it since they were going to re-do the entire backend based on the code I wrote. I just needed to parse the file in a usable object structure. So I found out that the file format was horrible and made a quite nice set of objects that were nice. At the end of the first week or so I asked if I could get access to the code again, so I could integrate it. Answer was no. The lead dev would do that. I could however get access to my private repository.
Next week a new intern was taken to build a multiplatform responsive app. Only downside was that all the stuff he had ever done was php based websites. It wasn't going anywhere anytime soon, but I figured that that was where internships were for. So I ended up helping him a lot and taught him some concepts of OOP and S.O.L.I.D. and the occasional 30 minute rants of IndexOutOfRangeException, ArgumentException and such.
So one day he asked me how to parse a json string and retrieve a specific field out of it.
I gave him something like the following to start with:
if(!JObject.TryParse(jsonString, out json))
if(!json.tryget("foo", out value).../// code continues
but then the main dev stepped in and proposed the following since it wouldn't crash on an API change:
dynamic json = new JObject(jsonString);
string value = json.myJsonValue;
After me trying to explain to him that this was a bad choise for about 15 minutes because of all kinds of reasons I just gave up. I was verry mad that this young boy was forced to use bad programming pracises while he was clearly still learning. I know I shouldn't pick up certain practises. But that boy didn't.
Almost everytime the main dev was at the office I had such a mindboggling experience.
After that I got a new assignment.
I had to write another xml file format parser.
Of course I couldn't have any access to our current code because... it was unnecesary. We were going to use my code as a total replacement for the backend again.
And for some reason classes generated from XSD weren't clear enough so after carefull research I literally wrapped xsd generated code in equivalent classes.
At that moment, I realized I made some code that was totally useless since it wasn't compatible with any form of their API or any of the other backend code. (I haven't seen their API. I didn't have access to the source.) And since I could've just pushed them generated XSD's that would've produced thesame datastructure I felt like I was a cheat. I also didn't like that I wasn't allowed to install even the most basic tooling. (git client or, Ide refactoring plugins, spelling checker etc...)
Now I was also told that I couldn't discuss issues with the new guy anymore since it was a waste of my valuable time, and they were afraid that I taught him wrong concepts.
This was the time that my first paycheck came in so I quitted my job.
I haven't seen any of the features that I've worked on. :)
Intelligent Development class (yeah, that's how it's titled), teacher leaves us as first task to develop our own Database, because later we will make it a fuzzy database.
She gave us three days. Three (counting me) in the team. I began working on Interfaces (Java development) and so on, using GitHub for VCS and documenting each method.
This assholes didn't even ask what was missing or what should they do. One day before date, I told them "Hey, I think I can nail the underlying file management tonight, so, work on the language parser, please"
Stood awake until 1 A.M., waiting for their reply, but there wasn't any.
Next day, I'm the only one of the team and I tried to decline the presentation of my work, but a friend encouraged me, because it was my work and I worked hard.
Presentation went better than expected.
After the class, I have another with one of my team members, he asks "How did you do?", "Us? You meant me, because the other prick didn't go".
And that's all, not another single question nor explaining why did he didn't answered the DM's I sent.
Fuck those guys, fucking team of shit, I hate it when you can't pick your team, but I guess that's just a common place for all of us here, isn't it?3
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
My first real coding project was a parser for planetarion.
Years before i made an html website with frames to show off me and my brothers skating pics. But i don't count that.
The moment you realize the .net Framework's String.TrimEnd() method will actually modify your String prior to returning it, and there seems to be no convenient way of getting a copy without declaring a new variable...
Just wanted to get rid of excess empty lines in the log caused by trailing <CR><LF> when receiving lines of serial data:
Console.WriteLine(DateTime.Now.ToString("H:m:s.fff") + " - serial data received on " + com_port + ": " + serial_data.TrimEnd())
But suddenly the parser could not find its termination characters anymore...
Resulting in probably the most disgusting parentheses I had ever added to any code:
Console.WriteLine(DateTime.Now.ToString("H:m:s.fff") + " - serial data received on " + com_port + (": " + serial_data).TrimEnd())
Yes, I feel bad about it, but then again is VB .net and it kinda "works for me". I promise I will (try to remember to) remove these as soon as debugging is done...4