Wow, it feels like ages since I last updated this blog, and for good reason! The past year, 2023, has been a whirlwind of intense studying and balancing my full-time job as a...]]>
Wow, it feels like ages since I last updated this blog, and for good reason! The past year, 2023, has been a whirlwind of intense studying and balancing my full-time job as a Front-end Engineer with the demanding Georgia Tech OMSCS program.
But guess what? All that hard work paid off because, drumroll please š„...I graduated this December with my MSc in Computer Science! š
The graduation day, December 16th, was nothing short of magical.
Picture this šø: a crisp Atlanta morning, the excitement in the air, and the sense of achievement among my fellow graduates. It was a day filled with smiles, proud families, and a whole lot of selfie-taking. That moment when I walked across the stage, and heard my name called out, it felt surreal.
Looking back, 2023 was intense and eventful, to say the least. The last few months were particularly grueling. I had laser focus, completely immersing myself in finishing my master's. That meant less time for blogging and more time for coding and studying. But hey, it paid off in the end! Finishing earlier than anticipated feels like a dream come true.
And now, as we step into 2024, I feel like it's the perfect time to unleash all that pent-up creativity and ambition. This year, I'm all about pushing boundaries, exploring new horizons, and dabbling in some personal projects that have been on the back burner (I would actually like to start my indie hacker journey š¾).
So, stay tuned for more updates. This year is going to be about taking all those lessons learned, all that knowledge gained, and turning them into something tangible and creative.
Keep on coding, keep on dreaming, and let's make 2024 a year to remember!
Cheers to new beginnings and endless possibilities! šāØ
]]>Since the introduction of Hooks in ver...]]>
Since the introduction of Hooks in version 16.8, the landscape has shifted significantly, and developers have been empowered with a fresh, innovative way to handle side effects in functional components.
One hook that has become indispensable is the useEffect hook. However, its true potential is often misunderstood or underutilized. In this article, we will reveal the magic behind useEffect, discover less-known facets of its behavior, and learn when, why, and how to use it most effectively.
The useEffect hook is designed to handle side effects in functional components, allowing us to perform actions in response to component lifecycle events like mounting, updating, and unmounting.
It takes two arguments: a function where you can place your side-effect logic and a dependency array. The function runs after the render, and it runs again if any dependencies in the dependency array change.
Understanding the basics is good, but we'll now explore some more advanced concepts and situations where useEffect can be a real game-changer.
Let's say you're building a chat application, where users need to subscribe to a chat room when they enter and unsubscribe when they leave. Using class components, this logic would be split across different lifecycle methods. However, with useEffect, we can have all the related logic in one place.
In this scenario, when the chatRoomId changes, useEffect cleans up by running the return function, unsubscribing from the old chat room. It then runs the effect again, subscribing to the new chat room.
Imagine that you want to track user behavior in your app, such as how long users spend on a specific page. useEffect allows us to implement this in a clean and efficient way:
When the component mounts, it captures the current time. And when the component unmounts, it calculates the duration of the user's visit and logs it.
Just as with any other tool, misuse or overuse of useEffect can lead to performance issues and difficult-to-track bugs.
Remember, each time a dependency changes, useEffect runs the cleanup function (if provided) and then the effect function. If you include items that change too frequently or unnecessarily in the dependency array, you could cause unnecessary work and potential performance degradation. Always ensure you only include necessary dependencies.
When using useEffect for subscriptions, event listeners, or other side effects that require cleanup, ignoring or forgetting the cleanup function can lead to memory leaks and unexpected behavior. Always ensure to provide a cleanup function where necessary.
Understanding useEffect is fundamental to mastering React Hooks. This hook allows us to encapsulate side-effect logic within our functional components, leading to more readable and maintainable code.
However, careful usage is necessary to prevent unnecessary re-renders and other potential performance issues. By truly understanding and effectively using useEffect, we can build highly efficient and resilient React applications that are easier to reason about and maintain.
]]>Ever since version 16.8 rolled out, Hooks have become a game-changer, enabling developers to wor...]]>
Ever since version 16.8 rolled out, Hooks have become a game-changer, enabling developers to work with state and other React features without the need for classes.
Among these Hooks, two stand out for their significance: useCallback and useMemo.
In this article, we'll take a deep dive into these hooks, understand their differences, and learn when, why, and how they should (or should not) be used.
The useCallback hook returns a memoized version of the callback function that only changes if one of the dependencies has changed. It's useful when passing callbacks to optimized child components that rely on reference equality to prevent unnecessary renders.
The useMemo hook returns a memoized value. Like useCallback, it only re-calculates the memoized value when one of the dependencies has changed. It's great for expensive calculations.
Now that we have a brief understanding, let's jump into some practical examples.
Imagine we're creating an intricate game application where a player can increase their level by collecting gems. Every time they level up, they get a celebratory message. Here's a simplified version of that.
Now, the issue here is that the levelUp function is created each time Game renders. Thus, Board re-renders every time, even when there are no level changes. This might slow down our app, especially with complex board rendering. Here's where useCallback shines:
With this change, a memoized levelUp function is passed to Board unless the level changes. The expensive board rendering process only happens when necessary, improving performance.
Suppose you're building an e-commerce app with a product listing page. There's a filter feature that allows users to search for products by their names. Here's a basic setup:
The issue is, the filter function runs each time ProductList renders. If you have thousands of products, this could slow down your app significantly. The useMemo hook can solve this problem:
Now, the expensive filter function only runs when products or filter changes, leading to much better performance for your product list.
While useCallback and useMemo can provide performance boosts in specific scenarios, they should not be used everywhere. Here's why.
Using useCallback unnecessarily can lead to more harm than good. It creates an overhead of maintaining the memoized version of the function, which can be more expensive than the function invocation itself. Let's consider an example:
In this example, useCallback is not needed, because the updateName function is not computationally expensive or passed as a prop causing unnecessary re-renders. Removing useCallback from this code simplifies it without any performance downside.
useMemo can also be overused or misused. If the calculation isn't computationally expensive, then useMemo might bring more overhead than benefits. For example:
In this case, useMemo is unnecessary since the multiplication operation isn't expensive. It would be better to simply calculate totalPrice without memoization:
useCallback and useMemo are powerful tools in the React developer's toolkit. They are designed to help optimize React apps by preventing unnecessary renders and computations.
However, like many powerful tools, they can lead to issues when used inappropriately or excessively. By understanding the use cases for these hooks and using them judiciously, we can create more performant and maintainable React applications.
]]>This summer I will be taking 2 classes at the same time for ...]]>
This summer I will be taking 2 classes at the same time for the first time (Iāve typically taken just 1 at a time due to my full-time job) because I really want to speed up the whole process so that I can graduate sooner š§š»āš
Another cool thing that recently happened is that I was able to switch my specialization and move from the Interactive Intelligence track to the Human-Computer interaction one (which has always been the most interesting one to me anyway) because Georgia Tech decided to open this track for the OMSCS program too! š„³
This, in turn, has enabled me to take advantage of the classes I had already taken which always had more leaning toward the HCI side of things so, to sum it all up, I will likely be able to graduate in Fall 2023! š
Iām quite excited about this (and nervous at the same time because these upcoming months will be very intense in terms of work-life balance, to say the least) but at least once itās all over I will be finally done with the program and ready to start a new adventure! š I need to apply for graduation before June 1st so this makes it all the more official and it gives me such a sense of accomplishment to know that I am so close to the finish line. I am also looking forward to the new opportunities that will come my way once I have completed this program.
Here's to a productive and successful summer! šš
]]>I am excited to share that this semester, I will be taking the Intro to Cognitive Science class as part of my MSc in Computer Science program at Georgia Tech. As someone ...]]>
I am excited to share that this semester, I will be taking the Intro to Cognitive Science class as part of my MSc in Computer Science program at Georgia Tech. As someone who is deeply interested in human psychology and the power of the mind, I believe that understanding cognitive science is crucial in order to fully understand the implications of Artificial Intelligence.
Cognitive science is an interdisciplinary field that combines insights from psychology, neuroscience, linguistics, philosophy, and computer science to study the mind and how it processes information. The field is concerned with how we perceive, think, and remember, and how these processes shape our experiences and behaviors.
One of the most exciting things about cognitive science is that it provides a framework for understanding how our minds work, which can be applied to a wide range of fields. As a front-end engineer, for example, understanding cognitive science can help me design more user-friendly interfaces that are better suited to the way our brains process information. In the context of AI, cognitive science can be used to develop more sophisticated AI systems that can better mimic human thought processes and decision-making.
In this class, I am learning about the different theories of cognitive science and how they are used to understand different aspects of the mind. I am also learning about the different methods and techniques used to study the mind, such as experiments, brain imaging, and computational models.
One of the most interesting topics we have covered so far is the study of perception. The way we perceive the world around us is not a direct representation of reality, but rather a construct of our brain. Our brain takes in information from our senses and then processes it to form a coherent perception of the world. This process is not always accurate, as our brain can sometimes make mistakes, such as optical illusions.
Another interesting topic is the study of memory. Memory is a complex process that involves encoding, storage, and retrieval. We have different types of memories, such as short-term and long-term memories, and different processes for each one. Understanding how memory works can help us to better design systems that can store and retrieve information, such as search engines and databases.
Overall, I am really enjoying this class and I am excited to see how the insights from cognitive science can be applied to my work as a front-end engineer and my interest in AI so I am looking forward to continue my studies in this field.
Thank you for reading, and stay tuned for more! āØ
]]>This year has been particularly eventful for me not only because I switched jobs but also because I continued to commit to the OMSCS program (Iāv...]]>
This year has been particularly eventful for me not only because I switched jobs but also because I continued to commit to the OMSCS program (Iāve recently completed my 5th class and so Iām now halfway through the program) and I was able to experience and reflect on a bunch of things.
These post-pandemic years still hit quite differently, as it feels like thereās so much still hanging in the air (metaphorically but also figuratively speaking š¬) and the dooming sensation of something catastrophic always lurking in the background is always one step away.
Anyhow, what I think is crucial in these times of uncertainty is to not lose sight of our inner eye, the often forgotten consciusness that we constantly try to numb with constant stimuli coming from our addicted and dopamine-seeking brains.
The remedy is to look inward. To pause. To reflect.
Sometimes taking a break is exactly what you need, even if you reckon that your pace is not straining you to the point where you feel like youāre on the verge of burnout.
But taking that moment to evaluate with clarity where you stand and whatās motivating (or not motivating) you at a certain point is crucial to assess the path you need to follow.
Iāve recently finished a rather enlightening book by Paul Millerd which is entitled āThe Pathless Pathā and it really made me look at things from a different perspective.
He talks about the fact that the modern idea of a job is just a recent construct that emerged as a result of the Industrial Revolutio and that, prior to that, the concept of individuality was not under attack in the way that it is right now.
So much of our identities is attached to our professions, and if those professions all have to stay within the limits of very strict and immutable paths there is not much room for creative endeavors left.
Creativity is such a core part of what makes us human. And living in a world where thereās a perpetual association of creativity with uncertainty (and unemployment) makes pursuing creative endeavors much harder especially when weāre being told that a cushion 9-5 job is the most desirable (and socially acceptable) destiny/outcome in our lives.
I really want to explore creativity a lot more in 2023, but I need to figure out a viable way to do so. I donāt want to overthink it too much though, as it would defeat the whole purpose of this resolution. I wish creativity would flow naturally as a state of being, but I feel like much of what we absord externally is somehow orchestrated by so many forces that we donāt have the power over, which makes it hard to be conscious observers of reality.
]]>I have switched jobs š» (now I work as a Front-end Engineer for Remote.com), completed another OMS...]]>
I have switched jobs š» (now I work as a Front-end Engineer for Remote.com), completed another OMSCS class during the summer (i.e. AI, Ethics, & Society), and started a new class in Software Development Processes in August which I am still attending to this day (itās going to end in early December).
Also, I have completely re-designed and updated this website to migrate it from Gatsby.js to Next.js in order to remove some bloat (Gatsby.js comes with SO many dependencies š) and clean it up a bit since it was about time to do that š¤.
This website is still a work in progress though but I have to say that I am pretty happy of how it turned out so far because I wanted to have a way to be able to update my blog super quickly and effectively, and this has been possible thanks to the amazing Notion API which enables me to create new posts using a dedicated Notion DB and to publish them automagically šŖ to this website right away.
Hope yāall enjoy this new design āØ
Cheers šš»
]]>So a few weeks ago I finished my Cybersecurity class at ...]]>
So a few weeks ago I finished my Cybersecurity class at Georgia Tech and I gotta say that it was indeed a really nice chance for me to brush up on my C programming skills and put on a hacker hat!
The projects were engaging as they covered many different aspects of cybersecurity (they also came with very detailed prompts), ranging from very low-level stuff during the first part of the course (we had to hack our way into a shell š¤) to then touch on web security topics (i.e. XSS, CSRF, etc.)
Overall, I would say I learn quite a bunch of useful things about cybersecurity as this class gave me more perspective and various tools that I can now draw from when thinking about the potential threats & attacks in real world scenarios.
So I'd definitely recommend taking this class if you're new to the realm of cybersecurity and you wanna have a chance to challenge yourself by completing some interesting projects about cryptography & web security.
Needless to say that these past few months have been hectic to say the least, and that it was quite challenging to balance my full-time job as a Front-end Engineer with the workload coming from the OMSCS program (as the homework was usually time-consuming).
But I pushed through till the very end and now I am pretty satisfied with the way that things turned out eventually since I am continuously trying to expand my knowledge and skills as a Software Engineer and being able to discover so many different areas of Computer Science is something inspiring and motivating.
So crazy to think that another year is almost over though! š¤Æ
I truly hope that 2022 can be the start of new exciting beginnings for everyone.
Anyhow, in the meantime...Stay tuned, and keep on coding my friends!
]]>In my previous blog post, I had mentioned that I was planning to take the 'AI, Ethics & Society' class for ...]]>
In my previous blog post, I had mentioned that I was planning to take the 'AI, Ethics & Society' class for my Fall 2021 semester at Georgia Tech (OMSCS program).
However, due to how the *priority system* for classes works for 'new' students I wan't able to reserve a spot, and that's why I had to pick another class which (as this blog post title already suggests) is related to Cybersecurity (Intro to Info Security, a.k.a. IIS).
I gotta say that I am quite excited about this nonetheless, since I had never had a chance to dive into cybersecurity as a CS field during my undergrad, so this is a good chance to brush up on my C programming skills and put on a hacker hat! š¤
Understanding al least the basic of cybersecurity is something incredibly valuable nowadays, and hopefully this class will make me more aware about some of the various types of cyberattacks and how they are actually carried out in different scenarios.
I will make sure to do a sort of course review at the end of the semester, so that it might turn out to be useful for someone who's considering attending this class during upcoming semesters.
In the meantime, stay tuned & keep on coding! š»
āØ
]]>I was initially able to reflect on the understated importance of Design Principles during my internship with Mailchimp in Atlanta about two years ago, which marked a significant point in my career as a Front-End Engineer.
As a matter of fact, being able to see how such an established company thinks about its product & the Design aspect connect to it is absolutely fascinating, and I gotta say that I truly learned a lot from that experience.
They also help to establish a common vocabulary across different teams/squads, which can serve as a helpful tool during internal product meetings.
A great example of Design Principles
Let's take a nice example of great design principles and analyze them, so to better understand their intrinsic purpose and value.
Spotify is one of those companies that deeply care about building amazing UX for their end-users, and their guiding principles are:
These principles are so specific and precise in their intent, and they clearly communicate what Spotify values in a User Experience.
They tell a lot about the way Spotify thinks about product, how they want to present content, personalization, not over-engineering and being very intentional about what theyāre putting forward.
The last principle "Lagom" is actually a cool Swedish word for "just enough", which is like a common way of life to indicate the need for the perfect balance when it comes to things.
If we were to point out what makes for great Design Principles we could confidently borrow Alla Kholmatova's principles as an interesting starting point (they're included in her book "Design Systems. A Practical Guide To Creating Design Languages for Digital Products").
Great Design Principles
Specificity is probably the most important aspect to keep in mind among those 5 principles when it comes to conceptualizing new Design Principles, as having a clear picture in your mind about what the brand wants to convey to its end-users and preserving the unicity of the core values is vital.
Actionable refers to the fact that new Design Principles need to be concrete and practical in their intent so that you can effectively act upon them to make a real impact.
Impressionable because a design principle needs to have a soul, a well-defined motif that gets stuck in your head whenever you think about it.
They have a point of view because of course they need to be opinionated somehow, otherwise they wouldn't be able to properly reflect the brand values and would defeat their own effective purpose.
They're living because they need to be flexible enough in order to accommodate any new tension points and discoveries related to the brand. They have the capacity to evolve over time and renew themselves.
What about you?
Have you ever taken part in the brainstorming process for new Design Principles in your company?
How did you decide what was important in shaping those principles?
š
]]>When it comes to JavaScript a...]]>
When it comes to JavaScript and its many quirkinesses, one might feel overwhelmed by the many possible ways to go about tackling this particular problem, and here I would like to show you a few viable approaches.
This is probably the most common and dirty way to approach this problem with JavaScriptā¦but it does the job!
Letās briefly recap how this approach actually works.
Et voilĆ ! š
If you wanna show your interviewer that you know how to solve this problem without relying on the JS built-in methods, just use the for loop.
But letās just get a bit fancier and use the ES6 syntax, shall we?
The new for loop syntax introduced by ES6 is very handy and it drastically reduces the chance of making mistakes while typing code for the loop. Also, it is much cleaner and nicer to look at š .
With ES6 we have a new way of splitting our String into an array, thanks to the so-called spread operator [ā¦].
This approach is almost identical to the first approach I showed (except for the [ā¦] operator of course š ) and here below you can have a look at it.
Pretty neat, huh? š
Passing the āstringToReverseā as a parameter of the spread operator allows us to āspreadā the single character values contained in our original array to get the same result as we did using the split() function, so that we can later reverse the all the single characters one by one as we did before with the JS built-in method reverse() and then finish off once more with the join() method.
The last method I would like to show you is the recursive approach to this problem.
In this case we want to set up our function so that it recursively calls itself till it hits our base case (i.e. an empty string).
We simply cut the first character of our string object away with the substr() method, and add it at the end of the string recursively till there are no more characters left to add.
We can even do this with a ternary operator to be more concise and clean with our JS syntax.
And that was the last example on how to reverse a string with JavaScript! š
I truly hope you enjoyed this tutorial and please let me know your thoughts and solutions too!
]]>I officially finished my Spring 2021 semester at Georgia Tech with my class in Human Computer Interaction, and I gotta confirm that overall it's b...]]>
I officially finished my Spring 2021 semester at Georgia Tech with my class in Human Computer Interaction, and I gotta confirm that overall it's been an enjoyable experience that allowed me to further expand my knowledge in the UX field and gave me such a broader perspective on things.
Although the time commitment was significant because of the amount of weekly writing/reading involved, the fact that I worked remotely for those past few months due to the COVID restrictions in Italy helped my manage the workload much more efficiently, and I was able to carry on without excessive efforts/sacrifices.
I am taking the summer off for now, though, since I really feel like it's time for a short "break" to pause and unwind for a bit in order to (hopefully) start with a new energy for the Fall 2021 term.
I think I will probably choose the AI, Ethics, & Society class since I find the ethics implications of AI to be a profoundly interesting topic whose references we're constantly being bombarded with in our everyday lives.
Stay tuned for more updates, and cheers! š
]]>Itās a typical Monday morning, and I am about to get off the TILO train that takes me to Cloud Academyās offices in Mendrisio every morning.
Itās a typical Monday morning, and I am about to get off the TILO train that takes me to Cloud Academyās offices in Mendrisio every morning.
Itās 8:36 a.m. sharp (lovely how punctual Swiss trains are), and I am walking to the office to start a new day. š„³
As I walk towards my desk to plug in my MacBook, I greet the other early morning coworkers who are already in the office and then make my way to our awesome espresso coffee machine to get my first caffeine fix of the day.
Now that the caffeine āļø is starting to do its magic, I proceed to open up the WebStorm IDE to spin up my dev environment while I also take a quick look at my Google Calendar to get a feeling of what the day is gonna look like, and finally check the Jira board to see what the current progress of my tasks is.
The engagement squad (my current team š) is ready to report the various updates regarding what everybody has been up to since yesterday, and we have a 10/15-minute scrum meeting to discuss our tasks for the day and whether or not we have any particular blockers for the issues weāre currently working on.
Today Iām working on adding a custom functionality to a React Component that I am currently building (i.e., the Card Certification), which is related to our upcoming User Certifications project (edit: itās now live! š„³) thatās going to enable both enterprise customers and individual users to upload their custom certifications to CAās platform.
I am actually working on including the āadd to LinkedInā functionality so that when users click on the corresponding card button, it will be possible for them to be redirected to the related LinkedIn profile page with all of the main certificationās details already pre-filled.
Below is the actual code snippet with the main parameters that I am using to connect to LinkedInās add to profile endpoint so as to fill out the required fields.
I sit in our kitchen/lunch area and enjoy the quick lunch I brought from home while having a nice conversation with my peers.
Today is also a very special day because weāre celebrating the birthday of a CA employee, and this means only one thingā¦.š„ free brioches for everybody! š„
This is one of my favorite traditions here at Cloud Academy, as birthdays are always properly celebrated with the right level of sweetnessĀ ;)
After the lunch break, some of us generally gather and then split into small teams to play table tennis together. Itās such a nice way to recharge before going back to coding.
Today I feel quite energized (might be the caffeine + brioche combo), and I actually win the match! šš»
Time to get back to coding. I am moving forward with the implementation of the āadd to LinkedIn profileā functionality for the certifications, and I am testing out whether the actual flow of interaction works as expected and that all of the fields are correctly being filled out whenever a user clicks on the corresponding button with the goal of showcasing a new certification on LinkedIn.
After having properly debugged and checked that everything works as it should, I proceed to open a pull request on Bitbucket and pick two front-end colleagues as reviewers so that they can give me some feedback on my work.
Providing useful and actionable feedback is definitely one of the main key points to follow when it comes to reviewing pull requests, and we all strive to be as assertive as possible whenever we write comments on other pull requests so that we can all learn something in the process.
I am now reviewing a pull review on our Design Systemās repo (i.e. Bonsai) for a new Component that is being created. I am curious to take a look at my colleagueās work, since I find it truly interesting to see how other developers tackle a certain problem from different viewpoints and to understand more about how I would have approached the same challenge.
Itās always quite interesting to analyze the pros and cons of certain types of potential solutions, and with Bonsai we are trying to stick to a reasonable balance between the need of meeting certain technical standards while remaining sufficiently close to the actual design requirements.
As an example, some of the guidelines that we are adhering to when it comes to designing new Bonsai Components are outlined in our docs page, where we have created a specific definition to differentiate between āready-to-useā components and what we have named āstylableā components.
Creating a new āready-to-useā component (we mostly use those) means that its corresponding TypeScript interface will have its basic style and corresponding functionalities already defined, so that a Developer can quickly and easily use it as it is.
Another workday has come to an end, and itās now time for me to hop on the train back to Italy š®š¹ and relax and unwind a bit.
]]>I started my first semester at Georgia Tech in January with a class in Human Computer Inter...]]>
I started my first semester at Georgia Tech in January with a class in Human Computer Interaction, and I gotta say that so far I am truly enjoying the material and how the class is structured since it makes the remote learning experience much more enjoyable.
There's a lot of writing š involved with this class as each single week we're required to write an 8 pages paper related to the course content we're learning, but I think that overall having to write this much was helpful for me in that it gave me structure and room to properly organize myself with my full-time job at Cloud Academy.
Having less time at hand paradoxically makes you value the time you have much more, and this helped me establish a good routine to take care of both HW and my daily work as a FE Engineer (also WFH is a boost in this scenario as there is no commute).
Anyhow, some of the main key takeaways from the HCI course are:
Hope you found these points somewhat helpful/insightful, and I will come back with more takeaways once the class is over in May so stay tuned for that! āØ
]]>I won't digress nor try to capture with vague and ephemeral words the global scenario that has turned so many lives upside down during these past 12 months, because it's be...]]>
I won't digress nor try to capture with vague and ephemeral words the global scenario that has turned so many lives upside down during these past 12 months, because it's been so intense and dramatic in many ways and enough words have already been spent on this.
I will just say that I truly hope that as many people as possible will be able to finally turn the page and to move on with a positive start of 2021.
This year has been incredibly intense for me too.
I graduated in March when the pandemic was hitting hard, and it was such a surreal experience to spend my graduation day at home in front of a webcam instead of celebrating it with my friends, but nonetheless I am happy that I was able to achieve this great goal of mine.
Soon after graduating I started my first official full-time job as a Front-end Software Engineer at Cloud Academy, and I gotta say it's helping me a lot to become a much better Software Developer.
Being able to actively contribute to a Design System using the latest tools & frameworks is definitely a great chance for me to think about the product from the ground-up, and collaborating with Designers to establish visual patterns & rules is rewarding and interesting.
Also, I was officially accepted as a grad student for a M.S. in Computer Science at Georgia Tech and I will be starting in a week from now!
This is so exciting for me, but I hope I can find a good work/life balance because it's gonna be pretty tough to combine two challenges of this magnitude.
I will also try to keep this blog more up-to-date, and my mission is also going to be to write a few technical blog posts on front-end related topics as well (or maybe som ML stuff?!).
Anyway, if you've read this far thank you my dear virtual friend and stay tuned for more!
ā°(*°ā½Ā°*)āÆ
]]>2019 has truly been such an eventful year for multiple reasons.
It has allowed me to grow in ways I'd have never imagined, both as Developer and more in general as an aspir...]]>
2019 has truly been such an eventful year for multiple reasons.
It has allowed me to grow in ways I'd have never imagined, both as Developer and more in general as an aspiring human being š½.
Having had a chance to visit the US again to spend three months as a UX Engineer at Mailchimp was an incredible opportunity, which I am so grateful for and that has broaden my perspective on so many topics (e.g the power of Accessibility, User-centered design, the importance of effective communication, the value of humility, the listen hard/change fast mentality) and the awesome people in my team all helped me visualize so vividly what can be achieved through hard-work ad dedication.
In 2020 I really wanna treasure and harness the power of the experiences I was able to live throughout this past year, to build new powerful resources and follow the path of creativity and personal development.
Setting very specific goals at this point could be rather counterproductive, so for now I am just gonna try to become a better version of myself and stick to this goal which is going to act as a daily reminder/ambition.
Also, if you're reading this I just wanna say thank you (and Merry Christmas!)
]]>And a simple blog post cannot capture all the magic c...]]>
And a simple blog post cannot capture all the magic concentrated in the span of 12 weeks, so I am just going to highlight a few key aspects that made this summer absolutely unforgettable.
Working with the Design System team as a UX Engineer has been such an exciting part of my journey to Atlanta, and it made me understand about how important it is to have a great sense of team work and cooperation when starting to conceptualize the building blocks of a whole new Design System.
As a matter of fact, having a clear sense of direction and a vision is not enough, as the mission of a Design System team is to standardize and make the visual elements of a User Experience fully accessible, well-documented and completely in-line with the company vision and strategy.
It is no easy task, believe me.
But thatās part and parcel of the fun of it.
Using the latest technologies and frameworks to bring to life the User Interface of a product is such a great and empowering feeling, and being able to actively contribute to the various discussions with the team and receiving feedback along the way, makes the whole process so much smoother and enjoyable.
I feel so lucky to have had this opportunity to work with such talented people, and every day felt like a whole new chapter to continue being inspired and motivated to see things grow and change.
]]>I haven't updated my blog in a while but felt it was the right ti...]]>
I haven't updated my blog in a while but felt it was the right time to publish a new post, because there is some great upcoming news in the air...
I still can't believe this is happening to me but recently I was accepted for another amazing internship program in Atlanta (GA), where I'm gonna work for the whole summer as a UX Engineer Intern with a wonderful Tech company whose mission is to empower small businesses so to make them grow and thrive in the most effective ways!
It's a 12 weeks program, and my main tasks are gonna involve the collaborationĀ with the Design System with the aim to improve internal tooling for the Design team, and to help define new patterns for the application.
I am gonna work directly with a team of engineers and designers to gain real-world experience as an engineer. It's gonna be such an exciting and wonderful opportunity for me to gain real experience as a UX Engineer, and to cooperate with brilliant people towards the realization of a product whose main goal is to improve other people's lives through their personal business vision. Wish me luck! š
]]>The Fox Magazine is a premier lifestyle publication focusing on beginnings, creativity, and risk.
Since March of 2016...]]>
The Fox Magazine is a premier lifestyle publication focusing on beginnings, creativity, and risk.
Since March of 2016, The Fox Magazine explores an original, vivid, and timeless insight into the essence of photography, travel, food, fashion, music, and technology.
The mission is to be the leading resource of inspiration for individuals wanting to chase their dreams and seek a fulfilling lifestyle.
It' gonna be such a great opportunity for me to challenge myself into pursuing something different from what I am normally used to doing (i.e. Front-End Web Development), and I am truly looking forward to cooperating withĀ journalists, scholars, photographers, musicians, travelers, chefs, and even fashion designers to bring the Fox Magazine's mission to life!
]]>It's been such a long time since my last blog post, so I felt like I had to make up for it and now here I am typing on the same old keyboard but with so many new stories to tell!
It's been such a long time since my last blog post, so I felt like I had to make up for it and now here I am typing on the same old keyboard but with so many new stories to tell!
Those past few months have been extremely hectic and intense, and the New York Internship with Adobe turned out to be such an incredible learning experience whose impact proved to be crucial from many standpoints, both professionally and humanly speaking.
I think overall I changed a lot, being on my own for three months in the bigĀ š has shaped my thoughts and ideals in ways I would have never imagined before and I feel blessed for having had this amazing opportunity.
I was able to work with an awesome team (thank you Smashers!) on many different projects, and was able to understand a lot more about BÄhance as a platform and about all the incredible efforts that are being put into such an ambitious product.
Working with such a huge codebase was kinda hard to get used to at the beginning, but everybody has been truly supportive and helpful towards me throughout this journey as a Front-End Dev Intern and so I could really enjoy the whole process (struggles included!).
I learnt about the importance of details, and how being precise and meticulous when it comes to working with a product that's being used every day by millions of users can truly make a significant difference.
In addition to that, a genuine inclination towardsĀ team-work is undoubtedly the #1 skill to have, and cooperating with all the various teams proved to be truly vital not just in terms of time efficiency but because it is the key to success for every company that wants to last.
Having shared core values to abide by in a company means that the work can be carried out more effortlessly and smoothly, and that everybody is more likely to be on the same page and happy about the way things are handled in general.
So thank you againĀ Adobe for giving me this chance to experience what it's like to work for one of the top Software companies in the world, and to feel part of something bigger, to be an active team player whose small contribution can still have a tangible impact on the user experience of millions of people.
]]>That's one interesting and nowadays perhaps too abused word which, nonetheless, represents such an important and universal concept.
What is, indeed, the essence ofĀ resilienc...]]>
That's one interesting and nowadays perhaps too abused word which, nonetheless, represents such an important and universal concept.
What is, indeed, the essence ofĀ resilience?
How could we define this word without the risk of getting stuck and superficially trapped in the many possible definitions?
Well, Psychology TodayĀ defines resilienceĀ as:
"that ineffable quality that allows some people to be knocked down by life and come back stronger than ever. Rather than letting failure overcome them and drain their resolve, they find a way to rise from the ashes".
And this at a first glance, looks like a simple yet acceptable definition.
But if we leave personalĀ experience out of this equation "resilience" becomes just a mere word, and its profound meaning wouldn't actually mean anything significant to us.
So that's why I encourage you, if you are reading this article, to isolate some of your toughest memories, those events which had a huge impact on your behavior and that eventually shaped who you were and who you feel like you are now.
Go back to those moments and try to figure out whether you let yourself down because of them and passively surrendered to your fate, or whether you actively fought and tried to find a way out of that unbearable situation.
If you didn't surrender to what life prospected and sought a true sense of purpose and willingness to move forward, then you definitely appear to be a goal-oriented, optimistic, motivated and strong individual who doesn't easily give up when faced with a stressful or annoyingly unpleasant problem.
]]>So here we go.
A lifetime dr...]]>
So here we go.
A lifetime dream. The perfect fairytale. My most common daydreaming scenario.
I am going to New York City. For real.
I've landed an internship as a Front-End Developer at Adobe,Ā and I will be working with the Behance team to contribute in the creation and delivery of beautiful and highly usable interactions in their products.
It's going to be a full-time internship from mid June till the end of August for a total of 12 weeks.
NYC has always been my dream city: ever since I was a little girl I used to virtually wander around the streets of New York using Google Maps, and hoping to one day be able to go there and experience what it feels like.
Being able to spend 3 months in NYC feels unreal: it's the fulfillment not only of a lifetime goal, but a professional achievement since during these past few years I worked hard to gain knowledge and expertise in Web Development.
]]>This is my first post. Kinda thrilling, kinda weird.
But it's the beginning of a new digital journey š¤.
And I'm happy you are actually reading these lines right now,...]]>
This is my first post. Kinda thrilling, kinda weird.
But it's the beginning of a new digital journey š¤.
And I'm happy you are actually reading these lines right now, because they represent in a sense the overall work and effort that I put into these past few years as an aspiring Web Developer.
So that's why I say Welcome! :)
Welcome to this virtual space, which I hope is going to give you an even more effective idea about my passion for Technology.
]]>And now that the day has finally come I am here in the busy Victoria Station, hurriedly walking towards the NDC venue which this year is the beautiful QEII Centre in the heart of Westminster.
Everything feels amazing, weird, and thrilling at the same time and Iām looking forward to discovering all about the latest tech gadgets and devices, as well as meeting cool people who are passionate about Technology as I am.
Iām truly excited about the upcoming React Workshop I am going to attend since itās actually one of the Front-End technologies Iāve been enjoying working on the most during the past few months, and the opportunity to learn something more about it from Jake Ginnivan is great.
This React Workshop is actually going to last for 2 days (till January 16th), which means itās going to be a complete and detailed full immersion into this powerful JS library with a clear focus on the best practices.
Here I am now staring in awe at the beautiful Westminster Abbey, which is just next to the NDC venue (i.e. the QEII Convention Centre).
The surroundings are so charming and beautiful that it almost doesnāt feel real to be in such a context for this event.
I then proceed and walk towards QEII to check in and head to the 4th floor, to the āBurnsā room (N.d.A. each room takes its name from a famous British author) where the Workshop is going to take place.
Jake is a good teacher from the beginning: he is very professional and prepared and knows everything about the React JS environment and all the best practices to make code faster and more reliable.
He gives us a mission: our task is to recreate the NDC agenda webpage using React.
Luckily, though, heās always there ready to help us when we face any problems in structuring our application and he assists us during the whole process by giving us examples and extra challenges to implementing inside the Web App.
Sir Arthur C. Clarke
Today the pace gets increasingly faster and we continue our React Workshop journey by approaching new complex concepts and topics such as "Routing", which is a practice whose aim is to better distribute the componentsā logic inside Single Page Applications and we also dive into āReduxā, which is a tool whose purpose is to allow for more solid state management.
Itās definitely challenging to catch up with so many new inputs, but Jake is always there to explain and help us understand the nitty-gritty making the process enjoyable.
React is such a very powerful JS library with impressive potential, even though the learning curve is pretty steep for those who arenāt familiar with JavaScript and its syntax.
Today is the first actual day of NDC and I am absolutely thrilled about all the upcoming talks and great people who are going to present their ideas regarding innovative topics in the realm of Technology.
37 is the number of different countries represented this year at NDC London.
The first speaker is Felienne, Assistant Professor at Delft University of Technology, whoās going to provide insights to answer the tough question:
What is programming anyway?
Her speech was truly inspirational and unconventional (sheās so funny and down-to-earth), and she talked about the ups and downs of her journey as a Ph.D. Candidate and the research she carried on regarding the conception of Spreadsheets as an actual programming tool, which even though turned out to be a failure (since she realized she wasnāt genuinely interested in pursuing this kind of project) was ultimately what led her to find her real passion.
Not only it was an engaging and motivational story, but it involved a good deal of food for thought since it aimed at re-thinking and re-shaping the functional aspect of programming with the purpose of reaching out to people who could feel intimidated by it if we were to stick to the narrow perspective of Software Development as a mere tool for an elite of gifted people.
Thatās why Felienne made it her mission to overturn this clichĆ© of programming as a branch of pure application of logic and technical rigidity to solve complex problems.
She is helping children all over the world to learn programming (using the MIT open source language Scratch) in a fun and intuitive way so that they can all begin to familiarize themselves with the tools in a more playful way but with an eye on the structure and reusability of the various programming blocks to optimize the simple logic behind them.
Felienneās speech lightened up a whole new and refreshing perspective for me since I can really relate to the feeling of being overwhelmed and not feeling like programming is a good choice, (Iāve always struggled with Maths myself and never been really good at it) and the idea of re-defining this conception, and to realize that multiple types of intelligence can actually take advantage of programming in different ways was enlightening.
So thank you Felienne, itās **empowering** to be able to finally break those barriers and know that it is possible to actively contribute to the Tech Industry in many ways without having to constrain ourselves into a specific role.
The day moves on pretty fast and since we only have a 20min time window between any two conferences, itās vital to properly manage your time and find out which cool topics are the ones youād like to hear more about...
The **food** is insanely **delicious** though, and with every break, we are welcomed with some tasty dishes and sweet treats (each day 6 different menu choices representing a different country are available)!
Later on, I then proceed to attend the next talks and listen to Brock Allen (.NET, Web Dev & Security Expert) and Dominick Baier (Identity & Access Control Consultant) speaking about Implementing Authorization in Web Applications & APIs.
They explore patterns, and anti-patterns and provide solutions to possible exploitable techniques on the topic of Authorization and get into the details with great precision.
So I am then surprised by the āPower of Compositionā thanks to a great speech by Scott Walschin, who has just finished writing a new book about the elegance and practicality of Functional Programming using F#.
But the day is not over yet and in the afternoon I am able to explore the concept of āImmutabilityā applied to Programming thanks to Kevlin Henney, who delivers a great speech about how to **reduce state mutability** in code and why this is so important.
She brought up interesting examples from her personal experience (how she perceived herself as a student and how she consequently interacted with the people around her) and also explained how empathy and soft skills are vital aspects of any aspiring teacher.
But this evening NDC doesnāt simply end with the last conference because an amazing cruise on the River Thames has been organized, which involves both the NDC participants and all the speakers.
Now that I look back on it I realize itās actually been one of the most incredible nights Iāve ever had: spending a few hours cruising on a boat on the Thames and being able to admire London during night-time with all of its vibrant lights and all of the modern and ancient buildings is the scenario for memorable moments.
On top of that, being able to connect with different people and hear about their stories and experiences in such a context revealed to be even more unique and was the perfect conclusion for a special day like this one.
## Day 4
Today is the second official day of NDC London and many inspiring talks are scheduled for the day.
We start off with a very inspiring talk by **Alex Ellis** and Scott Hanselman who perform a live demonstration on stage about how to build a Raspberry Pi Kubernetes Cluster running .NET Core.
They provide a detailed explanation of how they managed to build such a sophisticated and fully functional real server using only a stack of six Raspberry Pis piled each on top of the other.
The whole audience is wildly entertained and engaged by the talk, since being able to admire the effort and sophistication put into the realization of such a piece of Technology with a budget of less than 300\$ is undoubtedly phenomenal.
After the talk, everybody is eager to try and build their own Raspberry PI cluster server (myself included since I own one but never figured out how to effectively use it!), and we immediately start googling every resource related to this project and to Open Faas (Alex Ellis is its creator).
Open Faas is indeed a framework for building serverless functions on top of containers (its GitHub repo has 8394 stars), and during the speech, we were introduced to its various functionalities and to the whole environment needed to set it up.
Next up is **Kesha Williams**, Full-stack Software Developer and Inventor of SAM (aĀ predictive policing machine learning algorithm inspired by Minority Report that predicts the likelihood of crime).
She introduces us to the project by explaining how Minority Report (her favorite movie ever)Ā gave her the right inspiration and determination to create such a sophisticated product, which is capable of detecting the likelihood of crime using data imported from the Georgia Police Department.
With just a simple tweet SAM (n.d. A Suspicious Activity Monitoring) is able to predict whether the person captured by the image sent with the tweet is likely to be a potential criminal.
It uses AI to analyze the photo and processes it to find facial features which relate to suspicious traits in a target individual.
Needless to say that this proves to be a very inspiring talk, thanks to the in-depth explanation of the SAM case study and all the tools Kesha used to build it (it relies on AWS and uses Python for the algorithmic predictive model).
During the afternoon I was very curious to attend the talk āHack Your Careerā by **Troy Hunt**, who talked about his life experience as a Software Developer and about the choices he made that eventually led him to become a successful entrepreneur (he is a well-known for the popular tool āHave I been pawned?ā, and for sharing his knowledge about Security both with his Pluralsight courses and blog posts).
He gave some clever insights about the best strategies to follow in order to have a successful and meaningful career (e.g. the importance of branding oneself, the creation of value, and leadership), one whose aim is to positively impact the world by sharing knowledge and being persistent to ambitious goals.
The afternoon proceeds as usual with a rapid pace and Machine Learning is the topic I am able to learn about thanks to Tess Ferrandez-Norlander, a brilliant developer from Microsoft who introduces the topic of ML and its incredible implications in todayās world.
The last speech of the day is given by Sam Aaron, the creator of Sonic Pi, which is a great coding-based Music software (written using Ruby) whose ease of use makes it accessible to anybody who is interested in building original music tracks even if theyāre lacking programming skills.
He performs an amazingly entertaining live demonstration about how the software works, and how to mix the various sounds and effects in order to produce and compose a pleasing symphony.
One of the best aspects of this product is that itās actually completely free (I downloaded it straight after the conference!)
This evening the NDC Party concludes such an intense day of technical presentations on a lively and sparkly note, which invades the whole QEII center making a wonderful atmosphere.
I canāt believe itās already almost over.
Time went by so quickly that I just didnāt realize that today is the last day Iāll be spending here at the QEII center, in the heart of beautiful Westminster.
The atmosphere, the great people Iāve met, the speakers, the countless start-up stands, the delicious food, and the common passion for innovation and technology all make for a unique combination of elements.
A pure and vibrant interconnected space where everything seemed to be possible and indeed, it has been possible for me to experience all of this thanks to Keyzoās NCW Competition.
During his talk named āWeb Apps canāt really do that, can they?ā, Steve Sanderson shows how he was able to create a fully functional environment that runs pure C# code directly in the browser with almost no lags nor latencies.
This incredible live demonstration leaves everybody in awe since no such thing ever seemed to be remotely possible due to the nature of C# as a language (and its intrinsic complexity), and the many quirks coming from the nature of JavaScriptās behavior in the browser (a language which splits Developers in a love/hate relationship).
It definitely looks like a very promising project which I hope is going to be further enhanced since it could potentially open up a whole new horizon for the world of Software Development.
But our final day at NDC isnāt over yet and so we move on with the first-afternoon talk which is a nice co-hosted Q&A session with Troy Hunt, Felienne, Jon Skeet, and Scott Hanselman who share their opinions and thoughts about many subjects related to the world of Technology in its many forms and answer questions from the crowd.
Theyāre all very down-to-earth and attuned to the audience and so they manage to give insightful and witty remarks concerning controversial topics which usually cause a lot of arguing in the Tech community (e.g. Ethics & Professionalism in Computer Science, how to handle behavioral and business problems and difficult situations).
Next up is a very original and inspiring talk (Mƶtley Crüe and Mƶdern JavaScript) by Eric Brandes whoās a JavaScript expert with very solid and wide knowledge about the JS environment and its latest trends and front-end libraries.
Thatās why in his talk he explicitly addresses some of the most common misconceptions about JavaScript as a language and also unravels the truth about the countless new JS frameworks which have been popping up lately that in his view have only contributed to causing even more confusion in the whole Web Development scene.
To make his point even clearer he adopts some really cool metaphors inspired by images from famous Heavy Metal bands and showcases the actual āwinnersā and ālosersā in the JS world in a funny and engaging way.
Last but not least is the talk by Marcin Moskala and Igor Wojda about Kotlin, a language that has lately been gaining so much popularity in the Programming world and which is considered the next Android language.
I was very curious to have an overview of the main features and the general syntax of Kotlin as a programming language, and I have to say that this talk exceeded my expectations in that it covered many more topics (some very advanced ones!) than I had imagined.
What a weird feeling now as I am walking away from Room 4, where the last talk has just taken place.
It is actually hard to finally say Goodbye and leave QEII after having spent some memorable days in such an amazing place.
As I walk past the door and go out of the building headed to St. Jamesā Park station, I canāt help but recollect all the fresh memories coming from these past few days and itās wonderful to realize how they make into a perfect ācollageā made of emotions, thoughts, images, considerations and inspirational words.
Thatās the reason why I say **thank you**.
Thank you Keyzo for giving me this opportunity.
Itās been extraordinary and I will never forget how impactful this experience has been for me, and how it contributed to motivating me, even more, to pursue a career in the world of Technology.
]]>