Thursday, January 23, 2020

Algorithmic Design and Data Structures


When we look at a computer screen everything seems to work seamlessly. We click buttons and are instantly rewarded with what we requested. There is a lot that goes on behind the scenes to make that type of magic happen. When we get beyond all of the hardware making that possible, there is an equivalent amount of software. When that software is broken down, we end up looking at a lot of data. Data structures and algorithms are the concept of taking and organizing that data so that the data works effectively within a program to make that aforementioned magic happen.

As a newbie to using data structures and algorithmic design its important to note that there are many different data structures. You can think of a data structure as the different ways of storing data, and algorithms as the instructions and steps that you can use for a particular data structure. They work together in tandem. Data structures can be things like lists, arrays, trees, queues, graphs and matrices. Each of these have specific strengths and weaknesses. Because of this, one data structure doesn’t predominantly become the best. They are all situational. It is up to us as programmers to learn when it is best to use each data structure type.

Let’s say we were creating a program that would run a playlist of music. We need a data structure to store all of the songs data within the program. We couldn’t use a tree because that data structure just doesn’t work for our problem. In our case, a list makes sense. But what kind? A stack would allow us to go backwards in the order that we added the songs because if follows LIFO. A queue would do the exact opposite due to it following FIFO. However, we could use a doubly-linked list which would allow us to move both backwards and forwards through data.

As you can see by the previous example, there isn’t one particular data type that will fit each problem. Therefore, when developing structured programs I would say that it is important to think about the problem and figure it out what exactly we are attempting to do. From there, we will be able to decide which data structure will be the most feasible solution to the problem. Understanding data structures and their strengths and weaknesses will help you write better programs.  

Thursday, December 12, 2019

Java! All you need to know about it and Object Oriented Programming!

What is Java?

I don't know about you, but when someone says the word "java" the first thing I think about is a nice hot cup of coffee. Yum! In the technology world "Java" is one of the most popular object oriented  programming languages. The reasoning for this is because unlike many other programming languages, when we finish writing our programs it doesn't need to be compiled for every different operating system. Instead, it compiles into bytecode. Then each operating system is able to use the Java Runtime Environment to run the same bytecode. Therefore, you don't have to write a program multiple times for different operating systems. This is what sets Java apart from many other operating systems. 

How do I install Java? 

Java is very easy to install. The current version is JDK 13. You can easily install it by going to Oracle and downloading their current version. Don't forget that you also need to download an IDE. IDE stands for integrated development environment. It's basically a fancy text editor. They help programmers write code better and faster by highlighting syntax, autocompleting code, and giving hints and suggestions for cleaning code up. Also included in an IDE is generally a compiler and debugger. All of this is bundled into one environment. There are hundreds of Java IDE's out there and most of it comes down to preference. 

Here is a youtube tutorial that will guide you through downloading Java JDK 13. 

What is Object Oriented Programming?

It was previously stated that Java is an object oriented programming language. Now that Java is installed, we should define what object oriented programming is. Early programs used to be written line by line as a very long list of instructions. For simple programs and applications this is fine. However, as programs became more complex, it just becomes impractical. 

Object Oriented Programming allows programmers to define objects with their own attributes and code and then these objects are able to interact with each other. For instance, you might be able to define a button as an object and it would have its own code with its attributes and methods that could then interact with other code within a program. This allows us to write complex programs without having to duplicate mass amounts of code. 

The following youtube video is a great source for understanding what Object Oriented Programming is: 

I  hope this blog helps you to get started with your Java Programming Journey! 

Happy Coding, 
-Megan

References: 


Java OOPs concepts (Links to an external site.). (n.d.). Retrieved from http://www.javatpoint.com/java-oops-concepts

Oracle. (2015). The Java tutorials: Lesson: Object-oriented programming concepts (Links to an external site.). Retrieved from http://docs.oracle.com/javase/tutorial/java/concepts/index.html

Programming with Mosh. (2018, March 29). Object-oriented Programming in 7 minutes. Retrieved from https://www.youtube.com/watch?v=pTB0EiLXUC8&t=24s.

Tubemint. (2019, September 21). How to Download & Install Java JDK 13 on Windows 10. Retrieved from https://www.youtube.com/watch?v=bIl48gbFiEc&t=32s.

Wednesday, June 5, 2019

CPT 304: Operating Systems Theory and Design Final

For the past five weeks I have been taking a course in Operating Systems Theory and Design. This course has been eye opening in my understanding of the inner workings of contemporary operating systems. Throughout this course, I have been creating a group of concept maps to show the fundamental concepts of operating systems.

There are many different operating systems that exist, but they all seem to have three main purposes. The first purpose is to create an environment that a user will use to be able to communicate with a computer's hardware. Essentially, this allows a user to give the computer directions of what it needs to do. The second purpose is to make sure that the computer's resources are allocated. Finally, the last purpose of an operating system is to allow the computer to run efficiently meaning that programs will run without errors, fixing errors when they occur, and making sure that I/O devices can communicate properly.

Each operating system has those goals in mind and uses certain functions to accomplish those goals. While the way an operating system functions differ, there are some fundamental functions that guide the operating system. These functions are:

  • Allocation of Resources
  • File Systems
  • Communication
  • Program Execution
  • Error Detection
  • I/O operations
  • Accounting
  • Security
Processes are how an operating system accomplishes each task. As a program or file executes, it runs through different states called processes. The process states are new, ready, waiting, running, and terminate. A thread is a unit that it is the path of execution within a process. Single-thread is the idea that a process is only able to perform one task at a time (Silberschatz, Galvin & Gagne, 2014). Multithreaded means that a process can have multiple threads that work together to perform a process. Using multithreads and synchronization allow the threads to share data and code. This means that information is able to be shared and cuts out idle time, because the CPU is always able to work on something during a process. 
This leads us to memory. Memory management and memory allocation are vital to an operating system. Memory is not an infinite resource and it has to be used wisely. For the CPU to run processes they have to be in the memory that the CPU is able to access. The memory that the CPU is able to access is small compared to the disk memory that we save our programs on. Because of this, memory has to be managed wisely so that the computer is able to fulfill all the requests of the user and to work efficiently and properly. 

Memory also has to be protected. This is extremely important because processes should not be allowed to access memory that don't belong to it. Registers of where a process belongs in memory and limit registers are created in order to accomplish this. This protects memory from being accessed or used by the wrong processes. 

Memory allocation is one of the main jobs of memory management. Memory is divided into partitions and the way that these partitions are used is how memory is allocated. You can think of these partitions as slices of pizza. Each partition is allowed to hold one process. Sometimes a process only uses just a sliver of the partition which creates holes in the memory. There are three solutions that can be used to allocate memory to allocate memory in an efficient way. These solutions are first fit, best fit, and worst fit. First fit is when the first hole that is big enough to for a process to fit into is used. Best fit searches the entirety of memory to use the smallest hole available. Worst fit will fit a process into the largest hole available. 

Fragmentation is what happens when these strategies are used leaving tiny holes that aren't usable in memory. This is essentially wasted space because each hole is to tiny to ever get used. When these holes are spread throughout a memory partition is can lead to a lot of wasted space. While each individual hole is tiny, added up it can be a lot of wasted space. For instance if there were 100 tiny holes, put together it could equal enough space for a few processes if it wasn't spread throughout memory. 

Segmentation is a memory management scheme that instead looks at how programmers look at and use memory. This uses logical addresses and segment names and lengths and is used to store processes into memory. Segmentation can lead to compaction of memory. 

Paging is another memory management scheme. It involves breaking physical memory into frames and logical memory into pages. Processes are then able to be executed into any frame and page that is available. This memory scheme allows memory to be used without having to worry about fragmentation or compaction. (Links to an external site.)

Virtual memory allows unused hard drive space to be temporarily used as memory. Because RAM is a finite resource, it is easy for it to run out of space easily. Virtual memory essentially allows unused hard drive space to be used temporarily as memory and then the it can be copied into memory later. This allows processes to run and larger programs to work even if memory is full. When used in conjunction with main memory, virtual memory can temporarily be used to keep processes running while memory is being managed. 

File systems are a "mechanism for online storage of and access to both data and programs of the operating system and all users of the computer system" (Silberschatz, Galvin & Gagne, 2014). They are the way that files are stored on a computer and how they are maintained. This system is how the computer keeps track of all of the information that is saved on its like the files name, its size and location, when it was created, and who can access it. 

There are quite a few operations that occur within a file system. These include:
  • creating a file
  • writing a file
  • reading a file
  • repositioning a file
  • deleting a file
  • truncating a file

There are also a few different types of directories used to store files. Single-level directories are the simplest directory structure which is when all the files are stored in the same directory. While extremely simplistic, this type of directory can lead to problems like each file needing to have its own unique name. The next type of directory system is called a two-level directory. This is slightly more complicated and involves each user having their own separate directory space. If there are other users, they will not be able to read, write, or delete a different users files. This means that multiple users can have files named the same thing, but can lead to a lot of wasted space if the same files are duplicated in each users' files. Tree-structured directories are another type of directory system. These systems use many subdirectories to organize files. These structures are fantastic for organziation because you can have numerous subcategories, but it is also easy for information to get buried beneath these subcategories making the system hard to navigate or to pinpoint certain files. There are also other structures that each grown upon the downfalls of the previous structure, yet continue to change in complexity. Each of these structures have their own advantages and disadvantages depending on what type of system it is being run on. A system with many users is going to benefit from using a different structure than one with one user. 


Another main job of an operating system is I/O or input/output. Everything we do on a computer is an input and the results that we see are the output. I/O can be divided between hardware and software. Some hardware I/O are all the kinds of devices that we connect to our computers. A mouse, keyboard, monitor and speakers are all types of hardware that are I/O. I/O works by being plugged into a port on the computer, traveling over the bus to  get processed. Then they follow a path back across the bus to become the output that we see. This works by having drivers which are a type of software that enables the I/O devices that we use to work with the computer system. 

Protection and security are vital parts of an operating system. Protection has to do with the inner workings of the operating system while security has to do with the external vulnerabilities of the operating system. Protection involves making sure that each domain and object are a need-to-know only basis. Basically, each program, user, file, etc. only is given enough access to privileges as it needs in order to accomplish its task. There a few different ways that protection can be accomplished including domain of protection, MULTICS Ring Structure, Access Matrices, and capabilities lists. 

While protection deals with protecting the files and resources from the system and its users against accidental misuses, security deals with protecting the system from deliberate attacks. Some of the most common types of attacks are:

  • Breach of Confidentiality
  • Breach of Integrity
  • Breach of Availability
  • Theft of Service
  • Denial of Service
There are other threats to a system. Threats are potential security violations. These include things like viruses, worms, malware, and other types of similar problems. There are anti-virus and anti-malware programs that exist to help operating systems combat these types of threats. 

Firewalls are devices or software that are used to restrict and monitor traffic going into and out of the computer from/to the internet. Computer threats and attacks are always changing. These programs and firewalls must be constantly updated to prevent these threats and attacks from harming computer systems and the theft of user information.


The knowledge that I have gained throughout this course will be extremely helpful in my future classes and in my future career in the IT field. I know have a better understand of all the intricacies that go into an operating system. I certainly have better knowledge of everything that goes into each click of my mouse. Before, I just expected the output that appears on my monitor. Now I have working knowledge of all that goes into what happens once I ask the computer to do something. This will also help me in my career because I have a better understanding of the IT field which I hope to one day work in. I'm sure that this knowledge will also help me in my future classes as well as I delve further into getting my degree in Computer Software Technology.  

References: 
Silberschatz, A., Galvin, P. B., & Gagne, G. (2014). Operating system concepts essentials (2nd ed.). Retrieved from https://redshelf.com/

Monday, September 24, 2018

Careers in Technology


Technology encompasses so many different fields. With this, there are many different career paths that someone studying information technology can choose from. One can choose to have a very broad career that overviews technology or can specialize into a specific field and focus on a very small or specific type of technology. Every since I was a little girl, technology has been the key to my heart. As I grew up the different career paths I wanted changed, but the one constant was that they were always somewhere in the technology field. So for this last blog post for my class, I will overview some of the different career paths in information technology.

Help Desk Technicians
Help Desk Technicians are a low paying entry level job in the technology field. This job doesn’t have high experience or education requirements, but they are vital in keeping technologies running. This job entails keeping technology current and updated. They provide technical support and troubleshoot problems with existing technology. There is some controversy that these jobs are dead end, but some IT organizations are using this position as training and offering certifications to advance from this position in the future (Hoffman, 2008).

It Security
IT and Network Security is an ever-growing field because of the escalating threats of cyber warfare and other security threats. People who specialize in IT Security have to be aware of all the different types of threats that effect technology and the ways to counter them. They must monitor against outside attack, protect against network breaches. Another major job they have is to keep others educated on how to protect data. This also happens to be one of the biggest growing jobs in the IT field because security is of the upmost importance to many businesses that store consumer data and important information (IT security top for jobs, 2018).

 Computer Hardware Engineer
Computer Hardware Engineers are responsible for creating new and improved hardware for computers. These are the people responsible for creating new processors, motherboards and all the computer peripherals we buy like computers, keyboards, and even routers and modems. They deal with all the intricate hardware parts that make technology work. This job requires a lot of education because computer hardware engineers must be up-to-date on new computer technologies, electronics, and engineering in order to succeed in this career field (Moncarz, 2000).

Software Engineer
Unlike Computer Hardware Engineers, Software Engineers design, develop, and upgrade the computer programs that we use every day. Some software engineers create applications for smartphones and tablets, while others create things like operating systems, and programs for computers. They must be creative. They don’t just sit around writing programs all day. Instead, they might spend days thinking about how to solve a problem before they even get to the point of having to create the program itself. This job requires critical thinking and problem-solving skills in order to be successful.

Data Scientists
Data scientists are another field of information technology. Their job requires them to look at mass amounts of data and make sense out of it. There is so much data out there but data itself means nothing if it doesn’t have context. The job of a Data Scientist is to look at data and create predictions that can help to make sense of that data. This career field is in high demand for the health and business fields. There is an ethical concern in this field, because data scientists have so much data at their fingerprints they need to be careful what they do with it (Barocas & Boyd, 2017). When looking at mass amounts of data it can be hard to see the implications of what that data can do in the hands of others.  This job is in such high demand because they use this data alongside math and statistics to find business insights that truly help or destroy a business. They can pinpoint problems before they are even on a company’s radar which makes them highly sought-after.

Conclusion:
Each of the above lists five paths in the Information Technology Career Field is computer different from the next. Some are entry level like the Help Desk Technician, while others like Data Scientists require an absurd amount of education. The one thing each has in common is that they all are within the same field. Each is a completely valid and needed path, but it opens up many different fields for people to choose from. Each career path uses different skill sets. While one career path might not be right for someone, that doesn't mean that one of the other paths won't be a perfect fit. The IT Career field allows so many different people of different backgrounds and skill sets to find an IT career path that will fit their unique set of skills. 


References: 

Barocas, S., & Boyd, D. (2017). Computing Ethics Engaging the Ethics of Data Science in Practice: Seeking more common ground between data scientists and their critics. Communications of the ACM, 60(11), 23–25. https://doi-org.proxy-library.ashford.edu/10.1145/3144172

Hoffman, T. (2008). A help desk job: dead end or launching pad?(CAREERS). Computerworld, (20), 28. Retrieved from http://search.ebscohost.com.proxy-library.ashford.edu/login.aspx?direct=true&db=edscpi&AN=edscpi.A179352338&site=eds-live&scope=site

IT security top for jobs. (2018). Cairns Post (Queensland, Australia). Retrieved from http://search.ebscohost.com.proxy-library.ashford.edu/login.aspx?direct=true&db=edsgin&AN=edsgcl.522254240&site=eds-live&scope=site

Moncarz, R. (2000). Computer engineers. Occupational Outlook Quarterly, 44(3), 28. Retrieved from http://search.ebscohost.com.proxy-library.ashford.edu/login.aspx?direct=true&db=a9h&AN=3539137&site=eds-live&scope=site

Vahid, F., & Lysecky, S. (2017). Computing technology for all. Retrieved from zybooks.zyante.com/

Network Security


         
            Computer security is something that everyone that uses technology needs to think about. It isn’t just a user’s specific computer that needs to be thought about either. In fact, sometimes the most harm can happen from a breach of an email or a social media account. Computers can be compromised by someone hacking a system, malware and viruses. These are perhaps the most common things people think of when thinking of computer security. However, there are other ways of breaching security such as Denial of Service (DoS) attacks, phishing and the spam of emails.

            Denial of Service, or DoS attacks happens when there are huge numbers of requests simultaneously to one website which overloads the system and prevents actual people from being able to access a website or server (Vahid, f., & Lysecky, s., 2017). This type of attack can be carried out in a way similar to how we used pings and trace routes in our assignments last week. We were sending packets of information to communicate with a specific server. In a DoS attack, so many requests are made at the same time that it overloads the server and causes real people to not be able to access the website. Many times, these types of attacks are used as activism, sabotage, or cyberwarfare (Crelin, J., 2013). It can be used to cost companies money or to cause an inconvenience to corporations and users alike. 

            Two other types of security incidents are Email Spam and Phishing. These are similar because they both typically are related to email. Email Spam is typically unwanted mass-sent emails (Vahid & Lysecky, 2017). Anyone that has an email almost certainly has had to deal with spam emails. In fact, most email services have spam filters to attempt to catch spam before the user ever sees it. Spam is extremely popular because it costs the sender nothing but time. The problem is that many times spam is meant to look enticing to the receiver of the email. However, spam emails can contain malware, viruses, or scams that can really hurt the receiver of the email. Similarly, phishing is an internet scam that tries to get users to share information that could allow the sender to get access to things like bank accounts or website logins (Vahid & Lysecky, 2017). Emails will be sent to users that look like official correspondence from banks or websites, including logos. Sometimes they mimic actual sent emails. However, these emails will contain links to attempt to get users to input personal information like passwords, bank information, or other personal information like social security numbers (Hong, J., 2012). Then the sender has access to the user’s personal information and can use that info to steal money or even identities.

            There are many ways that security breaches can happen. Computer security is something that all users must be knowledgeable about. It’s just as important for corporations as regular users to be aware of the many types of ways their information can be breached. Security breaches cost billions of dollars every year. These attacks can happen to a simple email users all the way to DoS attacks on major corporations or even the government. Understanding the threats is essential to keeping your personal information safe and your computer running smoothly.




References:

Crelin, J. (2013). Denial-of-service attack. Salem Press Encyclopedia. Retrieved from http://search.ebscohost.com.proxy-library.ashford.edu/login.aspx?direct=true&db=ers&AN=90558289&site=eds-live&scope=site
Hong, J. (2012). The State of Phishing Attacks. Communications of the ACM, 55(1), 74–81. https://doi-org.proxy-library.ashford.edu/10.1145/2063176.2063197
Vahid, F., & Lysecky, S. (2017). Computing technology for all. Retrieved from zybooks.zyante.com/

Computers in the Workplace


                Technology is used a multitude of ways across the span of industries. One industry that I find fascinating when it comes to the use of computers and technology is the grocery industry. I am currently working at a grocery store and information technology makes its way into my job every day. There are many ways that technology is used from pricing and inventory control, to cash registers and mobile apps. Most people think of grocery shopping as a mundane task, but people don’t tend to think about the ways that technology works their way into these very boring shopping trips.
              
  Like most stores, my store has a loyalty program that customers can sign up. However, unlike most grocery stores, all customers get the stores sales prices. Instead, our loyalty program is more rewards based. The program only works off of a phone app where members get exclusive coupons that work alongside sales prices to make items even cheaper. The app uses analytics to track each customers’ buying habits. It then pinpoints specific coupons that are custom to each specific shopper. This helps the store to pinpoint sales and products that their specific customers buy most often.

When customers shop at our store, they must scan their smartphones or enter their phone number into our computerized register system. This links their loyalty program to each transaction. On the mobile application, customers get specific rewards and coupons that are catered to their needs. However, for the register to take the offer of they must “clip” the reward making it active on their account. For instance, a customer might log into the app and have a few coupons for money off certain items like the ones you can cut out, as well as a $5.00 reward from the last shopping trip. They would then tell their app that those are the promotions they want to use. Simply by linking their program with each transaction by scanning their phone or typing in a phone number the computer system automatically takes those offers they had clipped off their next shopping trip.

Grocery technology is also expanding in other ways. Some stores have grocery pick-up where customers can shop at home on their computers and then pick up their items at the store. My store has an app where customers can shop at home on their cell phones, and we have shoppers that fill their order and actually deliver right to their homes. These types of technology are ever expanding and making the lives of customers easier by allowing them to shop for grocery items without ever even visiting the store.

Technology is what makes all of these things possible. There is a lot of programming and thought that goes into making these applications to make the lives of customers easier. As technology evolves it makes it much easier for the stores to create programs like the ones mentioned in this blog.  It is very important for employees to be computer literate because we have to understand how the applications and programs work in order to help the customers that shop at our store. Not only must we be able to help the customer, but we also need to understand when things aren’t working correctly. For instance, if a customer shows me that they have a promotion that isn’t automatically working, I have to be literate enough with technology to be able to figure out why and figure out how to solve the problem for the customer. Sometimes technology breaks, but the customer still needs to get the appropriate coupons and rewards to keep them happy and returning. If a customer shops online through our application and purchases items that we don’t have in store, we have to be able to know how to refund these items and make it right for the customer. Being able to troubleshoot the applications as well as the stores computerized registers is essential to keeping consumers happy and returning. It is essential to understand the new technology because it is what is expect by the customer, and it also makes our day run more smoothly.


Thursday, September 20, 2018

Traveling Through a Network

Computers all around the world are connected to each other through the internet. These computers send packets of information over the internet to communicate with each other (Vahid & Lysecky, 2017). These packets follow a path that begins with the origin computer and then follows a path through the router and modem, to the ISP and along different routers to the final IP address (Vahid & Lysecky, 2017). As users, we can use the ping and traceroute commands to see how long it takes to get to the final destination and to follow the route that the packets are taking to get to the final destination. These commands can also be used to troubleshoot problems when we believe that the internet isn’t working correctly.

The three destinations I have chosen to use for this week’s assignment are google.com, ynet.co.il, and Rakuten.co.jp.

Google.com 





As you can see from the screenshot provided, the ping sent four packets and received four packets. Meaning that there were 0 packets lost. The average ping time results were 42ms, with a maximum of 44ms and a minimum of 41ms. 



The above screenshot is of the traceroute I did for google.com. This traceroute took 18 hops to reach the destination 172.217.15.110 which is the IP address for google.com. The time it took to hop between each destination varied from 13ms to 51 ms. It also timed out one time. 

Ynet.co.il




The second site I used was ynet.co.il. This is an Israeli news website. The ping sent four packets, received four packets and had 0 lost packets. It averaged 75ms. 



The traceroute for ynet.co.il was 16 hops. It averaged between 10ms and 138ms to reach its destination of 23.43.167.201 which surprised me. I didn't know that this news site was hosted here in the United States despite being an Israeli newspaper. 

Rakuten.co.jp




This screenshot shows the ping for Rakuten.co.jp which is a Japanese shopping site. This also sent four packets, received four packets and lost 0 packets. It averaged 153ms, which is the longest of the three websites that I pinged. 



My final screenshot is the traceroute for rakuten.co.jp. It took 18 hops to reach its destination IP address. The request timed out one time. It averaged between 13ms and 178ms. By far it took the longest time to run the traceroute on this website. 

After running the ping and traceroute on these three websites I have come to the conclusion that it takes longer to complete depending on how far away the destination site is hosted. I came to this conclusion because the site in Japan took the longest. While I thought that the Israeli site would come in second, it actually came in the quickest because their site was actually hosted the closest to where I live. I found that to be quite interesting. 

Ping and traceroutes can be extremely helpful to diagnose network errors. Using these tools one is able to find out where packets of data are being lost. It can help to determine whether a problem is occurring at the origin, destination, or somewhere in between. The traceroute can help to determine if there is a problem somewhere in the middle or of in there is congestion somewhere along a route. Errors can determine whether there is data loss or if hardware like the router or modem is not functioning correctly. 



References:

Vahid, F., & Lysecky, S. (2017). Computing technology for all. Retrieved from zybooks.zyante.com/