Saturday, December 14, 2019

I don't know C#

I decided to jump into a Twitter thread being a little facetious.

I 've been using C# for a number of years, within the very first year of my first contract. Initially, I used it sparingly for tasks that were outside of what I could do with C. C is the language I was actually hired for. It would have been between C and Java since those were the languages I had experience with from my courses at The University of the West Indies. Eventually, I started using C# more and more for internal tools and client tools written using Windows Forms, and supporting the company's client portal which was written using ASP.NET WebForms.

Subsequent jobs, beginning in December 2013 required C# as the primary programming language. The impetus which triggered that first job change brought on a spiral that impacted my performance and confidence in my skills in cycles.

One manager told me I was a journeyman, though he may have had a different opinion had he met me at a different time. It was meant as a compliment on my skills, but indicating that there were areas I needed to improve on. He recommended a few books, but the primary ones were Clean Code, Clean Coder, and Design Patterns. I started the first two but distractions got the best of me. The aforementioned cycles culminated with an extended break.

Work Experience

Work Experience

  • Independent Software ContractorSelf Employed
    Dec 02, 2019 - Present
    Joined an undisclosed company as an independent contractor for a payroll management product
  • January 07, 2017 - December 01, 2019
  • Application DeveloperZero Chaos
    Jan, 2016 - Jan, 201711 months
    Started as a member of the Implementations Development team responsible for developing custom integrations for new clients being imported and eventually migrated to primary Integrations developer (internal)
I decided to participate in Advent of Code 2019. This was after taking on the #100DaysOfCode challenge where I committed to writing at least 1 hour of code per day for 100 Days. I spent the first 26 days or so on freeCodeCamp, going through every single learning level. I skipped some of the Responsive Web Design projects to get through the JavaScript Algorithms and Data Structures Certification. I'll dedicate another post to my FCC progress.

For Advent of Code, I decided to use C# with Visual Studio Code. I'd also been using C# for leetcode puzzles. For previous competitions, I used Python, even though I've never really dived into learning the language properly. It was just easy to implement what I needed with the rich packages and simple integration with contest platforms. Fewer possibilities of "But it works on my machine".

Then came https://blog.dalevross.com/2019/12/advent-of-code-2017-day-7-yikes.html. I couldn't figure out how why my solution wasn't working so I first requested help on Reddit. That failed to bear fruit so a few days later Eric Wastl, the creator of Advent Of Code, shared my request on Twitter. I got a few offers to help, but this is what I desperately needed to hear.
Now, I'd known my code was far from clean (See Code Smells from Jeff Atwood), much farther than normal, but I initially hoped to struggle along by myself without anyone seeing the mess and worry about refactoring (if necessary), later. David shared a port of his TypeScript solution and another good samaritan shared his C# solution as well.


After viewing their code, it was clear that I needed to improve.

  • I know how to get things done, but if I planned to troubleshoot or share any code I should first make it easy to understand. The C# Language Specification provides many options to ensure your code is SOLID.
  • Writing testable code should never be an afterthought and I have for far too long treated it as such.

So in essence, while I know SOME C#, enough to be paid handsomely, I don't know or practice enough to comfortably call myself a Senior C# developer, though I used it regularly spanning 11 years, prior to the break.

That's why I dedicated this morning to this blog post instead of diving right into Day 14 of Advent of Code. I intend to migrate to Visual Studio from VS Code, to get a richer and up to date development experience by default for C# development. VS Code will still be my go-to for scripting, and websites.
The blog title's inspiration came from You don't know JS.  So, in the spirit of knowing C#, I'll be using this resource serendipitously shared by Scott Hanselman while I was crafting this post.
This will be similar to my approach with freeCodeCamp where no stone will be left unturned this time around. I'll try to improve the readability score for the next draft, and subsequent posts.

Monday, December 9, 2019

Advent Of Code 2017 - Day 7 yikes

I planned to blog about the solution after getting help from another Advent of Coder. She's tagged in the tweet below. However, I spent all day Saturday until a few minutes before Sunday, the 8th swatting bug including elementary stuff like reinitialization of objects in loops after the feedback was implemented. Thankfully that wasn't dependent on day 7. Jump to assumptions or full code
Well, this blog post is now a cry for help.

A few lines are based on assumptions so I'd like to highlight those.

  1. I stored the next index for each amplifier to continue from there without restarting from the beginning. I also tested starting from the first input index and that didn't work so I assumed that assumption was wrong
  2. I initially had a bug with the assumption that halts only occurred after an output opcode. That may still be true but in my debugging, I saw where using assumption 1 led to an exit after opcode 5 when a comparison with 0 resulted in a premature exit.
Please forgive the formatting and ancient look and feel. I'd migrated to Wordpress but lost that installation due to life happenings. I have been diagnosed with a mental illness but please read the following if you have the time, though it was written at a time a was slightly manic.
Perception and ignorance -  The main point is how some are perceived based on factors they have no control over, how these perceptions can be wrong and are sometimes based on ignorance.

Sunday, November 10, 2019

Getting up again!

I lost a few things when life to a turn for the weird. I won't use the term worse, as I learned that all the difficulties I've experienced in life have taught me a lesson. I had migrated from blogger and had set up a WordPress installation on Azure. Eventually, the cost became prohibitive and I could no longer access the site. A wise man would have done a back-up but, alas. So where are we now?

I took down one entry from here where I'd made a commitment in 2015 that I, unfortunately, didn't follow through on. Such is life. I made mistakes, but that does not mean I am done, especially at the tender age of 35. I will continue blogging from here since I already have some content here. I know there's medium.com or dev.to or even my GitHub pages website, dalevross.github.io

I am determined to return to the field I'm sure I still love, despite an overwhelming feeling of being an imposter taking over for the last few years. Those who truly know me will wonder how I could make such a claim. I was good at what I did, though far below what I know I'm capable of. Therefore, I've made a new commitment and began a fresh start.

This is Day 6 of my 100 days of code commitment and at present, I'm setting up PHP locally. I've tweeted my commitment and my progress so far.

There's also a pinned tweet that provides a high-level overview of what happened which can be found here.


So I'm getting up again. Wish me luck!
Even better, join me on Free Code Camp and learn to code. I'll help!

Sunday, December 8, 2013

List<Awesome> BucketList

1. Build a Robot
2. Develop a Game
3. Become Proficient with 3D Animation
4. Talk with Neil deGrasse Tyson
5. Talk with Elon Musk on another planet :)
6. Understand Quantum Mechanics
7. Make one major discovery

Tuesday, October 1, 2013

Converting Twitter Links To Follow Buttons

Forgive the rushed nature of this post as I'm taking a short break to do it

So I saw this http://www.siliconprairienews.com/2013/07/70-plus-kansas-city-area-startups-to-follow-on-twitter and decided why not follow them. We'll be there too, right?

Woah! 70 repeated click,navigate and follow instances. There must be a better way.

Before














So, I did a quick search and after some thought realized that the following jQuery snippet should work.

I already had jshell inststalled. so I popped it in and waited.

After
















Then, click, click, click, click.

The End.

Tuesday, September 10, 2013

Embedding Facebook Post plus TFS and ALM Guidance

I saw an article via mashable.com, I think, about embedding Facebook posts in your website. Well today I had my chance to test it out while sharing some content that I'll definitely use personally. I've been on a mission to try to improve the quality of the work I do and this I'm sure will help. The steps are as follows



  1.   Click the drop-down to the top right of the post and select "Embed Post"



  2. Follow the instructions in the pop up to paste the html and javascript generated in your website's html.

The result,

Monday, September 9, 2013

Key Value Pair Service on Google App Engine

I had the need to include in-game dictionaries for an online game I was enhancing through a Google Chrome Extension.

When I decided to look for a simple key value pair service to load the dictionaries, I assumed I'd find loads of examples or some stable implementation that I could leverage. I found one service that appeared to not have much support and a few examples which were not quite there.

 As I was busy with a few other things at the time, I mentioned Google App Engine to the developer I was working with as a possible solution. I said, we might have a free solution if we manage to remain within the specified quotas. I hadn't conceptualized the flow, so I couldn't say whether or not that was possible. We needed to keep the price low (read zero) because the extension is free, and will always be. When a window opened up I decided to go for it.

First decision,

  1. Go with PHP as that is the language I've used most often
  2. Go with Python to get more experience as I had done only a few basic example before.
Easy choice, Python. Time to reduce the verbosity and get to the gold.

Step 1.

Convert dictionaries to a static file that could be read quickly. I had a few failed attempts at getting good performance with
  • JSON
  • msgpack - It claims to be like JSON but fast and small. It still didn't work so well for me.
  • marshal
I then decided to try to implement cPickle which I'd read about before the other two but for some reason, I didn't try it.



To be continued.........