Skip to main content

Posts

What the PHP...

 Not only is PHP syntax sometimes not intuitive *ahem foreach loop*, it is sometimes just completely out of this world. Why does the iterable come first in a foreach loop??? I'm learning about variables and apparently you can, for lack of a better term, nest them. I'm not sure why you would ever need to do something so bizarre, except for kicks and giggles. Valid PHP Also valid PHP Incredibly, ALSO valid PHP👀

I gotta feeling...

I've been helping a colleague with his portfolio site. He's making it retro video game themed at my suggestion. He found an interesting pixelated font called arcade classic  and used it for the headings on his page. Unfortunately, some of the letters almost overlapped, making it not quite readable. Before letter spacing I looked into typography ages ago and learnt about letter and word spacing and wondered if that was something that I could fiddle with using CSS. Turns out it is a property you can customise. I opened up Chrome Dev tools and added 3 pixels of letter spacing and it looked so much better. And there's letter spacing too, so that's pretty neat.  After letter spacing Can't say CSS is my favourite thing ever but it's always nice to learn something new in unexpected ways.

So long and thanks for all the fish! Part 1 of 2

I have been with the Tech Academy both as a software developer bootcamp student, as well as an employee. After my bootcamp, I was hired first as the live project instructor, and then as Live Project Director. This, I believe, gives me a unique point of view. I have absolutely no regrets and would join the bootcamp again. But there are a number of things I would do differently. What I have learnt as a former student 1. DO NOT WORK PART TIME.   I worked part-time(20-30hrs) during my bootcamp. I was up at 2.30-3.00am every day to work for several hours. I took a short nap, and then I took a 1hr bus ride down to campus. Studied for 7- 9 hours. Took a 1hr bus ride back home. Lather, rinse, repeat. I also had some family obligations. My weekends and half the summer were taken up caring for my young stepdaughter. I was completely exhausted by the end of the bootcamp and I didn't know if I could do more. Learning to program is HARD. You need to be fully focused. I am fortunate because I di...

Fizzbuzz

I was today years old when I found out what fizzbuzz was. Yes, I'm late to the party. I was in an interview where the interviewer mentioned that ordinarily they would ask interviewees in for a round of fizzbuzz challenges, as I know. Actually sir, no, I don't know 👀 But he sounded so certain that I must surely know what it is that I was afraid to say anything so I did what I always do when I panic. Look right back saying not a word. I googled this mysterious fizzbuzz problem:  It looks pretty easy. I don't think he meant this actual problem, but problems like this. Because this problem is way too easy to be an actual problem someone asks in an interview. I decided to work on it for fun:  Yup. Super easy. I wish this is all I were asked in an interview 😄 

Oh Happy Day!

 I wrote my first recursive function today! I've read about recursion and wanted to attempt it for the longest time. I kept letting fear get in the way. Working on problems with my team has definitely helped me learn more, faster. It has also helped with my confidence. I finally attempted a simple problem using recursion on LeetCode. I was meant to reverse a string.  First, I had to figure out how a recursive function worked exactly. When a function calls itself, it stops the execution of the rest of the code in the function until it reaches the "end" of the chain of function calls. The base case is what determines when the recursive function stops. Without a base case, it would keep calling itself forever like images reflecting off parallel mirrors facing each other. In my function, the base case is when the end of the list is reached, index >= len(s).  Once the base case is reached, it returns to the previous recursive function call on line 5 and line 6-12 are execut...

Creating a linked list

 I'm working my way through the mini courses on LeetCode to understand data structures and algorithms better. I am currently on linked lists. After a few slides, I was tasked with creating a linked list. I had no idea what to do and was stuck on this problem for days. I would look at it for a bit, not know what to do, and try to work on something else, and not be able to focus on that something else because I didn't know what to do about the linked list. Meh! It was a long 3-4 days. I finally figured it out and I have to say I feel very pleased with myseld :D  Step 1: Define a node class and a linked list class.  Each node has a value and a pointer to the next node. There is just a single pointer here because I chose to create a singly linked list. You can also have a pointer in the reverse direction point at the previous node. That would be a doubly linked list. I also had to define my actual linked list which held the value for the head node.  Step 2: Create a get ...

Python Decorators from the Best Site Ever

 This is a topic that I keep encountering but have struggled to fully grasp. To be fair I haven't looked too deeply into it. And now I am doing so. Python-course has a great article  on the topic. They really go step by step. I've summarised what was in the article and re-written it in a way I understand it better. A few notes about Python functions: Function names are references to functions and you can assign multiple names to the same function          e.g.  def func(x):                         return x                    func2 = func                    ==>> Calling either func2(4) or func(4) would give the same output as they are just references to the same function   Functions can be nested inside functions. I have done this a handful of times. Functions ...

Inserting data from CSV into Postgres table with Python

I've been looking into how to insert data from a CSV file into a Postgres Table with code. Turns out it's pretty simple and straightforward. I personally prefer doing it in code than with a command, but I'm not sure what is more common in the industry.  So now I should be able to load data from a CSV file into a Postgres table to create a REST API. The next step is trying to figure out how to convert that data into JSON format. 🤔

Figuring out Postgres Part 2(Adding data)

 My database is set up. My table is set up. Now it's time to add some data. There are 2 main ways we can do it - add data from an external file, or add data with Python.  Adding data from an external file A colleague of mine introduced me to a website - Kaggle . You can download datasets in a few different formats from this site which is pretty amazing! I found one for cat breed characteristics. I don't put much stock in breeds and that sort of thing, but I thought it would be a nice data set to use. The table I created previously wasn't exactly a good match for this data so I created a new table. One that was specifically for domestic cats and not all cats, big and small.  In SQL Shell(psql) Using the copy command in the screenshot below, I copied data from the csv file to my domestic_cats table. Printing a simple query in my Python file revealed that the data was actually copied. It was pretty exciting to see it all there.  Data printed to the terminal Input data w...

Figuring out Postgres Part 1(Setting it up)

 I've been meaning how to use Postgres for a while now and I've finally decided to dive into it. First step, installing Postgres from their website . I kept all the default settings which meant it installed PostgreSQL Server, pgAdmin4, Stack Builder, and Command Line Tools. It later prompted me to set up Stack Builder, but I took a look at this tutorial  and determined that I don't really need to do that right now. It also helped me figure out how to verify the installation using SQL Shell(psql). Everything looks good so far. I followed another tutorial on Linkedin learning to create a database. Next on the tutorial, create a virtual environment and install Psycopg2-binary in it. Apparently it's a Postgres database adapter.  And because I'm an idiot, I forgot where I saved the database. I opened up Postgres shell and used the command SHOW data_directory; But it turns out I didn't need it anyway 😁 I created a new Python file and added the following lines of cod...

Free form

 I'm been trying to find a free form submission service for the longest time. I was using google forms for the longest time but it's really ugly. It doesn't offer much in the way of customisation either. I finally came across something called Formspree and it's hard to believe that it's so easy to use! And it's free for 50 submissions a month! There's no way I'm going to get more than 50 submissions on my wee little portfolio site, so this suits me perfectly! Unfortunately the success page is a formspree page but hey, it's free. I can't complain. It makes me feel great when I manage to find workarounds 😁

Shortcuts

 I saw one of my colleagues do something magical. He automatically fixed the alignment of student code on Visual Studio with just 1 little keyboard shortcut. Ctrl-k, followed by D. Holding down Ctrl the entire time Sometimes shortcuts really do work and make your life better!   

z-index epiphany

 It only recently occurred to me why a z-index is called a z-index. I've known about this CSS property for a little over a year now. And I'm completely embarrassed that I didn't realise this sooner. It refers to the z axis. As in x axis, y axis and z axis. When did I have this epiphany? In the shower. Proof that showers are good for more than just keeping yourself clean.

Python database migrations

 I've gotten extremely comfortable with the commands "manage.py makemigrations" and "manage.py migrate" but today I learnt a new database related command. manage.py migrate [insert app name] zero 😮😮😮😮😮 This simple command is the Ctrl-Z for migrations. It drops the tables for the app. All this while, whenever I have trouble with any of the tables I delete the entire database when I could have been deleting that table alone. oops 😁

Finding your roots

I tried working on the Algorithms I course on Coursera a while back and I had no idea what was going on so I never continued with it. I decided to give it another try now that I've read up a little on algorithms. It's still using a lot of my brain cells but I am slowly making my way through it.  Learning about Quick-unions in Java(from the course) Java seems almost identical to C#. I've forgotten most of what I've learnt about C# but, there's enough in this brain for me to read this. I had such a tough time understanding the root method. I wrote it out in my notebook and worked through it to figure out how it functions and I am amazed! That line is so simple yet complex. And it reminded me of a binary tree LeetCode challenge I was trying to work on with my colleagues some time ago. I had no idea what binary trees even were at that point. The challenge involved finding roots and tre...

Duplicate Zeros

Challenge: Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remaining elements to the right. Note that elements beyond the length of the original array are not written. Do the above modifications to the input array in place, do not return anything from your function. This is one of those times that I have truly amazed myself. I overthought this problem so much and ended up with a solution that had such a long runtime. Lesson learnt! This is me overcomplicating my life An insanely simple solution by someone with more braincells than me

Sorting squares

Challenge : Given an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order. I was killing myself yesterday using enumerate. And today I was using all sorts of conditional statements and I finally ended up with this. Kind of feels like I cheated because I'm just using a built in method. class Solution:     def sortedSquares(self, A: List[int]) -> List[int]:         lenA = range(len(A))         for i in lenA:             A[i] = pow(A[i],2)         A.sort()         return A It's kind of difficult to be proud because I had so much difficulty trying to work through a bug in my code. There were a few conditions I did not consider that kept breaking my code. It was frustrating. Can't say I'm entirely pleased that I used the sort method. I'll feel better when I can actually write code to s...

More list challenges from LeetCode

Challenge: Given an array nums of integers, return how many of them contain an even number of digits. This was pretty straightforward. Again, I did it in Python. Perhaps it's time I started working on these in C#. It would be a good way of trying to relearn C# and have a deeper understanding of the language. class Solution:     def findNumbers(self, nums: List[int]) -> int:         count = 0         for num in nums:             if len(str(num))%2 ==0:                 count +=1         return count

Algorithms: Max Consecutive Ones

Challenge from LeetCode: count the maximum number of consecutive 1s in a list of 1s and 0s. I got it done pretty quickly, or so I thought. I had not accounted for what would happen upon the last iteration through the for loop. Reworked it and this is what I got:  def checkMax(maxConsec, count):         if count > maxConsec:             return count, 0         else:             return maxConsec, 0          class Solution:         def findMaxConsecutiveOnes(self, nums: List[int]) -> int:         maxConsec = 0         count = 0                 for index, num in enumerate(nums):             if num == 1:                   count += 1             ...

Quick and easy packages list

 I created a new project and knew at some point I would have to look into how requirements.txt files are created. I'm still in the early stages of the project though, so I didn't really look into it. As luck would have it, I accidentally came across it while looking up something else. It's so easy! All I have to do is run a command while my virtual environment is active. pip freeze > requirements.txt Running the command pip freeze alone would list out all the third party packages that have been installed along with their version numbers. Using the command above puts it all into a file named requirements.txt. Technically I could name the file anything I want but it appears to be convention to name it thus. This way, anyone who clones your project can easily install the packages and run the project. Reference: https://towardsdatascience.com/virtual-environments-104c62d48c54