Vir sapit qui pauca loquitur

Blog

Refayat with Grandparents, Circa 1991 in Bangladesh

Brevity reigns supreme

> Brevity ?

: concise and exact use of words in writing or speech.

I often come across articles that are convoluted, making otherwise stimulating discourse inaccessible. Why cant these articles be easy to read? One’s thought, regardless of how complex it is, can be effectively conveyed using well-researched diction, instead of taking the tortuous path of multiple sentences and esoteric literary techniques. We value succinct communication, and we need to see more of it.

You must be pondering about my fascination with brevity, and how it relates to coding.

My fixation on brevity stems from my previous life, in which I was trying too hard to be someone I am not, a ‘Policy Wonk’. Policy Wonks are Millennials with backgrounds in International Affairs. During my undergraduate and graduate years I was relentless in my pursuit to become a Policy Wonk, but everything I read Policy-related I found gratuitous. And it aggravated me these pieces were so complicated, they really didn’t need to be. Nevertheless, I accepted what I thought was the industry norm and pushed on. The tipping point came when I found myself writing and speaking in ways that made little sense even to myself. I was petrified by how hard I was trying to sound like everything I was reading. Thankfully, at that point I was introduced to coding, and everything changed. I accepted that I was not a Policy Wonk, and reveled in the fact that I didn’t have to subject myself to taxing arcane pieces relied upon by the Policy world. I found my calling in code, technology, and business, and in these industries brevity reigns supreme.

In code I meet people articulating thoughts plainly and clearly. No one is trying to prove anything to anyone, there’s no ego, just an abundance of selflessness and benevolence. They want to help you to the best of their abilities, and they do that by articulating thoughts plainly and clearly. I think brevity is paramount in code, and that is what led me to fall in love with it.

I vow to myself and those following my work that I will speak plainly and clearly. Effective and democratic communication is gravely underrated and taken for granted. This reminder came to me rather poignantly during a series of exchanges I had with Gallaudet (a deaf university) students. What is the point of expressing things most folks cannot understand? We owe it to our friends with impaired hearing to speak plainly and clearly, they would want that. So let us expend words sparingly, and express ourselves in ways that can be heard by all.

In keeping with what I preach, there will be a succinct weekly blog on my coding progress. I intend to share breakthroughs and other things which could be beneficial to coders like me just starting out. Accountability is a defining part of me, so if you find that I’m deviating from the ‘philosophy of brevity’ please let me know.

A local Bangladeshi fabric

> February

02.26.17

If people don't either love or hate your work, you just haven't done all that much. - Tinker Hatfield

I just watched an episode of the new Netflix design documentary ‘Abstract’. This episode was based on the life of Tinker Hatfield, the most influential sneaker designer of all time. He's been at the helm of Nike's sneaker design for decades, and is to be thanked for classics like the ‘Air Max’ and the entire ‘Jordan’ range.

Right before the ending credits he says, "If people don't either love or hate your work, you just haven't done all that much". That really resonated with me, because just a couple of days ago I finished making this blog and personal website, and when I shared it with a close friend he said he hated the color scheme. He understood that I was going for the color scheme of the Bangladesh flag (green and red) but he thought the use of green, red, and shades of light red made the pages look unprofessional. I wasn't upset with what he said, I was proud of my work. But I was subconsciously searching for a little validation, and I found it in what Tinker said. :)

We shouldn't feel let down when someone criticizes our work, because the fact of the matter is; our work has stirred them enough to provoke an emotional response, albeit negative. The provocation speaks to our achievement. Their opposition is a testament to our hard work, and their apathy would be disconcerting.

Now, let’s talk code. I covered Ruby topics in Arrays and Hashes this week, really nailing the concepts of Destructive methods. I used to think that adding the bang operator (!) to any method makes it Destructive, glad to report that I no longer think that. I’ve learnt that the bang operator alone is not the sole determinant of whether or not a method is Destructive. There are methods like Array#pop that Mutate the Caller (Destructive) and does not have a bang operator. It’s crucial to know that we cannot just append the bang operator to any method to make it Destructive.

I also worked on manipulating Files in PRY. I didn’t know that the File class was a Standard Subclass of IO, and that led me to realize that we can use a lot of IO methods with File. Previously, I did most of my File management in the CLI (Command Line Interface), but now I can do some of those functions in PRY. Actually PRY allows for more expressivity. For example, in PRY, I can create files and set accessibility (r, w, w+, a+), I can add content into these files that I just created, and I can even copy content from other files and paste them into these new files.

Before ending I’d like to talk about CSS. A friend of mine opened my world to ‘divs’ a few weeks ago, and once I got the hang of it I thought it was god’s gift to the world. I initially used divs exhaustively when designing this blog and personal website (I might still have a couple hanging around but…shhhh). Divs are fantastic because you don’t have to create new classes every time you want to add a style to an element, you just “div” it, as my friend would say. In my mind divs were great, until I spoke to folks who are in boot camps doing Front-End. They taught me that divs should only be used as a last resort, one person even told me that their Front-End instructor barred them from using divs. You could imagine how I felt at that point, but after the ramifications of frequent div use was explained to me I understood why it’s best to use them sparingly.

It’s better to create new classes - instead of div’ing - for purposes of CSS targeting and tracking. Now that I understand why we ought to avoid divs, I’ll be more diligent, and will create new classes when looking to make small tweaks and changes in my code.

> March

03.05.17

I was having issues with my navigation bar, links would be unresponsive when the bar was over certain parts of the page which were text heavy. Links worked fine over white space, but they weren’t working over text. I had no idea what to do, until someone on the CodeNewbie Slack Channel provided me with the remedy. My issue was related to the ‘Z-Index’, and it was explained to me as the ‘position on the z-axis of an element, I.E. the depth.’ They went on to offer further insight, saying that ‘navigation links might be under another container that happens to have a higher Z-Index due to the hierarchy in the HTML markup, or their positioning, I.E. absolute’. Based off of the guidance, I investigated, later to find that I needed a Z-Index of 1 in my ‘ul’ class, which acts as my navigation bar. After adding the Z-Index property to the class my navigation bar became responsive over all parts of the page. Visualbear, if you’re reading this thank you so much for the help. :)

With respect to Ruby, I came close to fully understanding the difference between Instance and Class Methods. This is what I know so far:

Class methods, denoted with ‘::’ in documentation, is called directly FROM the class. An example of a class method is String::new, and if we were to call it from the class ‘String’ on PRY, say we did String.new(‘examplestring’), the return value would be the new string ‘examplestring’. With class methods we aren’t calling the method from objects, we are calling methods from the class itself. Instance methods, denoted with ‘#’ in documentation, is called ON the object. Here it’s worthwhile to explain what I consider ‘objects’. (I’ve yet to start Object-Oriented-Programming) Given what I know so far, it seems to me that objects are things like strings, arrays, and hashes. My friend recently told me classes are objects too, and it blew my mind. Still, I prevented myself from probing further to avoid a rabbit hole entry. Ok, so back to instance methods. Instance methods are called on the object, an example being String#split. If we called the ‘split’ method on the string ‘hello’ we would see, ‘hello’.split(‘’) => [‘h’, ‘e’, ‘l’, ‘l’, ‘o’,].

Interestingly, while ‘::’ denotes class methods, ‘::’ also defines a ‘namespace’. We will run into namespaces in class/module names. So what is a namespace? Namespaces are used to group classes in Ruby, they differentiate a class from other classes with the same name. ‘ActiveRecord::Base’ refers to the ‘Base’ class in the ‘ActiveRecord’ module, the ‘::’ is used to differentiate this from other classes in Ruby also called ‘Base’.

‘Exception Handling’ is another foray I explored this past week, it’s just a technical way of describing ways to deal with exceptional conditions (errors) in Ruby. And I’m really glad I came across this, because now I have the ability to write programs that won’t crash! LaunchSchool describes it as, 'a way of handling the error by changing the flow of control without exiting the program entirely'. Key to formulating a program with exception handling capabilities are the reserved words ‘begin’, ‘rescue’, and ‘end’. FYI, when we encounter an error in Ruby we say “an exception is raised”.

A very common occurrence of an error is when we get a ‘nil’ value, but instead of having our program crash as result of the ‘nil’, we can circumvent the problem by using the reserved words. Check out the example below:

Exception Handling Example

The block iterates through the array until it faces the ‘nil’, and at that point our ‘rescue’ reserved word, well…comes to the rescue, executing the code below it. After the code below ‘rescue’ is executed, the iteration continues and works its way through the rest of the array. How great is that?

Oh and another thing, if you are hosting your site on GitHub, like me, use JPG instead of PNG. The image above wasn't working for me as PNG. PNGs will work locally, but not off the repository, so use JPG. Happy Hacking!

Panda Slide Loop

03.12.17

In this week’s blog post we cover ‘Variables as Pointers’. This is a very interesting concept that may not come naturally to many, especially if you’re thinking algebraically.

Over the course of the past couple of months I’ve learnt that it’s futile to reason with Ruby concepts using mathematics we picked up in High School and/or University. I learnt this the hard way while trying to understand ‘Variables as Pointers’.

Disclosure: The diagrams you see below are from LaunchSchool, and I highly advise you to check out their free Ruby book if you’re looking to learn, or just need a refresher.

So from the outset we have to acknowledge that variables act as pointers to a place in memory. Well ok…but what does that mean? Let’s look at an example to understand this.

In PRY if we assign variable ‘a’ the string ‘hi there’, then assign variable ‘b’ the value of variable ‘a’, we can be sure that both variables ‘a’ and ‘b’ will be assigned to the value ‘hi there’. Ok, now let’s REASSIGN variable ‘a’ the value ‘not here’, what happens now? Variable ‘a’ is now assigned the value ‘not here’, so variable ‘b’ should also be assigned value ‘not here’ right? NO! Variable ‘b’ REMAINS assigned to value ‘hi there’ because it was NOT REASSIGNED, variable ‘b’ is still pointing at the address space in memory ‘hi there’. Look at the screenshot below of what was done in PRY for confirmation of this.

Variables As Pointers Example 1

So what exactly happened here? Before explaining let’s reiterate that variables are pointers to physical space in memory. In other words, variables are labels created to refer to some physical memory address. Ok, now let’s explain what happened above, and we can do that using the diagram below.

Variables As Pointers 1

Line 3 of code, a = ‘not here’, REASSIGNED the variable ‘a’ to a different physical memory address, variable ‘a’ is now pointing to a whole new string. Variable ‘b’ remains pointing at ‘hi there’, as was established in the second line of code, b = a.

It’s imperative here to also understand that different memory spaces can hold the same value, they’re just in different places in memory. IE If the last line of code was a = ‘hi there’, instead of a = ‘not here’, then variables ‘a’ and ‘b’ would be pointing to the same value, but in DIFFERENT ADDRESSES in memory.

We’re not done yet! To really understand this concept we have to explore another example. Let’s look at what was done below.

Variables As Pointers Example 2

So we’re back in PRY, and just like the previous example we assign variable ‘a’ the string ‘hi there’, then assign variable ‘b’ the value of variable ‘a’, so we can be sure that both variables ‘a’ and ‘b’ will point to the value ‘hi there’. But in this example, we are using the shovel operator to append ‘, Bob’ to the value of variable ‘a’ which is ‘hi there’. So what we’re doing here is mutating the caller on the value of variable ‘a’. Ok, so variable ‘a’ will now point to the value ‘hi there, Bob’, but what about variable ‘b’? Will variable ‘b’ also point to the value ‘hi there, Bob’? Yes, variable ‘b’ will also point to the value ‘hi there, Bob’. How did this happen? Let’s look at the diagram below to understand.

Variables As Pointers 2

Line 3 of code, a << ‘, Bob’, did NOT REASSIGN variable ‘a’ to another string, it simply mutated the caller, modifying the string that variable ‘a’ is pointing/assigned to, which is also the string variable ‘b’ is pointing to. Now we understand why variable ‘b’ reflects the changes made to variable ‘a’, it’s because both variables are pointing to the same physical address in memory, and that physical address in memory was modified. There were NO REASSIGNMENTS in this example.

The main take-away from this second example is that some operations will mutate the caller on the actual physical memory address, and that will affect ALL variables pointing to that address. For operations that DO NOT mutate the caller (like in the first example) variables are REASSIGNED, or re-pointed, to a new physical memory address.

Before ending, we must keep in mind that this applies not just to strings, but to other objects that have destructive methods like arrays and hashes.

Carlton Dance

03.19.17

I’m pleased to announce that I have completed LaunchSchool’s Introduction to Programming with Ruby book. I just started Codecademy’s Ruby course, and upon its completion will begin LaunchSchool’s advanced coursework. This has been a huge milestone for me, and while I’m proud of myself for coming this far, I know I must pick up the pace and work harder to be prepared for The Iron Yard in May. I only have about two months before I begin, what could be, the most challenging 12 weeks of my life!

So what did I achieve this week? A solid revision of key concepts and exposure to some new things. Codecademy’s Ruby track is great for someone needing a refresher of the basics, but I don’t think it’s suitable for absolute beginners. While I’m revisiting concepts familiar to me, I’m also learning new things, and I’ll be sharing two of those in this week’s post.

The first thing I’d like to share is ‘Redaction’. In terms of Ruby fundamentals, there is nothing new here, but what was new to me was the whole concept of Redaction. My understanding is that Redaction is something that can be implemented to hide parts of a string from being printed. It can be used, for example, to hide profanity. I can see this being handy in a children’s forum, where you want to encourage open dialogue but want to shield young ones from online predators, or those with a natural tendency to use inappropriate language. So let’s see this in action below.

Redaction Example

This code should appear to be quite self-explanatory, however, it’s worth mentioning that my code is different from that on Codecademy because I was bothered with the fact that their code would NOT end with a new line. Therefore, I added conditionals with the ‘puts’ method in lieu of ‘print’, to ensure that whatever the outcome of the iteration, there was ALWAYS a new line.

So, what happens above is that every time the code finds the word the user wants to redact, it gets…well redacted. Subsequently, what is printed to the screen is the user’s text but redacted, we see the word replaced with ‘REDACTED’.

The second and final thing I’d like to share this week is ‘Histogram’. A Histogram is essentially a way for us to count how many unique parts of a string there are, e.g. string ‘hello bye bye’ has one ‘hello’ and two ‘bye’s, and a Histogram can tell us that PROGRAMATICALLY. Below is an example of what I was working on. While I understood the basics of it all, some things were new to me.

Histogram Example

The code above first gets a string from the user, then begins a series of executions to finally output the frequencies of each word in the string. Initially, it was quite challenging for me to grasp why we needed a default value when creating the hash. After pondering for a while it dawned upon me that we needed a default value ( more importantly, for it to be 0) because to calculate the frequency of each word in the string we will need to INCREMENT by 1.

Another thing that took me by surprise (and perplexed me a little) was how you can insert a key-value pair into a hash using code that increments. Up till this point I only knew that key-value pairs could be inserted into a hash using: `hash_name[key] = value`, now I know that you can insert values using code that INCREMENTs based off the default value!

Lastly, I learnt that the method Enumerable#sort_by can be called on hashes, and what is returned is a nested array with keys/values in ASCENDING order. This method is NOT destructive, and that’s why we assigned the block to variable ‘frequencies’, it was to capture the returned value.

Awkward High Five Fail

03.26.17

Oh what a week it’s been! I picked up a lot of new things on Codecademy, chiefly around refactoring. Codecademy is fantastic because their course adds on to concepts I gained familiarity with in LaunchSchool, and is also teaching me to write more succinct code. I’m also being exposed to alternate ways of writing certain code, e.g. a program heavy on if/else conditional statements can be rewritten using just one case statement. Case statements are much easier to follow along, and guides us in writing more efficient code.

All in all I am very happy with everything I picked up on Codecademy.

A new concept I found really interesting is the Conditional Assignment Operator. The Conditional Assignment Operator is comprised of the || (OR logical operator) and = (NORMAL assignment operator), resulting in ‘||=’. The Conditional Assignment Operator is used to assign a variable if it hasn't already been assigned a value. E.G. if a variable is assigned 'nil' ‘||=’ can be used to assign that variable some value. However, AFTER THAT, ‘||=’ cannot be used to assign that variable a new value, since that variable already has a value. If that variable is to be reassigned it must be done using the normal assignment operator (=). The Conditional Assignment Operator is useful when we don’t know whether or not a variable has been assigned a value.

The example below should help understand this.

Conditional Assignment Operator Example

Towards the end of the week I came very close to finishing up the Codecademy Ruby course, but couldn’t bring myself to complete because of a rather significant revelation. The revelation came to after spending a couple of days doing due diligence on JavaScript (JS). I’ve been considering JS for a while now, but wanted to wait until I felt stronger about Ruby fundamentals. I spoke to several people and researched extensively only to find that JS is unequivocally the way forward, and that there is much more demand for JS developers than there is for Ruby developers.

Although I fell in love with Ruby I need to be realistic, and accept the fact that knowing JS will increase the likelihood of having an offer right after completing the boot camp in August. It’s imperative that I find gainful employment immediately after the boot camp, and the probability of that happening will be much higher with JS proficiency. (It’s worth mentioning that I am by no means abandoning Ruby, I’ll continue to work on Ruby whenever I can, but I will allocate the majority of my time to JS.)

Take a look at the chart below, it illustrates demand for developers by languages, while also informing us on the most widely used languages.

Stack Overflow Talent Chart 1

It’s absolutely clear that JS has the highest demand and use. Conversely, we find Ruby to be in the bottom regions. (This chart is from Stack Overflow Talent’s ‘2017 Developer Hiring Landscape – United States’ report. It’s incredibly revealing and I urge everyone to check it out.)

Another chart that also stood out to me is this one:

Stack Overflow Talent Chart 2

Once again, JS frameworks, libraries, and tools dominate both what is in demand and used the most.

As I conclude this post I feel trepidation, largely in part to the profoundness of this shift over to JS. For the past couple of months I’ve only known Ruby syntax, and the thought of transitioning to something with different syntax is beyond terrifying. But I have mustered up the courage, and I am taking the plunge today. Also, there’s no denying that I’ll need to learn new languages quickly and efficiently in the future, so this move was, in essence, inevitable. I guess it’s frightening because it’s the first time I’m doing something like this, but I know it’ll get easier over time.

I signed up for FreeCodeCamp, and may consider paying for Codecademy’s JS course. I look forward to sharing my JS insights with you over the course of the coming weeks and months!

Before ending I would like to offer a tribute to my good friend Andrew, the language Ruby, and the online boot camp LaunchSchool. Andrew is has been my mentor in this journey, and is the only reason I began coding with Ruby and LaunchSchool. Thank you Andrew, for helping me solve problems and explaining concepts someone like me with no computer science background found hopelessly esoteric.

I would also like to express my sincerest gratitude to the amazing folks at LaunchSchool who took me in as an aspiring developer, and taught me everything I needed to know to embark on the journey towards Full-Stack Web Development. LaunchSchool provides a fantastic free platform for those interested in starting web development the right way, which is the path of mastery.

Also, I would be remiss if I ended without extolling Ruby. Matz’s Ruby is SIMPLE and FORGIVING when compared to other languages, and that’s why I consider it to be the ideal language for beginners. I can’t emphasize its simple and forgiving nature enough, that’s what helped me in this process and kept me sane! Ruby is a phenomenal language to understand the foundational concepts in programming.

So thank you Andrew, Ruby, and LaunchSchool for giving me the confidence and strength to go into JavaScript, and more importantly, allowing me to become a valued member of this captivating and benevolent Web Development world.

> April

04.02.17

Hi everyone! So I’m one week into my JavaScript (JS) transition, but haven’t done any actual JS work yet.

As was mentioned in last week’s post, I decided to go with FreeCodeCamp, and their curriculum begins with the Front End basics: HTML5, CSS, Bootstrap and jQuery, then goes into JS. However, I’ve downloaded Node.js and have played around doing simple operations with variables and arithmetic, and my first reaction was how similar it is to Ruby! And that further assuaged my fears, and boosted my confidence, about the switch. Below is a screenshot illustrating the similarities.

Hopefully I’ll be able to tell you more about JS next week, after I start FreeCodeCamp’s JS module.

So the aforementioned four modules are followed by two projects to help reinforce our learning. I’m happy to report that I have completed all four modules and the first project. The first project had us develop a tribute page (similar to this) for someone we revere. I picked head of JPMorgan Chase, Jamie Dimon.

I would appreciate feedback on my tribute page, since this was my first time using bootstrap. Bootstrap was such a joy to pick up, and I’ll briefly delineate what I know about it so far, and I’ll also be sharing my thoughts on jQuery.

Bootstrap

If you haven’t already noticed, this week’s blog post was crafted using Bootstrap. Bootstrap is brilliant, it helps you design aesthetically pleasing and modern web pages efficiently. Bootstrap is a responsive CSS framework. It determines how wide a device's screen is, then resizes HTML elements. (Responsive Design!) Thanks to Bootstrap we don't to develop separate pages for different devices.

More specifically, Bootstrap helps with page layouts. All three columns you see here were made using Bootstrap’s Grid system, which allows us to ‘create page layouts through a series of rows and columns that house our content’, and I would like to share something related to this. Nesting, or more simply, having divs inside one another can be a tricky affair. In the case that you want to have a div nested inside a div, remember NOT to include <div class=”row”> in between the child div and parent div. Having <div class=”row”> in between the child div and parent div will spread out the image across the screen and you won’t get the nested look (you can see this here).

Lastly, centering images with Bootstrap. (And I hope to god Google’s SEO picks this up because I know there are tons of you out there who might be going through this problem, please Google work your magic! ) The documentation says “to center images which use the <.img-responsive>class, use <.center-block>.” Annoyingly, this did not work for the life of me, and it might not work for you as well! In which case use classes<.img-fluid rounded mx-auto d-block>.

jQuery

jQuery is known to be the most widely used, and stable, JS script library, and from completing the FreeCodeCamp modules I can see why it’s so popular.

jQuery can be used to target HTML elements using selectors, then changing the properties of those specific HTML elements. We can, for example, use jQuery to change a HTML element’s color without touching the HTML or CSS code. We can even clone HTML elements and move them to another element (done through “function chaining”), again, all through jQuery, and without touching a single piece of HTML or CSS code. These are just a few of the things possible using jQuery.

04.09.17

I had the opportunity this week to devote most of my time to JavaScript(JS), and I can confidently say that I’m becoming increasingly familiar with the syntax (it also helps that the fundamentals are very similar to Ruby). The CodingDojo, where I am set to begin a 14-week course on MEAN and Ruby on Rails Stacks, asks its incoming students to complete a series of JS ‘Algorithm’ challenges.

So the past few days have been a lot of JS, with some jQuery and Bootstrap for side projects (more on those later). These JS Algorithm challenges are becoming increasingly difficult, and I’ll be sharing the one I found most arduous. This challenge took me a couple of hours to crack, and unfortunately, I couldn’t crack it without resorting to the Node.js REPL and the answer video. However, the answer video, in addition to reverse engineering, helped me grasp the problem. I finally understand it and will share my findings below.

This is a case of having a loop inside a loop. The parent loop can be rewritten as < for(var x=0; x<4; x++) >, and the child loop can be rewritten as < for(var y=3; y>=x; y--) >. Rewriting the loops this way will make things easier moving forward. So we know, based on the for loop statements, the parent loop will run 4 iterations (x = 0, 1, 2, 3), and that the child loop will run 4 iterations when x=0, 3 iterations when x=1, 2 iterations when x=2, and 1 iteration when x=3. Therefore, we should expect 10 iterations in total, but this doesn’t mean we should expect 10 outputs, let’s keep moving and we’ll see why.

The child loop has an if statement which will execute some code once the if statement is true. It’s paramount we note that the code following the if statement will mutate the caller on our < var array = [5, 3, 4, 1] >. Failing to identify this VERY important fact kept tripping me up over and over again. So the code below the if statement will PERMANENTLY modify < var array >.

Having established the point above, we can start working through the code. So for the first iteration we have x=0 and y=3, and it satisfies the if statement because array[0]=5 and array[3]=1, 5>3. We follow through on the code below the if statement and our < var array > becomes < var array = [1, 3, 4, 5] >. Subsequently, we run the 2nd iteration of the child loop (keep in mind that the array is now < var array = [1, 3, 4, 5] >), and this time we have x=0 and y=2, so array[0]=1 and array[2]=4 (1<4) and this doesn’t satisfy the if statement so none of the code below the if statement is executed and our < var array = [1, 3, 4, 5] > remains unmodified. And the if statement remains unsatisfied for all 8 following iterations, and that is why our output is what it is. The first iteration was the only time the if statement was satisfied, so the original array was only modified that one time, and no other time in the 9 remaining iterations that this program ran.

Another problem I'd like to share with you is presented below. And this also took me some time to crack, but had I remembered the concepts of NUMBER to STRING CONVERSION and STRING CONCATENATION things would've been different...

So this problem asks us to log < var number > after the while loop < while (x < 10) > is run 5 times. What caused hysteria for me was the statement < number += x; >, I thought the value of x was to be added to 0 in the first loop, then the increment of x was to be added to 5, and so on and so forth. Oh how wrong I was! < var number = '' > is an empty STRING! When you 'add' a string to an integer, the process converts the integer to a string. The integer is no longer an integer after that point! So in this problem everytime the loop is executed we are CONCATENATING the value of x to the STRING < var number = '' >, we can also think of this as APPENDING to the STRING. And that is why the program outputs '56789', they are just the increments of < var x = 5 > CONCATENATED to the STRING.

Bootstrap

Before sharing this week's development I'd like to say that it's really important that you know which version of Bootstrap you are using when reading documentation or other people's suggestions online. In my case, I had no idea that I was reading the documentation for a version before the one this html file is configured for (version 4 alpha). I've wasted SO much time because of this, so I implore you to always check versions.

I discovered this week that the 'well' class is no longer in Bootstrap 4, the 'well' class has been replaced with a new component known as 'cards'. Classes 'card' and 'card-block rounded' can help you replicate 'wells'. I came across this in the Bootstrap 4 documentation's MIGRATION section. This section elucidates all that this different in Bootstrap 4, and what has been changed from Bootstrap 3. I advise everyone starting off with Bootstrap to read it, as it will help make more sense of what most folks are talking about on the internet with respect to Bootstrap.

jQuery

My current side project is developing a static page on Secure Sockets Layer, more commonly known as SSL.

This page is made almost entirely using Bootstrap, but I've experimented with the small amount of jQuery I know so far. I would be remiss if I didn't mention my lack of understanding on the use of jQuery. From what I've done so far, especially with respect to the CSS and HTML functions, I'm failing to see why we wouldn't just change CSS and HTML values directly. However, I do see how jQuery can be useful in having cool animations.

So I've used jQuery functions like 'parent', 'css', and 'html' to alter values from the JavaScript portion of my HTML document, and the one advantage I see with this is the ability to target anything, be it a HTML element, HTML id, or CSS class, and modify what's already there. E.G. I targeted a class common in all my Boostrap buttons, '.target', to change the background color of ALL the buttons.

I used the '.addClass' function to include some offbeat animations in the SSL page. You are greeted with a subtle fade in as the page loads, then your attention is diverted below where you notice link buttons that flip on the x-axis. If you want to incorporate animation to elements in your page you'll need jQuery, in addition to the 'animate.css' file, which can be found here.

04.16.17

Coding Dojo

Tomorrow I start my 14 week intensive bootcamp at the Coding Dojo. This course will take me through Web Fundamentals for the first two weeks, followed by JavaScript, Ruby, Python, and all their associated libraries and frameworks for the remaining 12 weeks. This will undeniably be the hardest thing I've ever done, as my background in programming and computer science is close to nothing.

On a positive note, I've had the pleasure of meeting my cohort, and they all seem like really nice people I can learn from and grow with. This program really stresses collaboration and I look forward to engaging with my peers in solving complex problems and building out web applications.

It is unlikely that I'll have time for my weekly blog entries, but if I find some time in the next 14 weeks I'll try and provide an update on how things are going. Before ending, I'd like to share a JavaScript Algorithm problem I've recently worked on. This problem stood out to me because it's quite different from all the other problems I've been doing. We were asked to formulate a function that shifts elements in an array to the left and replaces the last element with a zero.

What threw me off about this problem was the placement of the if conditional. The if conditional must be last in block, otherwise the loop will result in an < undefined > for the last element in the array.

New Side Project

I'm also working to overhaul my personal page (and subsequently this blog) to something a bit more contemporary. If you're interested in taking a look at my new direction with the personal page check it out here.

Also, thanks to Krista Rae for showing me how to overlay text on an image! I was really struggling with this, and the online portals didn't not have a step-by-step guide on doing this. Krista's video does a fantastic job in explaining how to do it. Thanks Krista!

> May

Coming soon...

> June

Coming soon...

> July

Coming soon...

> August

Coming soon...