code review, what it is and why it matters

For my first blog post for CS-348 and in general (in terms of actual content), I wanted to look into code review. I already had an inkling as to what it could entail, but I wanted to know what sorts of techniques and tools are used in looking over our peers’ (and our own) code.

For this blog post, I consulted a post on SmartBear to get a better understanding of it all. The post establishes reasoning for why we need code review so that we can overall reduce the excess workload and costs that can be caused by unreviewed code being pushed through. The post also gives us 4 common approaches to code review in the current day (which is noted to have been very much improved from methods found in the past). These approaches are email threads, pair programming, over-the-shoulder code review, and tool-assisted reviews.

An email thread provides advantages in versatility but sacrifices the ease of communicating that you get in person. Pair programming is the practice of working on the same code at the same time, which is great for mentoring and reviewing at the same time as coding, but doesn’t give the same objectivity as other methods. Of course, over-the-shoulder reviews are simply having a colleague look over your code at your desk, which while fruitful, doesn’t provide as much documentation as other methods. Lastly, tool-assisted reviews are also straightforward, utilizing software to assist with code review.

The SmartBear post goes on to say that tracking code reviews and gathering metrics helps improve the process overall, and should not be skimped out on. Some empirical facts from Cisco’s code review process in 2005 are given as well. According to an analysis of it, code reviews should cover 200 lines of code or less, and reviews should take an hour or less for optimal results. Some other points are given as well if you visit the post.

Considering most of my ‘career’ has been independent coding (that is, coding as the sole contributor), this was rather interesting to me. I’ve done code reviews for my peers, helping them with assignments and the like, while I’ve only really utilized tools and software to assist myself. It’s interesting to see how something as simple as looking over someone’s code on their computer is such an important step in the software development process, but it certainly makes sense. I also wonder how much the code review process has changed since the popularization of AI companions such as ChatGPT and Github’s Co-Pilot. Perhaps these tools have made code review with our peers less important, but I wonder if it’s more important to have our peers second-guess the AI’s suggestions in case of mistakes. Nonetheless, having a solid grounding of the actual ramifications of code review will prove very useful during my programming career, I am sure.

From the blog CS@Worcester – V's CompSCi Blog by V and used with permission of the author. All other rights reserved by the author.

My JavaScript Journey: Building a Simple To-Do List

Hey fellow tech enthusiasts! Today, I want to share my journey of diving into the world of JavaScript. As a computer science major in college, I’ve always been fascinated by programming languages, and JavaScript seemed like the next logical step in my coding adventure.

The JavaScript Bug Bites

It all started when I realized the immense power JavaScript holds in the realm of web development. From interactive websites to web applications, JavaScript seemed to be the backbone of modern front-end development. So, armed with my trusty coding setup and a burning curiosity, I embarked on this journey.

The Learning Curve

JavaScript was not my first programming language, but I quickly realized it had its unique quirks and challenges. The asynchronous nature of JavaScript and the various frameworks and libraries can be overwhelming at first. But hey, what’s a journey without a few bumps in the road, right?

I decided to start with the basics. I found some fantastic resources online that provided structured lessons and hands-on coding exercises. These resources made it easier for me to grasp the fundamentals, from variables and data types to loops and conditional statements.

My First Project: The To-Do List

To put my newfound knowledge to the test, I decided to create a simple yet practical project: a to-do list web application. It seemed like a fun way to apply what I’d learned and build something useful.

Here are the key features I implemented in my to-do list:

  1. Adding Tasks: Users can add new tasks to the list with a title and description.
  2. Marking as Complete: Tasks can be marked as complete with a single click.
  3. Deleting Tasks: Completed or unnecessary tasks can be removed from the list.
  4. Local Storage: I used JavaScript’s local storage to store the to-do list data, so it persists even after refreshing the page.

The Challenges and Triumphs

Building the to-do list wasn’t without its challenges. I encountered a fair share of bugs and quirks along the way. For instance, handling user input validation and ensuring smooth data storage required some debugging and problem-solving. But every bug fixed was a lesson learned.

One of the most satisfying moments was when I saw my to-do list project come to life in the browser. It was incredible to witness how a few lines of code could create a functional web application.

The Future of My JavaScript Journey

My journey with JavaScript is far from over. I’m eager to explore more advanced topics like asynchronous programming, working with APIs, and perhaps even diving into front-end frameworks like React or Vue.js. There’s always something new to learn in the ever-evolving world of web development.

So, if you’re a fellow student or aspiring developer, don’t be afraid to take the plunge into JavaScript. Embrace the challenges, celebrate the victories, and keep coding. Who knows? Your next project might just be the next big thing on the web!

Happy coding, everyone! ??

From the blog CS-343 – Hieu Tran Blog by Trung Hiếu and used with permission of the author. All other rights reserved by the author.

Learning PlantUML

This week, I found myself grappling with the fundamentals of PlantUML, a versatile language that allows the user to quickly create code diagrams. My encounter with this tool was prompted by a task that required me to construct a diagram for a Java program. To help myself get ready for this project, I decided to delve into some reading on the subject, and that’s where I found this weeks blog.

“The .NET Tools Blog,” more specifically, their comprehensive entry on PlantUML diagrams, available at https://blog.jetbrains.com/dotnet/2020/10/06/create-uml-diagrams-using-plantuml/, was a great resource in my learning on plantUML. This blog post, tailored to beginners like myself, served as an excellent starting point for comprehending the intricacies of PlantUML and its best practices. While it isn’t an exhaustive guide, it offers valuable insights and practical code examples that helped me feel much more comfortable using this tool. This directly relates to the courses content as our current homework assignment revolves entirely around understanding plantUML. I will definitely keep this on hand to refer back to until I get more comfortable with the basic syntax of the language plantUML

I wholeheartedly recommend this resource to anyone embarking on their PlantUML journey. The provided class diagram examples not only facilitate a smooth onboarding process but also serve as a foundation for crafting more intricate and detailed diagrams. The blog post also delves into PlantUML “use cases,” a facet I had yet to explore. These use cases appear to be an effective means of illustrating the interactions between users and the software, potentially serving as a valuable tool for communicating a program’s functionality to clients or customers who may not be well-versed in deciphering traditional blueprint-style diagrams.

As for practical applications of this information, as I was saying before these diagrams can be helpful to expain the overall structure and function of code to someone who might not understand a more complex explination. This is not the only application however. You could also apply plantUML to help plan a complex program before starting your programming. Even experienced developers would benefit from a tool to help quickly make a diagram that would let them see the structure of a program without any actual coding or debugging.

In conclusion, “The .NET Tools Blog” has proved to be an invaluable resource for beginners seeking to grasp the essentials of PlantUML. As I continue my journey of using with this language, I anticipate returning to this resource for further guidance on creating readable and informative code diagrams.

From the blog CS@Worcester – Site Title by Abraham Passmore and used with permission of the author. All other rights reserved by the author.

Week of September 18, 2023

This week, I wanted to make a post showcasing some examples of documentation for free, open source software. Comprehensive documentation is essential for any software project, so I want to see what useful documentation looks like. I was inspired to make this post when I found myself in need of a new podcast app for my Android device. The one I had been using was no longer refreshing my subscribed podcasts when I opened the app, and I wasn’t able to load the episode lists of any shows. I needed a new podcast app, but I didn’t immediately want to download the Google Podcasts app that was at the top of the search results on their Play Store. I understand Google collects user telemetry and data from their apps, and I didn’t want Google to connect advertising data to my account from the ads many podcasts read from their sponsors. Ideally, I wanted a free and open source app I could use so I could feel more secure in my data privacy.

From Opensource.com, the definition of open source software is “software with source code that anyone can inspect, modify, and enhance.” Many open source projects are supported by communities of volunteers connected over the Internet. The benefits of open source software include stability over time, meaning that because the project can be maintained indefinitely by anyone, the software may remain compatible with modern systems for a longer time than closed source software. Open source software also promotes security for end users. Since the software’s source code is openly accessible, there is a greater chance that undesirable code is deleted or corrected once discovered.

Large-scale projects that require collaboration are supported by extensive documentation for end users. The example I mentioned earlier, AntennaPod, has a simple-to-navigate documentation page that begins with the basic act of subscribing to a podcast, and ends with instructions for podcast creators on how to have their podcast listed on the app through the use of existing podcast dictionaries. One interesting section I found was an explanation of centralized versus distributed podcast apps. Centralized apps are always in communication with a central server, and content is delivered from that server to your device. In contrast, distributed apps send requests to the podcast publishers directly, and do not contact a central server. This approach allows the developers of the app to devote more resources to maintaining and iterating on the app, instead of maintaining a server. Distributed apps are also a protection for user privacy, as there is no interaction with any central server to provide an opportunity to collect user data. The app developers don’t have access to information like which users are subscribed to which shows either. This decentralized, distributed approach also helps protect against censorship, because there are multiple sources to download shows from instead of one central server owned by one entity. Likewise, the app will continue to function even if development ceases, where in contrast a central app will stop functioning if the central server shuts down.

Sources:

From the blog CS@Worcester – Michael's Programming Blog by mikesprogrammingblog and used with permission of the author. All other rights reserved by the author.

Learning Git

Mastering Git: Navigating the World of Version Control

As someone deeply immersed in the world of coding and development, I often find myself seeking the latest insights and innovations to stay ahead in this dynamic field. Recently, I had the opportunity to explore the GitHub Blog (https://github.blog/), a treasure trove of information that offers a glimpse into the exciting developments in code collaboration. GitHub, a cornerstone of the coding community, continuously adapts to cater to the ever-changing needs of developers worldwide.
The GitHub Blog, in this context, serves as my primary source of knowledge, delivering timely updates, tutorials, and in-depth insights into the platform’s newest tools and features. These innovations significantly boost productivity and code quality, making my coding journey smoother and more efficient. What truly stands out, though, is how GitHub is fostering a culture of open-source contributions and building inclusive communities.
I encourage you to delve into this blog and embark on your own journey of discovery in the ever-evolving realm of code collaboration. I chose the GitHub Blog as my go-to resource for several compelling reasons. Firstly, it consistently offers a pulse on the rapidly evolving landscape of code collaboration. This blog not only keeps me informed but also inspires me to be part of a larger, positive change within the coding community.

Having explored the GitHub Blog, I’d like to share my thoughts on the content and how it has impacted my perspective as a student in the field of computer science. This resource has been an invaluable source of knowledge for me, primarily due to its dynamic and up-to-date nature.

As a student, staying informed about the latest developments in technology is crucial to my education and future career. The GitHub Blog has proven to be a goldmine of information in this regard. I’ve learned about cutting-edge tools like GitHub Actions and GitHub Copilot, which have the potential to revolutionize the way code is written and managed. This exposure has not only broadened my understanding of these tools but also inspired me to explore them further in my coursework and personal projects.

Beyond the technical aspects, the blog’s emphasis on open-source contributions and inclusivity within the coding community has left a lasting impact on me. It has reinforced the importance of collaboration, diversity, and community engagement in the tech world. Studying for CS, I now see the significance of not just acquiring technical skills but also contributing to the greater good by participating in open-source projects and fostering an inclusive environment for all.

In my future practice as a computer scientist, I plan to apply what I’ve learned from the GitHub Blog in multiple ways. Firstly, I’ll integrate the knowledge of GitHub Actions and GitHub Copilot into my coding projects to boost efficiency and code quality. Additionally, I’m motivated to actively engage in open-source initiatives, leveraging the collaborative spirit and sense of community that the blog has instilled in me. I believe that by embracing these principles and tools, I can become a more effective and socially responsible developer.

From the blog CS@Worcester – Site Title by asejdi and used with permission of the author. All other rights reserved by the author.

AHK as a Developer Tool

AutoHotKey Scripting Software

AutoHotkey (AHK) is a powerful and versatile free, open source software and scripting language for Windows operating systems exclusively. It provides an environment where users can create custom scripts to automate repetitive and/or menial tasks, create custom GUI’s, manipulate windows, files and applications, and create custom hotkeys, macros, and key-rebinds. Users can quickly create and tailor scripts toward specific tasks they face to significantly improve their overall efficiency and minimize errors. In essence, AHK can be used to automate and otherwise enhance users’ ability to perform software development and other processes from start to finish.

Upon downloading AHK, the main Dashboard GUI has several useful features to help users get started and in general as they create scripts, including a compiler, link to Help Files, Settings, and a Window Spy tool to extract application window data. Using Window Spy, users can easily identify and access a window’s “ahk id” to hook into and directly input to that window using AHK methods, such as ControlClick, which sends mouse inputs to a given client at a specified x-y mouse coordinate. Conveniently, the Window Spy tool also provides functionality to easily identify the on-screen/client x-y coordinates of a given mouse position. There are similar functions for directly inputting strings (rather than clicks).

One of the most intriguing features of AHK which led me to pursue learning it on a deeper level is its capacity to directly interact with application client windows and any separate application GUI’s (including mouse and key inputs, minimizing/maximizing, setting window focus, and more) without focusing on them and interrupting other active processes. This is extremely beneficial for testing, data collection/recording and more – for example testing may be run in the background with the results recorded to an output file whilst the user is actively working on other tasks independently. Furthermore, AHK scripts can easily be set to repeat at a specified time period; the previously mentioned background testing/recording can be called upon to execute every X minutes with zero input from the user or interference on their tasks. Increased convenience and efficiency with less human error or interaction!

Some other functions in AHK which I have read or seen videos about and hope to start implementing soon include PixelSearch and ImageSearch. PixelSearch is a versatile tool of the form: 

PixelSearch, &OutputVarX, &OutputVarY, X1, Y1, X2, Y2, ColorID , Variation

Searching for a specified hexadecimal ColorID within the specified screen space and returning output variables containing the coordinates of the first found pixel of that color. The outputs can easily then be used in other functions, and this method synergizes well with other tools that may identify certain occurrences with a color highlight or other marker. The ImageSearch function works similarly, but takes an Image input (easily generated with the Window Spy tool) and searches for an occurrence of the input within the search coordinate range. An interesting component of both PixelSearch and ImageSearch is the Variation parameter visible above near the end of the PixelSearch skeleton. This variable allows variance in the color/image which is being searched for to increase the likelihood of finding the target even if minor screen/image shifts have occurred, which can be common depending on the application or instance.

There are countless other features and functions in AHK which I have not yet gotten a chance to learn about. If you or a friend/colleague have experience with AHK functions, feel free to reach out with questions/discussion/advice to my email at jelbirt@worcester.edu !

Information/Source Links:

Post discussing use of AHK for coding: https://python.plainenglish.io/coding-faster-with-autohotkey-453a2face9af
AHK Home site: https://www.autohotkey.com/
AHK Method Documentation –
ControlSend: https://www.autohotkey.com/docs/v2/lib/ControlSend.htm
ControlClick: https://www.autohotkey.com/docs/v2/lib/ControlClick.htm
PixelSearch: https://www.autohotkey.com/docs/v2/lib/PixelSearch.htm
ImageSearch: https://www.autohotkey.com/docs/v2/lib/ImageSearch.htm

From the blog CS@Worcester – Tech. Worth Talking About by jelbirt and used with permission of the author. All other rights reserved by the author.

Cs-348, Cs @ Worcester Week 2

Normal 0 false false false EN-US X-NONE X-NONE

 

The contents that I have been learning in week 2 are git, GitHub and FOSS communities. First, we focused on FOSS communities, git and GitHub work together to allow this communities to share their work. We also have focus on working in your local repository using branches and commits and then upstreaming your changes using a pull request. Then we learned how to keep the local and origin repositories synchronized with the project’s upstream repo.

I found this blog giving the general definition about the upstream which relates to a content that I have learned in CS-348 class this week.

URL:
https://www.redhat.com/en/blog/what-open-source-upstream

In this blog, they talk about what an upstream is, how it relates to enterprise open-source products, and how they matter to your organization.

What is an upstream?
Upstream refers to the flow of data within information technology, particularly
in open-source projects. It serves as the precursor to other projects and
products, with contributions flowing from upstream to downstream. Users may
receive releases or code directly from the upstream. So, why are upstreams
important?
They are important because that’s where the source contribution comes from.
Each upstream is unique, but generally the upstream is where decisions are
made, the contribution happens, and where the community for a project comes
together to collaborate for the benefit of all parties. Work done at the
upstream might flow out to many other open source projects. The upstream is the
focal point where collaborators do the work. It is so much better if all the
contributors work together.

 

From the blog CS@Worcester – Hong Huynh-CS348-WSU by hhuynh3 and used with permission of the author. All other rights reserved by the author.

How Progressive Web Apps Can Reshape How We Think of Web Apps

If we were to try to categorize all software applications into two groups (a bit of an ambitious task, but bear with me), we could separate them into apps that are platform-specific and natively-installed, such as apps downloaded from an app store onto a smartphone; as well as web-based apps, which run through a web browser. In the past, the majority of all applications can fall neatly into either category, each with it’s own advantages and disadvantages.

Historically, the most capable applications are those directly installed onto the user’s device. They can make use of the full use of system hardware, can launch regardless of internet connection, are more robust and reliable, directly read and write data stored on the device, and are their own platform. Native apps like Spotify, Waze, as well as more platform specific apps like iMessage, have the feeling of directly being part of their respective devices.

This is in contrast to web-based applications, which trade the capability and reliability of native apps for a design that is meant to be accessible to anyone, at any time, from any platform. Additionally, web applications have the advantage of only needing one codebase, as the only platform they must have compatibility with is just a web browser. While a developer of a native app may be able to create a more powerful and capable product, they must design and implement compatibility with each type of platform they want to run on. For example, the navigation app Waze must have compatible versions for iOS, Android OS, as well as other available operating systems.

This is now beginning to change, as Progressive Web Apps (PWA) have exploded into the field and promise to bridge the gap between platform-specific apps and web-based apps. Built using modern APIs, PWAs are able to fully realize their capabilities to the level of native apps, while still maintaining the reach and accessibility of web apps.

Authors Sam Richard and Pete LePage hit on the “best-of-both-worlds” abilities provided by PWAs in their article, What are Progressive Web Apps? “Progressive Web Apps are web applications that have been designed to be capable, reliable, and installable. These three pillars transform them into an experience that feels like a platform-specific application.”

While many different aspects of a developed application can be assessed and critiqued, the most important attribute of any app is the end-user experience. In other words, Is my app easy to use? Does it have all the features the user would need? Is it easily accessible? Reliable?

Progressive Web Apps cover all of these bases, and more. With the ease-of-access as a website and the capabilities of a native app, these new apps have the potential to reimagine how we think of web-based applications. While still a growing field, I believe the inherent ease-of-use provided by this platform will lead it to becoming a new standard for many different fields of application development.

From the blog Butler Software Construction, Design, and Architecture by Griffin Butler and used with permission of the author. All other rights reserved by the author.

First Post

Hello World! This is the first of hopefully many posts here… As a CS student I was tasked on making a weekly blog regarding my progress throughout the semester as I learn more stuff about software design through the course lectures, podcasts, and articles I find across my stay at WSU. I think this journal is a great idea. One thing I remember from a previous psychology course is that writing things down is a great memory reinforcement tool so hopefully whatever I jot down here I will be able to recall when I need it the most, not only that but I think that making this blogging thing a weekly habit will help me be more consistent on my extracurricular projects, because I must admit that I tend to neglect past projects whenever I start a new one, which happens often on a whim. This is the main reason why I added an archive, and made public a list of personal projects, so that in essence I am hanging my work on the wall ready for everyone to see, regardless if anybody actually sees it or not, the peer pressure I get from posting unfinished ideas will entice me to put more effort and love into them so that they stop being merely just ideas and become a finished product instead. Even if the quality leaves more to be desired, I must learn to finish what I start! So, in a sense, if this blog helps me be more consistent with my schoolwork as well as my personal projects, I would consider it a huge success. But I don’t want to stop just there.

I aspire to be a software developer one day, doing what exactly I am not entirely sure, but if there is any constant among every respectable professional out there is they all have some sort of journal that they share and discuss their findings as they develop new tools and design features for their projects (just like this school project!). Collaboration is a big part of this career, programmers borrow and share code all the time, so I think it’s fair play that we also share concepts and anecdotes with each other too. My goal with this website therefore is to join the cool kids club and write stuff down not only for me but for anyone that’s following my steps, of course there is not much to tell right now but who knows when it might prove useful one day.

I’ll stop daydreaming for now and get started

From the blog CS@Worcester – Andres Ovalles by ergonutt and used with permission of the author. All other rights reserved by the author.

My First Blog!

Hello. My name is Aidan Noone and I am currently a junior at Worcester State University. I am pursuing a bachelor’s degree in computer science, and I look forward to updating this blog with new posts in the near future.

From the blog CS@Worcester – CS Blogs with Aidan by anoone234 and used with permission of the author. All other rights reserved by the author.