Details
-
AboutManchester based JavaScript developer. Work for Global Graphics. http://neilmunro.herokuapp.com
-
SkillsJavaScript, Python, Linux, json, NodeJS, mysql, Java, PostScript, bash
-
LocationManchester
-
Github
Joined devRant on 5/8/2016
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
-
Mozart Oz...
I shall let it speak for itself: https://mozart.github.io/mozart-v1/...
I've spoken to a couple of therapists and I'm in a better place now, but this is hands down the worst bit of technology I've ever worked with.9 -
Today.
Last night someone detonated an improvised nail bomb at a concert venue in downtown Manchester. 22 dead and 59 injured (many life threatening).
I'm working from home as my home is listed as a safe haven.
I'm not sure how much, if any, work I'll get done.
If you're in Manchester and need anything let me know.
It's all very much process:
Check everyone I know is ok
List house as safe space
Buy food
Keep passing information around to those who need it
No real time to think about it, just stay in the "response" mode.12 -
There's this weird situation where someone rants about their work situation and commenters dive in with suggestions and comments about what they should and shouldn't do without knowing all the details.
It really pisses me off not just when it happens to me, but I see other posters using devrant here as impromptu group therapy only to be bombarded with "do x or suggest to your boss...".
Now... I've been suggesting and asking the same thing to my boss for over a year, still no change. I'm demotivated because of the lack of progress, I can and do keep bringing it up with him. However having someone here (presumably well meaning) suggest basically the same thing doesn't help, it just reminds me of the frustrating situation.
When this place is supportive its great, when we're all second guessing each other it's frustrating.
Can we all be just a little more excellent to each other? I know I'll try to be. Instead of assuming someone hasn't done x or y, I'll try to be a little more supportive and assume that the most obvious things to try, has been tried.1 -
The next time someone asks me to make a website for a low ball offer of £50 or something, I'm going to explain that I'm worth significantly more than that, however, I'm doing some experimental hobby stuff and if they are than insistent I can use my hobby time produce them something from that.
I won't mention that I bake occasionally, breads, brownies, pancakes etc.
I'll just make a pancake stack and inform them that it's a full stack solution and word will get around, locally, that I'm an asshole who shouldn't be worked with.
Since I don't need exposure and I don't need to be making websites for people who don't understand that it's more than "clicking a few buttons" the situation will largely sort itself out. -
I was at university, and I didn't really feel like I was understanding C++ or C#, I'd gotten to my final year through two repeated years, skipping the work experience, practicing as often as I could (even if it wasn't making sense).
In my final year after needing to install windows for the sixth time in a month (sometimes my machine, sometimes friends machines) I got sick of having to install the same utilities over and over again.
So I decided to write a tool to download and install them, also keeping them up to date, I did it in python, teaching myself as I went and it became my final year project! I should have scored 85% but I was marked down for going over the word count.
Apparently I work better on my own and when I've got a problem I need to solve!2 -
Happy Pi Day, it just started as a joke that radiated out, it's not rational, but don't constantly be diametrically opposed to it!
I spent morning writing that, waiting for tests to finish. -
I'd like to build my own, I've helped many friends complete them, not because the teaching was bad, but because I helped them apply for the bootcamp.
I enjoy teaching what I know and I didn't really learn how to program until my final few months of university anyway, so if these had existed prior to me going to university... I might have gone to one of those instead and saved me some money. Admittedly no degree, but I've never been asked to produce my degree and many people who graduated couldn't program anyway... -
The moment when you can look back at all the comments you wrote to yourself well over a year ago that go along the lines of:
"Don't delete this!"
"I know this looks weird, but trust me!"
"You coded this drunk, you couldn't remember how, and you wrote this comment to remind you that you couldn't understand it sober."
Can all be brushed away, along with the kinda hairy code when you realise that in your attempt to ensure you didn't break code that worked and wasted time trying to understand that you didn't have the experience to solve it, you now have the experience to solve it.
I guess I had such huberis that I assumed I'd never understand a certain problem...1 -
My work product: Or why I learned to get twitchy around Java...
I maintain a Java based test system, that tests a raster image processor. The client is a Java swing project that contains CORBA bindings to the internal API of the raster image processor. It also has custom written UI elements and duplicated functionality that became available in later versions of Java, but because some of the third party tools we use don't work with later versions of Java for some reason, it's not possible to upgrade Java to gain things as simple as recursive directory deletion, yes the version of Java we have to use does not support something as simple as that and custom code had to be written to support it.
Because of the requirement to build the API bindings along with the client the whole application must be built with the raster image processor build chain, which is a heavily customised jam build system. So an ant task calls out to execute a jam task and jam does about 90% of the heavy lifting.
In addition to the Java code there's code for interpreting PostScript files, as these can be used to alter the behaviour of the raster image processor during testing.
As if that weren't enough, there's a beanshell interface to allow users to script the test system, but none of the users know Java well enough to feel confident writing interpreted Java scripts (and that's too close to JavaScript for my comfort). I once tried swapping this out for the Rhino JavaScript interpreter and got all the verbal support in the world but no developer time to design an API that'd work for all the departments.
The server isn't much better though. It's a tomcat based application that was written by someone who had never built a tomcat application before, or any web application for that matter and uses raw SQL strings instead of an orm, it doesn't use MVC in any way, and insane amount of functionality is dumped into the jsp files.
It too interacts with a raster image processor to create difference masks of the output, running PostScript as needed. It spawns off multiple threads and can spend days processing hundreds of gigabytes of image output (depending on the size of the tests).
We're stuck on Tomcat seven because we can't upgrade beyond Java 6, which brings a whole manner of security issues, but that eager little Java updated will break the tool chain if it gets its way.
Between these two components we have the Java RMI server (sometimes) working to help generate image data on the client side before all images are pulled across a UNC network path onto the server that processes test jobs (in PDF format), by reading into the xref table of said PDF, finding the embedded image data (for our server consumed test files are just flate encoded TIFF files wrapped around just enough PDF to make them valid) and uses a tool to create a difference mask of two images.
This tool is very error prone, it can't difference images of different sizes, colour spaces, orientations or pixel depths, but it's the best we have.
The tool is installed in both the client and server if the client can generate images it'll query from the server which ones it needs to and if it can't the server will use the tool itself.
Our shells have custom profiles for linking to a whole manner of third party tools and libraries, including a link to visual studio 2005 (more indirectly related build dependencies), the whole profile has to ensure that absolutely no operating system pollution gets into the shell, most of our apps are installed in our home directories and we have to ensure our paths are correct for every single application we add.
And... Fucking and!
Most of the tools are stored as source bundles in a version control system... Not got or mercurial, not perforce or svn, not even CVS... They use a custom built version control system that is built on top of RCS, it keeps a central database of locked files (using soft and hard locks along with write protecting the files in the file system) to ensure users can't get merge conflicts by preventing other users from writing to the files at all.
Branching is heavy weight and can take the best part of a day to create a new branch and populate the history.
Gathering the tools alone to build the Dev environment to build my project takes the best part of a week.
What should be a joy come hardware refresh year becomes a curse ("Well fuck, now I loose a week spending it setting up the Dev environment on ANOTHER machine").
Needless to say, I enjoy NOT working with Java. A lot of this isn't Javas fault, but there's a lot of things that Java (specifically the Java 6 version we're stuck on) does not make easy.
This is why I prefer to build my web apps in python or node, hell, I'd even take Lua... Just... Compiling web pages into executable Java classes, why? I mean I understand the implementation of how this happens, but why did my predecessor have to choose this? Why?2 -
Fuck Java and its related build tools.
Decided to throw caution to the wind and actually try to build a Java project, from scratch.
Install intellij, except it keeps complaining about the missing JDK, openjdk is installed but it doesn't like it.
Ok, whatever, I read that it's supposed to come with its own and so I point at that, no dice.
Ultimately I stumbled upon a stackoverflow post saying to just download the tgz JDK and just use that, I knew I could do that, but I wanted to use the tools the P environment suggested, but gave up.
Ok, so now I've got intellij and JDK installed, and I want to start my automatically generated project.
Except I now need gradle, fine, whatever, and now gradle complains it can't find the JDK...
Fucks sake... I was happy using Lein and Clojure, I didn't realise how fucking complicated it is to set up a Java IDE these days...9 -
Without a doubt it has to be the internal company search engine/file finding tool @thewamz and I wrote.
The company has a wide UNC network with files scattered all over the place and they need a way to keep track of where the files get moved to (they can and do get moved). The original tool was written in Java/Tomcat and didn't use any frameworks or utilities beyond custom written ones, no orms, and the SQL was just raw strings. The program didn't take into account that files might be moved or deleted so it never removed anything from the database, it just kept adding files and never removing them.
It however never stores files itself, just links to files elsewhere on the UNC network.
It took six months to get it into what might be a stable beta or release candidate state. The user interface is good, very simple and intuitive, the whole thing was rewritten in python/django, there were issues with utf 8 (and mysql not fully supporting utf 8 in its own utf 8 mode), we added a regex search mode (which was sorely lacking), the search used to take up to fifteen minutes however we sped it up to less than a minute (worst case when a user simply puts "^$" as the regex search). It has a multi threaded design which does some checks to ensure it doesn't spawn too many threads and get stuck in constant Gil switching. Still some bugs to fix, like moving the processing of results returned by the server in a web worker so that the content widget doesn't lock up processing millions of search results and moving the back end to use asynchronous python might gain a performance boost. But on the whole I think the system is ready to replace the older system that all the users are frustrated with and constantly complain about.
However the annoying bit is... How to actually get the new system online, while I am responsible for the development of tools and their maintenance, I am not responsible for their initial deployment and that means I have no idea when (or even if) my new tool will even ever be released :/ -
In my unenlightened youth, when programming was a module in my college diploma that didn't seem to be taking me where I wanted to go, I had a couple of guys guy in my class that could arguably be the weird ones.
Jonny, although he asserted that he was to be called "Jonhty", whatever, we never did. He was pretty much top of the high school food chain and for some reason elected to study computer science, none of us was prepared to put up with his shit. He was always boasting about some fanciful claim or another, famously entering the classroom and exclaiming he'd "fucked an absolute milf" and seemed somewhat evasive about the answer, turns out he was 17 and she was 35, the age difference was greater than his own age. We burst out laughing. He would also turn up late and state the college bus was late (it wasn't I got the free bus every day, he'd just not got out his wanking chariot early enough).
One valentine's day we got him a card from a mysterious stranger which was accompanied by a package containing a cucumber and Vaseline, the inside of the card read "to assist you in the following request: please go fuck yourself".
Before you think we were being unduly harsh, we had a centre table where we'd be taught from with computers around the outer rim of the room. He'd come up behind people while at the centre desk, quietly press ctrl+P and slowly walk back to the printer. I saw him do it to my machine and I got to the printer first, to which he shouted "that's MY work" which was amusing because unbeknownst to him I had put headers on all my documents so he really didn't have an answer for why my name was at the top of every page.
To top it all off he had dead eyes, there didn't appear to be much going on but the rent, there was no spark of intelligent life, and while I thought it, I never said it out loud, but other students did and I had to agree. He was just copying his way to graduation. However, he ultimately didn't graduate when people refused to allow him to copy.
Another guy, Richard I believe his name was, which is just as well because he was a right dick. In the UK our word for white trash is "chav" (that's a very naïve explanation for it but that's another rant best left for "socialsciencerant") and he was an complete idiot who was gifted with more brain cells than he ever needed to use. He actually studied hard and got reasonable grades, probably on par with me, but he boasted about smoking weed all the time, he was forever playing dark side of the moon via his loud mp3 player. I kinda left him alone generally until he was high in class one time and while we we're watching a documentary he'd shake my chair and make a weird noise in my ear every few minutes, the first couple of times startled me, the remaining multi-dozen times pissed me off.
It all came to a head with this guy when I'd been hearing about his uninteresting bs on drugs, music and how best to spend my time ("you need to lighten up man, come round my house, take a joint and relax man", that sorta thing), well this guy walked like he was mid way through shitting himself so I personally think that perhaps he is too chilled. Anyway he's arguing with me and after the exchange of him making his point, me disagreeing and expecting the end of it, he made the mistake of saying two words to me:
"Listen, mate..."
And I had him in check mate.
"Listen, I ain't your fucking mate , I don't even like you, you're a disruptive annoying twat that thinks he knows it all, we're all 17, none of us know anything, so shut the fuck up, sit the fuck down and stop boring me with your drugs, I ain't interested, and for the record I think pink Floyd ruined prog rock!"
He looked at me with sad puppy dog eyes, and started with the "but, why?", However I was interrupted and had to leave the class for unrelated reasons, I returned to be told he'd put safety pins up right on my chair so I'd sit on them, and mutual friends who TD me I'd been cruel and that he doesn't was hurt, so I should apologize, he overheard and said he was sorry for bring a bit of a dick.
However, you just know when you don't get on with someone? Yeah, that. So I said I wasn't sorry for what I said, for while it was harsh, I am not his mate, nor did I want to be his mate and that was all I had to say on the subject, and that if he wants to take offensive to a nobody not liking him then he's in for a very rough time in life.
Unsurprisingly I don't keep in touch with anyone from college!2 -
A truly scary multiplayer gothic horror action RPG set in a Victorian world with a Lovecraft inspired story (already got the story written as it so happens) with multiple mutually exclusive but tightly linked story lines. That is to say you can experience only one part of the unfolding story with the player having to communicate and interact with others in the game world to discover the full horror of the world.
The world would not have instances the world would be in a state that players find it in, based on what other players had done.
I have a lot of the game mechanics thought out, but time and money... If only it were limitless...3 -
Yesterday, after six months of work, a small side project ran to completion, a search engine written in django.
It's a thing of beauty, which took many trials, including discovering utf8 in mysql isn't the full utf8 spec, dealing with files that have wrong date metadata, or even none at all, a new it backup policy that stores backups along side real data.
Nevertheless, it is a pretty complete product. Beaming with pride I began to get myself a drink, and collapsed onto the floor, this caused me to accidentally hibernate my computer, which interrupted the network connection, which in turn caused an OSError exception in one of my threads, which caused a critical part of code not to run, which left a thread suspended, doing nothing.
From the floor I looked at my error and realised my hubris and meditated on my assumptions that in theory nothing should interrupt a specific block of code, but in reality something might, like someone falling over...7 -
Python having very limited lambdas, I mean, I understand WHY they are how they are, I just miss true anonymous functions.
-
I never wanted to be a programmer. I spent years in education being confused and bombarded by information that was poorly explained and made little to no sense.
Then in my final year after having a basic understanding of the building blocks, I just sent out to solve a problem >I< had.
It all just clicked into place and it turns out I had learned but perhaps didn't have an appreciation of how to apply it.
I'm guessing my education was too theoretical and not enough practical. -
Been struggling with a performance issue for weeks, been writing a search engine (or sorts) for internal company use only. Discovered the locations that are being indexed contain a directory used for back up purposes that contain archives of everything inside it.
Wrote a means to exclude these directories, performance improves up to 1600% (top end, sadly, not across the board) feel freaking awesome.
Boss acts like I've just pull Atlantis off the floor with my teeth.
It was a two line change, I wish the really difficult tasks were treated this way and not with "oh it shouldn't take you long!"1 -
Installed windows 10 in a virtual machine, fresh install no updates.
"Windows, what are you playing at we both know you are lying, how many updates do you have?"
"A few..."
"Away and install them NOW so that you don't reboot on me when I'm doing something important, ok?"
Remember, windows update rules should be like bathroom breaks on a long car journey, everyone goes before you leave and only when you stop for gas -
If anyone has read any of my posts before you may know, they're usually of a certain... Shall we say, dark, nature?
Well this possibly represents one of the darkest things I've imagined (with regards to technology and programming) I've had.
I was asked if I want to be buried or cremated when I die and they seem so... Pedestrian and I thought long and hard about what would be a fitting way to honour my life and what to do with my remains and it came to me...
I want my flesh to be only partially treated with formaldehyde so chunks of me rot away and others don't.
I want my skeletal structure to be replace with titanium rods with actuators and servo motors where my joints would have been with an internal gyroscope to assist with balance and my corpse will be installed with some sort of IOT controller board with on board wifi.
The companion smart phone app will allow my partially rotting cybernetic zombie corpse to be driven around by a bored grave yard grounds keeper while kids are doing LSD pretending they're all that.
Make them really believe the apocalypse has begun and the dead have risen.
I could be a whole thing for future corpse disposal too.
"Smart corpses, for the loved one who will be more intelligent in death than they were in life."
Although that's probably a bit too harsh...7 -
Windows 7 applied updates.
"Press ctrl+alt+delete to log on"
I press them.
"Shutting down windows"
Dafuq?! I just... What? I may be hungover but windows you're still drunk.1 -
Things I wish I could tell my 18 year old self.
1) Accept you will make mistakes.
2) Truly learn the language you are using.
3) Write idiomatic code for the language you are using.
4) Be upfront about not knowing something.
5) Don't let not knowing something stop you from learning it.
6) None of us knew X until we learned it.
7) Understand your strengths and weaknesses as a developer, play to them.
8) Be willing to try new things.
9) X language isn't ALWAYS the best choice, X paradigm isn't ALWAYS the best choice. Choose wisely.
10) You won't know everything, but you might know more than others.
11) Your ideas and ego don't matter more than ensuring the product works.
12) "Perfection is the enemy of the good [enough]" - Voltaire
13) "Perfection is not achieved when there's nothing more to add, but when there's nothing more to remove." - Einstein.
14) Conflicts happen, deal with it.
15) Develop a toolset and really learn them.
16) Try new tools, they may prove better than what you were using.
17) Don't manage your own memory unless you absolutely have to, you are probably not smarter than the collective intelligence of the team that built the various garbage collection methods.
18) People can be dicks, especially online.
19) If you are new and people are being dicks to you, did you skip past the irc message about etiquette? If you did, you're the dick in this situation.
20) It can be tough, but it is fun, so have fun!6 -
Work has started naming projects after chemical elements.
Dibs NOT working on the uranium or plutonium projects...1 -
Forgetting every day tasks...
So I can use map, reduce, filter in my sleep, have memorised huge chunks of valuable programming information.
Today I went to the gym and laced up my jogging pants, looked at the vogue knot I'm supposed to tie to prevent them from falling down and my brain just said:
"Fucked if I know how to tie that!" -
How I've decided to answer the "can you hack" question from here on in...
"Can you show me how to hack this account please?"
"Sure, you'll need a hammer, a blow torch, chloroform, some pliers and couple of bottles of really pure vodka!"
"What the hell?!"
"Oh, it's so much quicker to just extract a password from a person, than it is to break into a system, I'm not exactly trained in inflicting pain on the human body, but I'm sure you'll be able to figure it out through trial and error, good luck!"15 -
I tutor people who want to program, I don't ask anything for it, money wise, if they use my house as a learning space I may ask them to bring cookies or a pizza or something but on the whole I do it to help others learn who want to.
Now this in of itself is perfectly fine, I don't get financially screwed over or anything, but...
Fuck me if some students are horrendous!
To the best of my knowledge I've agreed to work with and help seven individuals, four female three male.
One male student never once began the study work and just repeatedly offered excuses and wanted to talk to me about how he'd screwed his life up. I mean that's unfortunate, but I'm not a people person, I don't really feel emotionally engaged with a relative stranger who quite openly admits they got addicted to porn and wasted two years furiously masturbating. Which is WAY more than I needed to know and made me more than a little uncomfortable. Ultimately lack of actually even starting the basic exercises I blocked him and stopped wasting my time.
The second dude I spoke to for exactly 48 hours before he wanted to smash my face in. Now, he was Indian (the geographical India not native American) and this is important, because he was a friend of a friend and I agreed to tutor however he was more interested in telling me how the Brits owed India reparations, which, being Scottish, I felt if anyone was owed reparations first, it's us, which he didn't take kindly too (something about the phrase "we've been fucked, longer and harder than you ever were and we don't demand reparations" didn't endear me any).
But again likewise, he wanted to talk about politics and proving he was a someone "I've been threatened in very real world ways, by some really bad people" didn't impress me, and I demonstrated my disinterest with "and I was set on fire once cos the college kids didn't like me".
He wouldn't practice, was constantly interested in bigging himself up, he was aggressive, confrontational and condescending, so I told him he was a dick, I wasn't interested in helping him and he can help himself. Last I heard he wasn't in the country anymore.
The third guy... Absolute waste of time... We were in the same computer science college class, I went to university and did more, he dossed around and a few years later went into design and found he wanted to program and got in touch. He completes the code schools courses and understandably doesn't quite know what to do next, so he asks a few questions and declares he wants to learn full stack web development. Quickly. I say it isn't easy especially if it's your first real project but if one is determined, it isn't impossible.
This guy was 30 and wanted to retire at 35 and so time was of the essence. I'm up for the challenge, and so because he only knows JavaScript (including prototypes, callbacks and events) I tell him about nodejs and explain that it's a little more tricky but it does mean he can learn all the basis without learning another language.
About six months of sporadic development where I send him exercises and quizzes to try, more often than not he'd answer with "I don't know" after me repeatedly saying "if you don't know, type the program out and study what it does then try to see why!".
The excuses became predicable, couldn't study, playing soccer, couldn't study watching bake off, couldn't study, couldn't study.
Eventually he buys a book on the mean stack and I agree to go through it chapter by chapter with him, and on one particular chapter where I'm trying to help him, he keeps interrupting with "so could I apply for this job?" "What about this job?" And it's getting frustrating cos I'm trying to hold my code and his in my head and come up with a real world analogy to explain a concept and he finally interrupts with "would your company take me on?"
I'm done.
"Do you want the honest unabridged truth?"
"Yes, I'd really like to know what I need to do!"
"You are learning JavaScript, and trying to also learn computer science techniques and terms all at the same time. Frankly, to the industry, you know nothing. A C developer with a PHD was interviewed and upon leaving the office was made a laughing stock of because he seemed to not know the difference between pass by value and pass by reference. You'd be laughed right out the building because as of right now, you know nothing. You don't. Now how you respond to this critique is your choice, you can either admit what I'm saying is true and put some fucking effort into studying cos I'm putting more effort into teaching than you are studying, or you can take what I'm saying as a full on attack, give up and think of me as the bad guy. Your choice, if you are ready to really study, you can text me in the morning for now I'm going to bed."
The next day I got a text "I was thinking about what you said and... I think I'm not going to bother with this full stack stuff it's just too hard, thought you should know."23 -
Einstein supposedly has a quote attributed to him: "Perfection isn't achieved when there is nothing left to add, but when there is nothing left to remove."
I find that I aggressively refactor code where I can to only what is absolutely required. It does also have the knock on effect of reducing scope of bugs, when the code is smaller there's only so many places bugs can be.
Tesla claimed to have the ability to create designs in his head and only built things once he was satisfied that it worked in theory first, now it's rare I can do that, but I will use a repl to prototype or test modules in isolation before just hacking on the actual code.
Jobs, I mean, I know he didn't code but he was always insisting on designs that looked good and was generally uncompromising in his design centric view.
My friend, she was my Starbucks barista for a while but I've slowly been teaching her code and she's taught me a lot about how to teach others to code, she also happens to be my favourite student.3 -
It's Friday night, I live alone.
Little bit of vodka, little bit of light reading of channels (the django web sockets interface), NOONE running about the apartment, all is quiet.
Bliss.
-- a dude only in his 20s...2 -
Meeting host: "So now that I've finished rambling on does anyone have any questions?"
Me: "Why are we not marketing the time dilation machine you appear to have developed and deploy during the course of this meeting?"
Co-workers laugh.
So glad that it turned out our microphone was muted...