“The Future Is Now: A Rudimentary Look at Quantum Computers”

I first heard about quantum computers maybe a couple months ago during a random YouTube tech-related rabbit hole and having always been fascinated by physics, I was instantly intrigued. But, as it wasn’t what I needed to be focusing on at the time (YouTube makes for marvelous distraction/procrastination) I tabled it for later. Later is now, and I wanted to try to get a better understanding, if only a basic one, of what quantum computers are.

Indeed, quantum computing is “essentially exploiting the amazing laws of quantum mechanics to process information.” (uwaterloo.ca) In the YouTube video I initially watched, there was a woman from IBM’s Quantum Research department tasked with explaining the core of this technology to five different people: a child, a teenager, both an undergrad and a graduate student, and finally, a professional. I remember that early on, with either the child or teenager, she used a coin to help illustrate the fundamental difference in how a quantum computer works. Using the coin as a metaphor for binary — where there are two sides — if you flip or spin it, the coin will always land on one side — it will either be heads or tails. Quantum computing, however, operates within the realm of a never-ending coin spin. Demonstrating this, she spun the coin and said to image that it could stay spinning forever, suspended, and thus always be both heads and tails and never just one. What this means, or can be translated as, boils down to a quantum computer’s ability to “perform calculations based on the probability of an object’s state before it is measured – instead of just 1s or 0s – which means they have the potential to process exponentially more data compared to classical computers.” (sciencealert.com)

Classical computers also operate utilizing state, but this state — called a “bit” — is fixed, definite, final, because with binary, there can only ever be 1 or 0. There have been increases in in size and capability since the first computer — think 8-bit, 16-bit, 32-bit, but in relation to quantum computers, this capability proves nominal. Back to the coin metaphor, a quantum computer’s bit-equivalent is aptly called a “qubit” and it refers to that undetermined state — the spinning coin — of an object. This quantum state is said to be in “superposition” and while superposition relates to an object’s properties being in flux, there is a relationship between superpositions of an objects.

Because the scientific and mathematical foundation of this technology allows these computers to perform calculations before knowing the final state or property of an objects, outcomes can be achieved exponentially faster. It could lead to “solving complex mathematical problems, producing hard-to-break security codes, or predicting multiple particle interactions in chemical reactions.” (sciencealert.com)

So yes it is fascinating. But that aside, this really made me think about how my generation has witnessed amazing leaps in technological capabilities, and because technology is so intertwined with culture, also it’s profound sociological effects. As a millennial, I’m in that select group of people who grew up both with and without the internet. Yes, the internet was invented decades before my birth and was around during all of my youth, but not on the mass public scale that arrived in the mid-90’s. I distinctly remember the arrival of AOL when I was in about 6th grade or so and the swift changes in technology that came with it. I was on computers well before middle school, but they weren’t quite the ubiquitous tools they are today. Definitely not in a personal sense, but also barely in an educational sense. Now, it’s hard to imagine any learning institution where computers aren’t a necessary part of the lectures, curriculum, or even simply the experience. It’s amazing to think what kind of new advancements quantum computers could bring to our workplaces, our schools, our homes, and even our transportation. I don’t work at IBM Quantum Research so I won’t dole out my hypotheses, but I hope that I get to witness some of the societal implementations in my lifetime.

Sources:

Leave a comment

Filed under Uncategorized

Hedy Lamarr — Brilliant, Beautiful, and Bluetooth-Enabling

 

My blog this week is about Hedy Lamarr, a 1940’s movie star. What does this have to do with technology? Well, I came across a fascinating article the other day, quite by chance, describing how this screen siren actually helped invent modern wifi. And considering that technology and film are my two loves, I was pretty astounded to come across a crucial, albeit less-known story that combined exactly those two things.

Lamarr, born as Hedwig Eva Maria Kiesler in Vienna, Austria, first acted under the name Hedy Kiesler in European stage and screen productions. At 18 years old she was cast in Ecstasy by Czech director Gustav Machatý, a film and performance that remains notable to this day for being the first to depict a female orgasm. After the film’s debut, she married a wealthy Austrian manufacturer, Friedrich Mandl, who proved to be a very controlling husband. However, during the course of their marriage, she accompanied him to meetings with scientists and other leaders in military technology. These meetings strengthened her continued interest in the field, which had been sparked by her father at a young age, who world often spend hours discussing mechanical systems, designs, and processes with her. Her married to Mandl ultimately became insufferable, and feeling like a stifled prisoner, she fled both him and Austria.

 

 

She went to Paris, and then London, where she met head of MGM Studios, Louis B Mayer. When they shared the same ship to New York, he offered her a contract with the studio and was the one who convinced her to adopt the name “Hedy Lamarr”. Her first American film was Algiers in 1938, which she followed with a string of successes, most notably Lady of the Tropics (1939), Boom Town (1940), Tortilla Flat (1942), and Samson and Delilah (1949). She was almost the lead in Casablanca, apparently the producer’s first choice for the role that went to Ingrid Bergman. She was, and still is, regarded as one of the most beautiful women to ever grace the screen.

 

 

Lamarr also dated famous inventor Howard Hughes, who encouraged her to explore her scientific curiosity, rather than suppress it. He gave “her a small set of equipment to use in her trailer on set [which allowed her to] work on inventions between takes” (womenshistory.org) and mandated that his scientific team aid her in any of her projects and ideas. This became indispensable to Lamarr as she was increasingly cast in roles that emphasized her “exotic” looks and sensuality while reducing her lines, something which left her un-challenged and un-stimulated.

So she turned to inventing. Her greatest contribution came after meeting George Antheil, an avant-garde composer. Together, they created a frequency hopping mechanism originally intended to aid allied forces against the Nazis in WWII. The technology came about from a desire to improve upon the naval torpedoes of the time, after Lamarr learned the radio-controlled missile systems could be infiltrated by foes with disastrous results. She and Antheil patented their “Secret Communications Systems”, which allowed sender and receiver to change or “hop” radio frequencies at the same time resulting in a clear signal with reduced jamming. The technology was never used by the military in wartime efforts (it was apparently difficult to implement on top of the military being unwilling to use foreign-invented mechanisms) but was instrumental in future technologies for satellites and cell phones.

Sadly, stories of Lamarr’s brilliance were minimized during her career — even her own (ghost-written) autobiography neglects to discuss her inventions. She famously said “Any girl can be glamorous; all you have to do is stand still and look stupid.” (hedylamarr.com) She was, however awarded the Electronic Frontier Foundation’s Pioneer Award, along with Antheil, in 1977 which was also the year she was given the Invention Convention’s BULBIE Gnass Spirit of Achievement Award, “considered the “Oscars” of inventing” (biography.com), making her its first female recipient. She also said “Improving things comes naturally to me” (womenshistory.org) which is quire clear, considering her frequency hopping invention has aided in the creation and advancement of GPS, Bluetooth and other ubiquitous wireless communication technologies of today. For this, she was posthumously inducted into the National Inventors Hall of Fame. and has been dubbed “the mother of Wi-Fi”.

 

 

Sources:

Leave a comment

Filed under Uncategorized

Serverlessconf 2019

This past week I was fortunate to attend the 2019 NewYork Serverlessconf — a 3-day long event with speakers, workshops and a hackathon focused on cloud-based technologies. Serverlessconf started a fears ago, the earliest one listed (https://serverlessconf.io/) was in 2016, and began in New York, with a second and third held later that year in Tokyo and London respectively. In subsequent years, Serverlessconf has also been held in Austin, Paris, and San Francisco. On the website, Serverlessconf is described as “a community led conference focused on sharing experiences building applications using serverless architectures. Serverless architectures enable developers to express their creativity and focus on user needs instead of spending time managing infrastructure and servers.”

For my part, I was only attending the conference portion, as that’s what my ticket was for, but also probably for the best as I’m just dipping my toes in serverless tech — so it was a great opportunity to learn more about ~the cloud~ without the pressure of being a newcomer that might exist in a workshop or hackathon. Although, I did hear in one presentation that someone with no prior experience did the hackathon last year and had a marvelous time, and considering what a warm, welcoming, and fun environment it was, I wouldn’t be surprised if there were more in the same boat. Well, hindsight is 20/20, and since it was such a great conference — I’m definitely planning to attend the hackathon and workshop portions next year.

There were a number of impressive speakers on the docket, and as with any conference, it’s simply impossible to see them all. As I was only able to attend the second day of the conference due to a prior commitment, I wanted to take advantage as much as possible. So, I got there bright and early, and did my best to be a sponge.

All the speakers had great energy, and there were a wide variety of topics. There were a wide range of topics covered, with material ranging from novice to supreme overlord, but it was structured so that there were always at least two talks going on at once. Each talk was roughly 30 minutes give or take, and having worked festivals and events before, I was incredibly impressed by the flow and management of the day’s agenda — they really did a great job with timing, so kudos to the organizers, because I know how difficult it is to execute an operation of that magnitude with so many things going on, and to make it seem seamless!

I started my day with “Serverless: An ops experience or a programming model?” from Donna Malayeri, a product manager with Google Cloud Platform. With the discussion of what serverless is at it’s core with relation to the original launch model and the current evolved state and a look at serverless modularization, It was a great intro. Although I hadn’t yet started taking notes (regrets!) it got me excited for the day,

Next I listened to Sam Kroonenburg, the founder of A Cloud Guru (a key partner of Serverlessconf) discuss “Serverless: From one function to 43 Microservices”. Sam founded A Cloud guru in 2015 and explored the reasons he decided on building a Serverless platform,  and walked through each phase of his journey — from starting with himself as the only developer, to a team of 5, to multiple teams of multiple people, how the company grew and changed, implications of certain decisions, and what’s on the horizon.

Afterward Capital One’s Jonathan Altman gave a talk “Serverless Lessons Learned and Our Best Practices”, which served more or less as an overview/summation of other different things that had been discussed at the conference or currently relevant goings-on in the serverless community.

Following that, I sat in on “Detecting outages at scale” from Sander van de Graaf of Ookla / Downdetector, who detailed the process of outages and his team’s process at downdetector to scale their services with the latest Facebook outage.

I was a little late but caught the latter two thirds of Farrah Campbell and Danielle Heberling from Stackery illustrating their journey to learn Serverless, what they’ve learned and how they’ve grown in the Serverless environment and community, what they’ve created together and how they’ve leveraged their skill sets to accentuate their working partnership.

I was super stoked to attend the “Serverless State” talk by Tim Wagner, inventor of AWS Lambda, who showed the possibilities of serverless technology and how to tackle areas that still need work to enhance applications and increase serverless ability. He noted that 15 years ago when he was first discussing the possibilities of serverless to a high level sales college at Amazon, he was asked “what can’t this serverless technology do?”, to which he responded “Well, probably never will this be used for video transcoding” before launching into Berkeley’s creation of one of the best video transcoders available right now…created with serverless technology. He ended his talk unveiling Serverless peer-to-peer networking for Lambda with Reliable communication between Lambda functions before smashing an actual server with an axe. It was a great talk all around and a great reminder that limitations are never concrete.

Serverlessconf Twitter
Serverlessconf Blog

Leave a comment

Filed under Uncategorized

Networking, Conferences, and More

As much as I might despise the word, one of the most important and awesome things from this summer has been “networking”. Because I don’t really subscribe to the “no new friends” policy, networking can feel kind of strange to me sometimes. I think that people who view it solely as networking maybe have less of a struggle because they go for a single purpose and single purpose only. But being both an extrovert and an empath, connecting with other people is where I get my energy and how I understand others. So when I’m “ networking” inevitably, I become very invested in people’s stories and histories and it has often let me to make subsequent friends outside of the networking parameters.

 

Rihanna13.gif

 

It also has been an amazing chance to connect to other cool events and goings-on in the industry. One of the things that recently occurred as a result of meeting all the people i’ve met and establishing contacts at different organizations is that I realized you can petition to get tickets to conference or ticketed meetup events. And oftentimes, if you are someone who is searching for a job or learning to gain knowledge/new info, it actually works for you and can make you a prime candidate to be chosen as the recipient of a ticket to one of these events.

 

Rihanna6.gif

 

I recently was shocked and elated to hear from WWC (Women Who Code) that I had been awarded a ticket to serverlessconf, a three-day conference happening in NTC Oct 7, 8, and 9th. I don’t get access to all the different occurrences happening at the conference, but I do get access to all the conferences and speeches that my heart could ever desire to see! I’m stoked. And although I come from a background with less focus on server-less constructs, I feel like it actually made me a better candidate because I expressed how much I want to learn more in my application. By describing my desire to become more familiar with different server less ideologies and technologies, I was able to show that I am a person who could really gain a lot from this conference, even without the money to pay for it. So always, be willing to take a few minutes to write down why you would make an excellent candidate for a ticket, you really could be surprised! And of course, next week’s blog will be about my experience!

 

 

sloth-FollowYourDreams_2.gif

 

 

Leave a comment

Filed under Uncategorized

Managing Effectiveness During Job Searching and Technical Growth

I want to take a little time this blog to discuss the importance of health during strenuous periods of life. I recently experienced a somewhat traumatic experience and had to deal with some medical stuff that had gone overlooked during the past months of my life. Throughout this time job searching, my outlook can sometimes oscillate — most days I remain pretty positive and hopeful, then there’s usually about one day a week that I feel pretty down, and all manner of stuff in between — but throughout it all, I’ve remained steadily focused. Which, of course, is great. Until it comes at the expense of your health.

 

 

In addition to meeting lots of awesome people in the tech industry, I’ve spent a majority of my time working on learning new technological skills, languages, frameworks, etc. Some of them have been for code challenges, some have been from my own personal desire, and some have been both. It’s always exciting and a little bit daunting to take on something new, so this process (and this industry) is something I really enjoy, because I like a challenge and I love to learn. But, as anyone who works in development knows, when you’re working on a problem or trying to arrive at a solution that’s eluding you, you can get tunnel vision and other things can go out the window. I’ve spent many days zoned in on a tiny issue, doing a deep dive into the root of the problem, intense google search rabbit holes, and *lord knows* what kinds of other of time-evaporators. 😑

 

over it eye roll GIF

 

As my drive and focus became more intense throughout this period, my time management became less of a priority. I actually started pulling all nighters again, something I haven’t done since college. (I have insomnia to begin with, so this really isn’t the smartest thing for me to do, whoops.) I tried to keep up with working out, but didn’t always succeed. Cooking nice meals for myself? Forget about it. I was ordering delivery like crazy, and if not that, then just running down to the bodega for a sandwich. There have been days where I have sat in my room on my computer from 8a-8p without getting up, except to use the bathroom. Like literally done nothing else. No going for a walk, no taking a break to focus on another task, no playing with my cat, not even stretching. A social creature by nature, I had mostly stopped seeing friends because I couldn’t justify spending time on something other than learning new technologies or reaching out to people to get insight into potential jobs. Tack on the fact that outings/get togethers typically cost money, and I basically just considered personal social interactions to be non-productive.

 

robin rihanna fenty GIF

 

But sitting alone by myself all day when I’m someone who gets their energy from other people can have adverse effects. It’s great to be goal-oriented and to be relentless in pursuit of your goals, don’t get me wrong. But the outcome is only going to be as good as your mental state of mind when trying to accomplish it. And even if you’re a smart person, there’s no denying that the state of your soul and body affects the state of your mind.

 

*Childish Gambino “Feels Like Summer”

 

All of this culminated with some other things I had overlooked/ignored in a pretty scary moment of me having to take a serious break and address some medical stuff, which is all I’ll say on that, but leads me to my ultimate point: while working on something you are passionate about, don’t lose sight of the other things that make you the best version of yourself, that make you happy and healthy, that make you, you. It can be challenging to do this in a capitalist society because literally everything is driven by money and “success”. But success is too broad a term to be relegated to money and money only. If you’re successful and miserable, what’s the point really? I’m not saying it’s easy — the idea of taking time off every week from *super-productive-mode* scares me. But to make sure I don’t induce physical/medical issues, it’s what I will do. Because otherwise, all that hard work is literally for nothing. And that’s the big picture view from this week!

 

Rihanna Hello GIF

Leave a comment

Filed under Uncategorized

Testing…Testing…123 (Cont’d…w/ JUnit)

emergency_broadcast-this_is_only_a_test.gif

 

In my last blog, I gave a bit of an overview to testing and why it is important. In addition to different types and scales of tests, there are, of course, also different ways to implement tests. It may depend on your application, the language you’re using, or simply personal style/preference. Switching over to Java from Ruby is an interesting, but not necessarily un-enjoyable experience. In fact, I’ve found it quite exciting, albeit getting used to statically typed code is certainly a steep learning curve…in the beginning, at least.

 

BartSimpson-test.gif

 

One thing about Ruby, and why I think it’s typically a preferred language to be taught in bootcamps, is that it has so much ~*magic*~. Alright, not real magic, just that a lot of what is happening in your code is under the hood, and what you actually write in your editor is typically not that verbose and very implied. So the magic is a lot syntactic sugar, I’d say. It’s great in the beginning because what you’re looking at on the screen seems much less intimidating than a beginner Java file would. However, I sometimes struggled with the “magic” of Ruby, because it was challenging at times to grasp what exactly was happening. There might be instances of your code working, but you’re not really sure why. I’ve definitely had a few moments where I’ve been like “omg, it worked! It did what I wanted it to do!” and then I was like “but wait, how? Why? I don’t know how we got here.” LOL.

 

ShiaLaBeaouf-MAGIC.gif

 

With Java, it’s not necessarily that things are altogether easier to understand — in fact, often they’re a little more challenging — but because it is a statically typed language, you at least know exactly what you’re working with for every single line of code, and for the most part, even when a method is lengthy and complex, you can figure out precisely what is being accomplished by just reading through it line by line. (I’ve also come to discover that abstraction really makes Java beautiful.) So in the transition to Java, and having never delved that deep into testing in previous Ruby applications, I began to work with JUnit to create test classes for the different parts of my application. Once I started to use it, I really started to see and understand the power of TDD. And because my first foray into a Java application is a fairly simple one (i.e. does not use or create an API, does communicate with the web), I didn’t really have the need for seeding any data (whereas in my Ruby projects, I typically had extensive seed files). But my project still needed something to work with, and in this scenario, it was a simple .txt file.

 

im-ready.gif

 

JUnit’s handiness, especially for a beginner, is in the ability to get to your endpoint, even when you’re lost in your code. While there are many approaches to testing, as mentioned above, for this project, I took a combined approach. I didn’t necessarily start out with the tests and then write my main java files, nor did I “complete” my main java files and then write tests just to back up that they did what I intended. I used the two in tandem. After initially sitting down and modeling out what I thought the application should look like, thinking through the design and what methods, properties, and capabilities should be relegated to and/or contained in specific classes, I would start to structure the initial setup of the class and typically get to where I thought I was returning my desired result, (especially if I could print that result in the console), and then maybe attempt a very rudimentary test for verification. At the outset, this was straightforward enough but as the application grew in complexity, with ever more files interacting with each other, and more packages imported, simply creating code I thought would work became an uphill battle.

 

typing-FRUSTRATION.gif

 

As I started drawing in my code, and event in the overall design of my application, the power of JUnit truly revealed itself. I could step back, and re-evaluate what I was doing, what I was achieving, and where I wanted to go from there. So I would start to write one method to accomplish a prescribed outcome and if it used other class methods or started to become lengthy, I would stop and go work on a test just to make sure I was on the right track. From there I could begin to tackle the class interaction and abstract overly large or complex methods.

 

Jeopardy-SNAP.gif

 

So perhaps in an example where there is a User class, creating the new User might be fairly uninvolved, especially if it’s the initial and primary objective. But if the User needs to be able to execute certain functionality, like say, sign up for an event, then we’ve got another class Event, and maybe another class, SignUp, that all start to rely on each other to efficiently create the application as a whole. Even though Ruby is an Object-Oriented language, having come from using the ActiveRecord ORM, this process illuminated and reiterated how a lot of how that interactive logic is sort of handled for you ~*magically*~. Whereas with Java, also Object-Oriented, the interaction can get a little hairy (especially without relying on too many outside tools and as a newcomer), to say the least. After verifying that a User can be created, adding and being able to jump into EventTest and SignUpTest to make sure that all are are accurately relating to one another isn’t just helpful, it’s imperative.

TEST.gif

 

Sources

https://junit.org/junit4/faq.html
https://www.guru99.com/junit-parameterized-test.html
https://blog.parasoft.com/how-to-create-junit-parameterized-tests-faster
https://dzone.com/articles/junit-parameterized-test
https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html
https://www.baeldung.com/parameterized-tests-junit-5
https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests-argument-conversion-explicit
https://blog.codefx.org/libraries/junit-5-parameterized-tests/
https://en.wikipedia.org/wiki/Mock_object

Leave a comment

Filed under Uncategorized

FWIW, TIL TDD. ✍︎(◔◡◔) DGMW, RTFM. <3 –n00b (BTW, TBC) ✌︎

 

Everyone loves tests, right? I’m KIDDING. I’m not an altogether terrible test-taker (well, at least not standard academic tests — can’t say that I love live evaluation tests…I get too in my head about performance).  Even still, it’s not like I ever looked forward to them. But, testing is critical, and fundamental, in programming. At least this time, you get a say in the design. Ah, power!

 

 

It feels like “why testing is important” in development is pretty obvious — it’s great if your code works, but can it compete what you want it to do? Those may sound the same, but to use an analogy: if you’re training for a competitive race (you want to win obviously) where your conditioning and drills are based off of a specific time, you get faster and faster and faster until you hit that time or beat it. Great! Your training system works! Until the next sprinting superstar comes along who you’ve never heard of, I mean, you didn’t even know they existed for crying out loud(!) and leaves you in the dust. Your code legs preparation let you down…and you didn’t stand up (or a chance really) against outside alternative conditions.

 

SometimesYouWin_SometimesYouLose-HillaryClinton.gif

 

Testing helps with that. Granted, it may not be able to account for every single edge case, especially the sort of freakish ones that just blow your mind, but testing mitigates a host of potential problems. Which, even on the most elementary level, if you can eliminate some obstacles, why wouldn’t you? Testing in this scenario might be the ability to know of every person who is going to run the race, as well as their training style, their best time, and an analysis of how good they will be the day of. There still could be an alien invasion on race day, and an extraterrestrial species sends their prodigal son to run the race as well…okay 00.1% chance you could predict that. But you still came in second place! (Coming in second place to an alien really isn’t all that bad…actually, might be something to brag about forever 👽🥈🤷🏼‍♀️).

 

 

Now the problem is, I shamefully don’t know all that much about test driven development. So let’s move on — I want to explore TDD, both to learn (and get better at) it and because I need a topic to write about. Two birds, one stone. There are three types of tests, umbrella categories if you will, of software development:

  • Unit tests ensure personal components of written code work as intended.
  • Integration tests steps back a level to check that components works in tandem as a whole and  can illuminate problems with the database(s), wiring/relationships/hierarchy, network access, etc.
  • Functional tests step back further, making sure each feature is implemented correctly, for evaluation as a large-scale cohesive product.

 

 

A main tenant of engineering is the single responsibility principle and maintaining separation of concerns. Increasing modularity while limiting the functionality of each module allows each entity to focus on and execute its, and only its, particular objective. These umbrellas work together to assess features, gauge ability and appraise one singular system where each piece operates effectively in relation to one another.

Functional tests are usually written and executed by an entire designated team, integration tests can be done by one developer or, depending on the size of the application and the access to components, may require more than one. Unit tests are just special methods written according to a specified format then executed through automation, and are therefore done at the individual level.

 

 

 


Sources:

Leave a comment

Filed under Uncategorized

“The Power of Reduce(-ing Mistakes in a Tech Interview)”

Frustrated Customer Service GIF

Last week I had my first onsite technical interview. Though I’ve been job hunting throughout the summer, I’ve spent the majority of my time trying to meet people in the industry and learning new technologies while practicing ones I’m familiar with. As a result, I haven’t actually applied to an exorbitant number of jobs. Everyone has a different approach, of course, but I personally don’t believe that strongly in cold applying and only occasionally do it. So it’s taken some time to finally see a bit of ROI for my work and with the contacts I’ve made. The upside to this approach is that I’ve made a lot of really great, and authentic, connections in the industry. The downside…not much actual tech interview practice and being a liiiittle bit rusty on solving/talking about my code out loud.

giphy.gif

Phone Monkey GIF

Uuuummmm…

 

So I was incredibly nervous when it came time to interview. I don’t necessarily have any tips on how to reduce anxiety other than what plenty of other people have mentioned: prepare, practice and get experience. Well for that last one, you can’t get experience until you get a chance to get experience so…here was my first chance. While I had tried to not elevate any expectations regarding this position, it’s sort of inevitable that you become a little hopeful when you’re in a position to potentially land a job. I mean, it’s just human nature, right? On top of that, I had spent the past month teaching myself Java so when I got the notification on Wednesday afternoon that I was scheduled for Friday morning, I started to panic a little. I used the evening and following day to brush up on JavaScript, React, Redux, and some other fundamentals, trying to cover as much ground as possible.

 

Baboon Meeting GIF - Baboon Meeting GIFs

 

I expected there to be some stumbles along the way, but I didn’t expect it go as badly as it did. And by badly, I mean my opinion of my performance. The interview itself was an enlightening and informative experience (I mean, hey, I’m writing a whole blog post about it!). The technical assessment was a series of problems regarding two separate arrays of objects. The solutions required different functions to extract and/or manipulate certain pieces of data from one or both of those arrays. Simple enough, right? Sure! Except…I froze. These weren’t problems that were beyond my understanding or ability to solve, but the pressure of live-coding really took it’s toll. I wanted to make sure I was talking about my thought process aloud while attempting to solve, as nearly every source of advice I’ve received along that way had mentioned that one thing. But as I talked out loud, I started questioning everything I was saying. I started questioning my approach. I started questioning my code. I started questioning my ability. I got through the first two questions well enough, but the third question got a little messy, and by the time I got to the fourth, one of my interviewers was basically walking me through it. Again, not one that I wouldn’t ordinarily be able to solve, but of course now I was also hyper aware of the fact that I was being walked through it, which only added to my nerves.

 

Baboon Drinking GIF - Baboon Drinking GIFs

 

I’m usually a pretty confident person and I love talking to people. Plus, my interviewers were incredibly nice and I’m so grateful for their patience and compassion in that situation, without which, I’m sure, would’ve made for a far worse experience. However, by the time we got to the question and answer round with no code, I was so discouraged I didn’t even feel like I could speak effectively (again, my perception of myself in the moment). When it was all over, I just wanted to go home and cry and sleep and cancel a call I had at 4:00. I got on the train, closed my eyes trying to keep my composure, and listened for my stop.

 

 

But about halfway through the train ride, when I was going over the Brooklyn Bridge, I decided I at least needed to talk to someone about this experience. I wanted to vent to a friend, someone who I already knew and trusted well enough to confide in on a personal level, but also someone who works in or at least in proximity to the tech industry. Someone who would *get it*. I was blanking until I remembered I knew someone from college working as an engineer in Charlotte (we initially just had mutual friends from school but started corresponding over the course of my career transition). I felt close enough to text her and in a stroke of luck, she responded that she was available right then. As soon as I got home I called her and explained what happened. She told me she actually didn’t think what I described sounded that bad, that she’d interviewed people who’ve done far worse, and lamented the excruciating process that is technical interviewing in general. So I felt a little better — I know I tend to have really high expectations/goals for myself and can tend to think I’ve failed something if I haven’t met EXACTLY those standards (which is not always an indication of failure). She gave me some great resources and also offered herself and one of her friends to potentially help me practice. After that, I felt a lot better and was in a much better state for the 4:00 call, which went great.

 

share discover GIF

 

I was also really proud of myself for choosing to be proactive in this situation, rather than isolate. I wanted nothing more than to just hole up in my room and have a little pity party, thinking about all the ways I bombed that morning. But instead, I chose to get right back on the horse, view the morning as practice and a great learning experience, and explore options to get better for the next time. And hey, at least I had gotten my first technical interview out of the way — an accomplishment and immediate weight off my shoulders in and of itself!

 

 

I wanted to dedicate time over the weekend to focus on a function that was discussed at length toward the end of my interview: reduce. I’ve worked with reduce before, I mean Redux alone is essentially built off of reducers, but it had been a while. I realized I needed to revisit the basics of it, to really go back and explore what’s going on under the hood and in doing so, I was able to see with fresh eyes the real power of this function. It can do nearly anything! I read some documentation, watched a few YouTube videos (which I sometimes find more helpful), and decided to work on some sample problems specifically using reduce. I’ll leave you with some code I was playing around with (for simplicity, this is the second version with everyything in one .js file, as the first pulls in data from a .txt file), plus the final takeaway from that code (and a philosophy I live by):

Given the following array of strings:

technicalInterviews = [
  "handling criticism  90  true  feel good about",
  "thinking out loud  45  true  need to work on",
  "object-oriented programming  85  true  feel good about",
  "functional programming  85  true  feel good about",
  "data structures  55  true  need to work on",
  "algorithms  50  true  need to work on",
  "javascript  80  true  feel good about",
  "ruby  80  true  feel good about",
  "communicating approach  55  true  need to work on",
  "passion, drive, and determination  95  true  feel good about",
  "react and redux  75  true  need to work on",
  "arrow functions and 'this'  70  true  need to work on",
  "syntax and semantics  65  true  need to work on",
  "high-level understanding  80  true  feel good about",
  "iteration and interpolation  75  true  feel good about",
  "using optimal functions  60  true  need to work on",
  "callbacks  65  true  need to work on",
  "open-mindedness  95  true  feel good about",
  "live-coding  50  true  need to work on",
  "eagerness to learn  100  false  feel good about"
]

We’ll reduce it:

var prepAndPractice = technicalInterviews
  .map(line => line.split('  ')).reduce((ability, line) => {
    ability[line[3]] = ability[line[3]] || []
    ability[line[3]].push({
      skill: line[0],
      proficiency: line[1],
      canImproveUpon: line[2]
    })
    return ability
  }, {})

var priority1 = prepAndPractice['need to work on']
var priority2 = prepAndPractice['feel good about']
console.log(`PRIORITY ONE (need to work on): ${priority1.length} things -- \n`, JSON.stringify(priority1, null, 2))
console.log(`PRIORITY TWO (feel good about): ${priority2.length} things -- \n`, JSON.stringify(priority2, null, 2))

 

And see in the console:

PRIORITY ONE (need to work on): 10 things -- 
 [
  {
    "skill": "thinking out loud",
    "proficiency": "45",
    "canImproveUpon": "true"
  },
  {
    "skill": "data structures",
    "proficiency": "55",
    "canImproveUpon": "true"
  },
  {
    "skill": "algorithms",
    "proficiency": "50",
    "canImproveUpon": "true"
  },
  {
    "skill": "communicating approach",
    "proficiency": "55",
    "canImproveUpon": "true"
  },
  {
    "skill": "react and redux",
    "proficiency": "75",
    "canImproveUpon": "true"
  },
  {
    "skill": "arrow functions and 'this'",
    "proficiency": "70",
    "canImproveUpon": "true"
  },
  {
    "skill": "syntax and semantics",
    "proficiency": "65",
    "canImproveUpon": "true"
  },
  {
    "skill": "using optimal functions",
    "proficiency": "60",
    "canImproveUpon": "true"
  },
  {
    "skill": "callbacks",
    "proficiency": "65",
    "canImproveUpon": "true"
  },
  {
    "skill": "live-coding",
    "proficiency": "50",
    "canImproveUpon": "true"
  }
]

PRIORITY TWO (feel good about): 10 things -- 
 [
  {
    "skill": "handling criticism",
    "proficiency": "90",
    "canImproveUpon": "true"
  },
  {
    "skill": "object-oriented programming",
    "proficiency": "85",
    "canImproveUpon": "true"
  },
  {
    "skill": "functional programming",
    "proficiency": "85",
    "canImproveUpon": "true"
  },
  {
    "skill": "javascript",
    "proficiency": "80",
    "canImproveUpon": "true"
  },
  {
    "skill": "ruby",
    "proficiency": "80",
    "canImproveUpon": "true"
  },
  {
    "skill": "passion, drive, and determination",
    "proficiency": "95",
    "canImproveUpon": "true"
  },
  {
    "skill": "high-level understanding",
    "proficiency": "80",
    "canImproveUpon": "true"
  },
  {
    "skill": "iteration and interpolation",
    "proficiency": "75",
    "canImproveUpon": "true"
  },
  {
    "skill": "open-mindedness",
    "proficiency": "95",
    "canImproveUpon": "true"
  },
  {
    "skill": "eagerness to learn",
    "proficiency": "100",
    "canImproveUpon": "false"
  }
]
*Not sure my appetite for learning can ever be satiated 😉🙃

 

NO MATTER HOW SKILLED YOU ARE, OR THINK YOU ARE, AT SOMETHING, YOU CAN ALWAYS IMPROVE. 

BUT STICKING WITH IT IS KEY.

Baboon Boss GIF - Baboon Boss GIFs

 

 

Leave a comment

Filed under Uncategorized

Today’s The Day For Faraday

Dave Dave Chappelle GIF - Dave DaveChappelle Worried GIFs

A few years ago, I went to see Dave Chappelle at Radio City Music Hall. I remember being told before the show that we weren’t allowed to bring our phones inside with us. Instead, as each person progressed through the line, ultimately arriving at the entrance of the building, they were asked to put their phone into a small gray pouch that was then tension locked. You kept the bag with you, but the only way to unlock it was to revisit a security guard equipped with a small metal disk able to break the tension. I remember being a little frustrated at first, but once I accepted it, and especially once the show started, I really didn’t mind because I was able to devote my entire attention to the what was happening on stage rather than recording it, or updating friends on the show. In this day in age, that’s actually a really rare experience.

 

Kip Technology GIF - Kip Technology Love GIFs

 

Although these bags are not faraday cages, I tend to always think of the two together. Maybe because, on the simplest level, it has to do with blocked cell phone access. But Faraday bags are really something entirely different. And, as has been discussed on this blog before in previous posts, I’m a little bit paranoid when it comes to technology, security, and privacy. So when I was looking up Faraday bags, it dawned on me that there was a reason they sounded so familiar. And not because I hear about Faraday bags on the reg, but because I had heard of the scientist for whom the bags are named, Michael Faraday, a number of times before. Surprised that I hadn’t made this connection previously, I thought I’d take a deeper look.

 

 

Michael Faraday’s work was primarily during the first half of the 19th century. He started out as a chemist and physicist and his depth of knowledge in these two subjects led him to a great many discoveries. His first official scientific role was as an apprentice to Sir Humphrey Davy, an esteemed and prolific chemist of the day. As Faraday’s work blossomed under Davy he became something of a master in chemical analysis and laboratory technique.

 

MICHAEL FARADAY

Once he settled at the Royal Institution, he began to explore electricity and magnetism with great fervor. He believed that electricity was the result of a tension existing within a conductor, that it was a vibration, a force — and not some sustained material fluid like water, the popular opinion at the time. He theorized that “the electric force…threw the molecules of a solution into a state of tension (his [so-called] electronic state). When the force was strong enough to distort the fields of forces that held the molecules together so as to permit the interaction of these fields with neighboring particles, the tension was relieved by the migration of particles along the lines of tension, the different species of atoms migrating in opposite directions. The amount of electricity that passed, then, was clearly related to the chemical affinities of the substances in solution.” (https://www.britannica.com/)

 

 

I won’t go deeper into his conclusions, but suffice it to say he was truly a genius, well ahead of his time in terms of his approach to chemistry and physics, and a great influence on a number of scientific minds to follow. Faraday’s work is also omnipresent in everyday life of our modern world. Which brings me to Faraday bags, a subset of Faraday cages. Due to Faraday’s observation that electrical charges exist in relation to a conductor and that, given certain conditions, actually will not impact anything inside said conductor, a Faraday cage is an enclosure composed of electricity-blocking material. Instead, that current will be re-distributed along the exterior of the cage, thereby preventing the current from reaching the internal conductor and having any meaningful effect.

 

Dave Chappelle Lil Jon GIF - DaveChappelle LilJon What GIFs

 

Considering modern telecommunication devices all rely on networks of wireless signals, a Faraday bag can be used to enclose these devices and prevent any incoming or outgoing signals to be received or transmitted. A wireless signal, after all, is a type of electric current that needs a conductor. These conductors can be cell phones, lap tops, iPads, etc. If a cell phone is put into a bag that is outwardly comprised of conductive metal and inwardly comprised of a non-conductive material (like plastic, cardboard, wood, or glass), then the signals attempting to be transmitted become isolated within that outer material, and prevented from passing to or from the device by the inner material.

 

Nosy Hi GIF - Nosy Hi WhatsUp GIFs

 

So, if you’re nervous about your devices being hacked, or about being spied on by Russians, or simply preparing for the apocalypse, then a Faraday bag is a smart and effective utility to have. In fact, a journalist made sure to travel to Russia with a Faraday bag when he interviewed Edward Snowden for The Intercept in 2015, and it was what he used to carry his device to and from different locations during the duration of his stay in Moscow. Here’s a list of 2019’s top 7 Faraday bags (according to heavy.): https://heavy.com/tech/2019/04/faraday-bag/

 

Surprise GIF - Confetti HappyBirthday Surprise GIFs

 

Sources:

Leave a comment

Filed under Uncategorized

Java Beginning Basics

For a recent code challenge, I essentially needed to learn Java in a matter of days. Not that that is actually possible, so let me rephrase: “start learning Java in a matter of days”. Because it’s an older language that has lots of particulars and coming from Ruby which does a lot of things *magically*for you, I was a bit worried, needless to say. While the two are very different, the fact that they are both object-oriented programming paradigms is helpful when transitioning from one to the other.

 

 

But those differences do come into play. Java is a statically typed language where Ruby is a dynamically typed one — where “type” refers to data types. When a programming language is statically typed, it means that all variables must be declared before use. They do not have to be defined or assigned, but their type must be declared at the outset and subsequently cannot be changed later one, although you can write code instructing the machine to read it in a different manner.

 

Theres Something Else Going On GIF

 

For example, if you need a boolean, a string, and two numbers (one with decimals and one without), it would look something like this in Java:

 

String helloWorld = “Hello World!”;
double howWellDoYouKnowJavaFromOneToTen = 4.25;
boolean butDoYouEnjoyIt;
int howManyVariables;

 

The first two types have been both declared and assigned whereas the latter two have only been declared, but it is imperative that any type of data is preceded with it’s type. In the above example “String” is the type, “helloWorld” is the name of this string, and “Hello World!” is it’s value, with each other type following a similar pattern. An important thing to note is that String is capitalized in Java because it is a class in the same way Object is [also capitalized], and boolean, int, and double are all primitive double types. For exact numbers, you use int, and for floating numbers you use double. Doubles can reach a higher range than ints based on a 32-bit system (more info can be found here: primitive types and values). A final takeaway is that semicolons “;” are read in Java and are necessary at the end of each line of code you write (most of the time, if/then statements are an exception). 

 

C and C++ are other famous statically typed languages.

 

A dynamically typed programming language, on the other hand, is one where data types do not have to be declared when creating variables, but need to be defined in order to be used. Variables can also subsequently be changed based on reassignment. So for the same variable creation as above, but in Ruby, you’d have:

 

hello_world = “Hello World!”
how_well_do_you_know_ruby_from_one_to_ten = 8.75
and_do_you_enjoy_it = null
how_many_variables = “”

 

Here, all variables are declared and assigned in the same line. For the latter two, which are currently of an “unknown” value, they are defined with null and “”, representing empty content. Both can easily be reassigned later, even the final variable, which currently is a string, can be reassigned as a number, as easily as:

 

and_do_you_enjoy_it = true
how_many_variables_defined = 4

 

Kazoo Kid Wow GIF - KazooKid Wow Amazed GIFs
JavaScript, Python, PHP, and Perl are other popular dynamically typed languages

 

Each has their pros and cons but what it essentially comes down to is runtime. Statically typed languages are ones that must be compiled before they are run. So if you write a program in a language like Java, you have to first compile your program to make sure everything is suitable before you can can run it for output. This is why the explicit declaration is necessary: the system needs to know exactly what it will be required to do before program execution. Or else it won’t run. This would also be where you’ll be notified of errors in your code. If a program is unable to be compiled, errors will be returned, and you will have to resolve them before you can run the program. Dynamically typed languages are interpreted as they’re executed. There is no need to compile a program beforehand, and no need to explicitly state data types of variables or outline every single minute step of the program as the system will interpret the lines of code as the program is run, with errors returned at runtime. This typically makes writing in an interpreted language a little bit faster because you can eliminate some of the semantics, but it can also lead to errors with misinterpreted variables.

 

 

To round it all out, I’ll include a HelloWorld.java program to complete the final two variables and show a little more of what I mean by everything must be explicitly stated.

No more of this:

def hello_world
  hello_there_world = "Hello There, World!"
  print hello_there_world
end

or even this:

def hello_world(variable)
  return variable
end

hello_there_world = "Hello There, World!”
hello_world(hello_there_world)

 

And much more of this:

(Note: This is also a little more involved than it necessarily needs to be for the purpose of one method, but I wanted extra practice.)

public class HelloWorld {

  String helloString = "Hello There World!";
  double howWellDoYouKnowJavaFromOneToTen;
  boolean butDoYouEnjoyIt;
  int howManyVariables = 4;

  public HelloWorld(double javaKnowledgeScale, boolean enjoyOrNah) {
    howWellDoYouKnowJavaFromOneToTen = javaKnowledgeScale;
    butDoYouEnjoyIt = enjoyOrNah;
  }

  public static void main(String[] args) {
    HelloWorld helloThereWorld = new HelloWorld(4.25, true);
    System.out.println(helloThereWorld.helloString);
    System.out.println(helloThereWorld);
    System.out.println("(all in all, we should see " + helloThereWorld.howManyVariables + " variables within 3 lines printed.)");
  }

  public String toString() {
    String javaRatings = "Your Java knowledge is currently a " + howWellDoYouKnowJavaFromOneToTen + " out of 10 and saying you enjoy it would be " + butDoYouEnjoyIt + "!";
    return javaRatings;
  }

}

 

With the above code saved in file titled HelloWorld.java (class name must match file name), running the following two terminal commands

javac HelloWorld.java
java HelloWorld

without errors, should result in this output printed to the terminal screen:

 

JAVA-HelloWorld

 


Started from the bottom, now we here — HELLO JAVA!

 

Sources:

Leave a comment

Filed under Uncategorized