Thursday, October 19, 2023

A Newbie's Guide to Algorithmic Design and Data Structure Techniques

 Introduction:

Hey fellow class mates! Embarking on the journey of understanding algorithms and data structures can seem daunting. But fear not! I'm here to break down the basics of algorithmic design and the importance of data structures in structured programming.


Algorithmic Design - What is it?

At its core, an algorithm is a step-by-step procedure to solve a problem. Think of it like a recipe in a cookbook: it gives you a list of ingredients (inputs) and then provides instructions (processes) on how to make a dish (output). Algorithmic design is all about crafting these 'recipes' to solve computational problems.


Data Structures - The Storage Units:

Imagine you’re cooking and you have no shelves, racks, or storage units to place your ingredients. Chaotic, right? Data structures are like these storage units. They allow us to organize, manage, and store data in a way that enables efficient access and modification.


Are Some Algorithms and Data Structures Better Than Others?

Absolutely! Depending on the problem you're trying to solve, some algorithms and data structures are more efficient than others.


For instance, let's talk about searching for a book in a library. One approach (algorithm) might be to go through each shelf and book one by one until you find it – this is called a linear search. But if the books are sorted by title, you could use a binary search where you start in the middle and eliminate half the remaining books with each step. Clearly, the latter is faster in this scenario!


Regarding data structures: A simple list might be great if you're just storing a collection of items. But if you need to ensure items are unique or you want to quickly check if an item is in the collection, a set or a hash map would be a better choice.


Applying Algorithmic Design and Data Structure Techniques:

When developing structured programs:


Understand the Problem: Before diving into code, ensure you thoroughly understand the problem you're trying to solve. What are the inputs and outputs? What's the desired outcome?


Choose the Right Data Structure: Depending on your needs (e.g., fast lookups, order preservation, or efficient inserts/deletes), select the best data structure.


Design the Algorithm: Plan your 'recipe'. Whether it's sorting, searching, or any other operation, outline the steps needed.


Optimize: Once you have a working solution, think about optimization. Can it run faster? Can it use less memory?


Test: Always test your algorithms with different data sets to ensure they work as expected.


Conclusion:

Remember, the key to successful algorithmic design and using data structures effectively is practice. The more problems you tackle, the better you'll get at deciding which methods and structures to use. And always keep in mind: there's often more than one way to solve a problem, but some ways are definitely more efficient than others!


Keep coding, and embrace the journey of continuous learning!

Thursday, September 21, 2023

Diving into Java & Object-Oriented Programming: From a Beginner

 Hey there, 

If you've clicked on this post, you're probably either curious about Java, object-oriented programming, or both. As someone who's recently ventured into this world, I thought I'd share some insights from my newbie perspective. Let's dive in!


Installing Java: A Quick Note

Before we get into the nitty-gritty of OOP and Java, a quick word on Java installation. If you're like me, the idea of setting up a new software environment might sound daunting. But fear not! While I won't go step-by-step here (I did that in this week's discussion, and trust me, it's quite a tale!), I do have a few resources that made my journey smoother:


Java Installation Guide: Oracle's Official Documentation is quite comprehensive.

Hello World in Java: Want to see your first Java program come to life? Check out this beginner friendly tutorial.

 https://www.javatpoint.com/java-tutorial.

The Two Major Steps

Downloading the Right Version:


Java has had many versions over the years. For beginners, it's typically recommended to start with the latest stable version, as it comes with all the recent features and security patches. You can download it from Oracle's Official Website. Make sure to choose the version that matches your operating system (Windows, Mac, Linux).


Setting Up the Environment:


Once downloaded, it's not just about clicking 'next' on the installer. You'll need to set up something called the JAVA_HOME environment variable. This step ensures that your system knows where Java is located. It might sound a bit techy, but trust me, with the right guide, it's a breeze.


What is Object-Oriented Programming (OOP)?

Now, onto the main event: OOP. At its core, OOP is a programming paradigm that uses "objects" to design and structure your code. Think of objects as tiny virtual "things" that hold both data and ways to manipulate that data.


Key Concepts of OOP

Classes and Objects: A class is like a blueprint, and objects are instances of that blueprint. If a class is a "Car" blueprint, an object would be a specific car, like a "Red Toyota Camry".


Encapsulation: This means bundling data (attributes) and methods (functions) that operate on the data into a single unit. It's like having a box (an object) and ensuring that no one can see or touch what's inside unless they use a specific key (methods).


Inheritance: This is where a new class can inherit properties and behaviors (methods) from an existing class. It's like how kids inherit traits from their parents.


Polymorphism: A fancy word that essentially means one interface, multiple methods. It allows objects of different classes to be treated as objects of a common superclass. Imagine if every electronic device had a universal "on" button – that's the essence of polymorphism.


Abstraction: This involves hiding complex implementation details and showing only the essentials. Think of it as looking at a complicated machine and only seeing a few buttons to operate it, not the intricate gears inside.


Why Java & OOP?

Java is one of the most popular OOP languages out there. It's versatile, widely-used, and has a rich ecosystem. Plus, Java's "Write Once, Run Anywhere" philosophy makes it a go-to choice for many developers.


For someone like me, a newbie, Java offers a structured way to grasp OOP concepts. The clear syntax, extensive community support, and practical applications in the real world make it an excellent starting point.


Wrapping Up

I hope this post shed some light on the world of Java and OOP from a beginner's perspective. 

Until next time!

Monday, July 5, 2021

 Tech Topic Connection - History and future of computers

Abraham A. RiveraCorral

INT 100 Fundamentals of Information Technology & Literacy

David Stibbards

July 5, 2021

My chosen topic, History and future of computers, connects with the fundamentals of this information technology course by providing and looking into the history of how computers first were created, and by studying that history experts can predict where computers are headed. 

The history and future of computing is in itself that concept of information technology, it is meant to teach us the means by where computers came from, the reason they were built and how they have changed society as a whole. Without understanding the past and how computers were first made it would be difficult for one to predict where the technology might take us. Understanding the fundamentals of computing, the ones and zeros, once can better understand how computers work, as those fundamentals have not changed much. The course text states that computers originated from telephone switchers in the early 1900’s. Having electricity running through a switch that is in the on or off position, the one and zero, determines where the electricity runs through, that in turn makes the switch complete and action. This action alongside the advancement of smaller and smaller transistors has allowed computers to become tiny, having computers the size of a person's hand be vastly more powerful than the room sized computers of the early days.

My chosen topic relies on the major hardware components and functions of a modern computer system by using it as an example of the advancements made since the first computers. By comparing modern systems with the first computers made one can graph out the advancement of transistor sizes, power consumption and processing power computers have gained through the decades. According to the IEEE the number of transistors in a system has increased 10 to the 7th power since 1970, this puts the growth into perspective as it can give us a prediction to the future of computing.

My chosen topic uses programming languages and program execution methods as a way to determine if computers are advancing. For example if a program is made to stress test a computer that is several years old and it is also run on a computer that is newer it can show how newer components have advanced in those few years. By the program running smoother, faster or more efficiently it can show the advancement. I can relate to this as every few years I build or buy a computer with a comparable price range of the previous one at the time, yet when I do benchmarks on my new computer it scores higher in processing power, core clocks and power efficiency. Computers can use different types of programming languages, though history those languages have changed, from early computers using Regional Assembly Language and Autocode to newer ones like Swift and Type Script, these languages allow computers to run the zeros and ones to complete the desired actions of that computer. These languages can be used to compare computers from the past and the present allowing experts to make predictions on computing languages in the future bringing us back to the history and future of computers.

Application software through history has been dependent on the programming language and hardware a system has. As computers have evolved, so has the software, early switchboard computers did not use software whereas modern computers use software in its entirety to be able to complete tasks. Application software has to be coded for that specific system and hardware. For example application software that is made for mobile systems might not run on computers unless an emulator is used. Natively the application software will not run unless the operating system is the correct one. 

My topic relates to database and database management as the history and future of computing has helped those creating databases understand how information is stored and handled. From early databases like Integrated Data Storage to more modern ones that users can create with the help of software one can see the change and the possibilities that a company or user can do. This, like the other instances, can help professionals create databases with the fundamentals of the previous ones, knowing the history of databases and how simple they can be made to how complex can help create more efficient ones.

Concepts of network architecture, management, and security influence my chosen topic because without understanding the history of those topics the same mistakes can be made again allowing for the exploitation and malice towards computers and networks to be conducted again. By creating an architecture that is more robust users can experience less downtime and interruptions, the same with the computer and network management. When it comes to security we can use previous examples of viruses and malware that can be detected before they even attack, whether it is by software patches or stronger security measures rather than fix the problem after it happens.



















References

Campbell-Kelly, M. (2004). Computer: a history of the information machine. Retrieved from https://hdl-handle-net.proxy-library.ashford.edu/2027/heb.01132.

Xiu, L. (2019). Time Moore: Exploiting Moore's Law From The Perspective of Time. IEEE Solid-State Circuits Magazine, 11(1), 39–55. https://doi.org/10.1109/mssc.2018.2882285 


Thursday, July 1, 2021

    Network Security


    Phishing attacks, when I think of them, I think of them as a network vulnerability that incorporates both social engineering and email spam. Not quite as precise as social engineering and not as overarching as just trash spam. I believe phishing is one of the more prevalent and dangerous network security vulnerabilities because of those reasons. Unlike social engineering that attackers might use that focuses on specific individuals to obtain information on how to breach computer systems, phishing is spread like spam to individuals that are vulnerable in that environment, but refrains from being spread to the point of saturation that it becomes ineffective in it’s goal. Phishing can be used to target individuals of an organization with the express goal of obtaining compromising information. Like fishing in a pond, phishing is looking for that individual to bite on the line, once that individual is reeled in they can be blackmailed or enticed with a story or a plea for help to get the information needed to gain access to the information they are looking for. If successful, phishing attempts can compromise users and force them to provide passwords or divulge information that can allow the attackers to enter systems in that organization. From there the attackers can do as they please. When it comes to mitigating phishing attacks a two pronged method needs to be taken. First, proper user training on identifying phishing attacks, this can range from contacting security officials immediately upon suspecting a phishing attack and a filtering system that can identify the attacks before they occur. Second, proper firewall and spam protection for the organizations email and systems, preventing Network Security the attack before it happens can deter the attackers from continuing their phishing attempts. 

    Computer viruses are the most recognizable type of computer systems threat. They can be the tool used by exploiting the rest of the threats outlined in our assignment to cause damage to computer systems. As the name states it is a virus that can kill its host or exploit its resources for information or plain malicious intent. Computer systems are vulnerable to viruses because viruses can live and expand though the code or exploits that the system already has. Viruses can be used to hold systems hostage for money or can be used to destroy systems. One method that viruses can be used to destroy systems is by affecting hardware that the system manages. For example, a virus can turn off the fans that a system uses for cooling and increase the voltage to system components, this in turn increases the temperature of a system and can cause irreversible hardware damage. One method computer systems already fight viruses with is an anti-virus software that scans the system for known viruses or programs that are trying to access process level tasks when they are not authorized. Another method is to block viruses from entering the systems in the first place. This can be done with software like firewalls or network monitoring tools that detect incoming threats before they reach the system. Network Security


 References

     Hill, R. K. (2020). Protecting computers and people from viruses. Communications of the ACM, 63(10), 8–8. https://doi.org/10.1145/3415748 

    Jensen, M. L., Dinger, M., Wright, R. T., & Thatcher, J. B. (2017). Training to Mitigate Phishing Attacks Using Mindfulness Techniques. Journal of Management Information Systems, 34(2), 597–626. https://doi.org/10.1080/07421222.2017.133449

Computers in the workplace    

Industry: Military / Defense

Computers in the Military / Defense industry play a vital role in all aspects of said industry. From end user devices that are used to complete simple office work to super computers that analyze and process vast amounts of data to provide defensive and offensive advantages over adversaries. 

Being a Client Systems Technician, it is my job to be an expert in staging, troubleshooting and configuring end user devices ranging from phones to computers to specialized computers that are connected to the Air Force Network. Having competent users that are knowledgeable with their end user devices can help when it comes times to troubleshooting said devices. The simple tasks of asking users for their computer names or the IP addresses that the computers have can drastically lower the time that is needed to address the issues with those devices. Having users knowledgeable with the software on the devices can also help, the knowledge of office and adobe products is crucial and can help with the efficiency of the work being done.

Having witnessed the trend to cloud computing and virtual desktops I can say that the efficiency and readiness of the force will increase. Allowing for the job to be done anytime and anywhere with less time being wasted on client level solutions and more time invested in enterprise level solutions. I have also noticed trends moving towards an enterprise IT as a service being provided by outside contracted companies like Microsoft and AT&T allowing for the posturing of the force to be more focused on defensive and offensive cyber measures. This allows for less of a focus on support and a re-alignment of the force towards operations.

Abraham RiveraCorral

Traveling through the network 


Having used the PING and Traceroute commands before extensively for my work, I was already familiar with how to use it and how it can be used to troubleshoot network issues between systems. For example, using the ping command from a device to ping another device one can find if the devices are talking and available to each other on the network. If they are not connected one can do a traceroute to determine where the break is and if the issue is a connection one on the physical layer, a virtual one or a routing issue. It can also be used as a simple tool to see if a user's system is online and talking to the rest of the network. Packets travel through the network by hopping from router to router until they reach their destination. 

I decided to ping and traceroute the .jp and .ca amazon websites. Being separated by the pacific I believed would give me a good view of how geographical distance affects packet travel time. 

The last successful hop to the .ca domain was almost 200ms faster than the hop to the .jp domain. Being that the longest hop to the baseline google.com hop was 82ms, the difference in time between the .jp and .ca domain is significant. Being that I am currently in the middle east, this adds even more of a distance between me and the end destination. 

Using ping and traceroute to troubleshoot an issue I would say is one of the simplest troubleshooting steps one can take. One of the reasons a ping or traceroute can fail is a simple physical connection break between the systems. Another reason can be that the system being ping or tracerouted does not allow it to be pinged. This can be achieved by closing the port that allows for pining and traceroute on an internal switch in that domain.

tc az ca.PNGtc g.PNGping google.PNGping.PNG  ping az ca.PNG  tc az jp.PNG  

 The Role of Applications


The functions of word processor, spreadsheet, presentation and database applications are all different and unique to themselves. The word processor’s main purpose is that of its name, to be able to process letters typed by the user and place them on a medium formatted by that user. The spreadsheet application can be described as an application that allows for the input of data onto a spreadsheet and is able to be modified in a way that displays that data however the user wants it. The presentation application can be described as a slideshow that a user creates and on each slide important data is placed to be presented to others. Word processors have the advantage of allowing a user to easily place data/words on a virtual paper easily and with not much previous understanding of the program. Spreadsheet has Block Programing Reflection 2 the advantage of being able to manipulate large amounts of data, numbers, variables, and place them in a format that is simple for the user to understand. It also allows for the manipulation of equations and input/output of data allowing for the tracking of large amounts of data. The presentation application has the advantage of being a good way to present important points that the user can explain themselves instead of being read off a screen. The application that was most appropriate for documenting my work day was the word processor. I believe it is the best application to get the right information to the user without missing key points or information. While spreadsheets and the presentation application give information in their own way they miss a lot of it because of the way they are used. While the word processor application allows for all the day to be explained without data missing, it might not be as detailed but it is not missing. Word processor would work in the format of this essay in addition to the journal entry in part one of this assignment. Spreadsheets can be used to also track inventories as I do at work. The spreadsheet application is incredibly handy for inventories as data can be filtered and arranged based on the fields you are interested in. The presentation application can also be used as a way to not present data but present advertisements in a setting that is appropriate. The application can change between slides with data that is meant to entice the viewer to purchase or view an entertainment product.

A Newbie's Guide to Algorithmic Design and Data Structure Techniques

  Introduction : Hey fellow class mates! Embarking on the journey of understanding algorithms and data structures can seem daunting. But fea...