Tuesday, December 10, 2013

Scientific Computing: Useful tool.





"Wolfram Alpha is an astonishingly powerful piece of software that helps you find nearly any piece of factual information you could want" (read more at: http://www.businessinsider.com/wolfram-alpha-2011-10). It can be used to answer many different types of problems ranging from what temperature the weather is in Timbuktu to your Calculus homework. However, it is still a work in progress as it is not smart enough to answer any questions you ask it because of the enormous difficulty involved in interpreting the text a user enters into it. However, there is no need to be upset when Wolfram Alpha says that it does not understand your question as Wolfram Alpha has an example page: http://www.wolframalpha.com/examples/ for this purpose.

And so if we wanted to find the format we need to use for double integrals problems we can click on the 'Calculus' link beneath the 'Mathematics' text and image. From there we can click on the 'Integrals >>' button. Once there we can do a simple search in our web browser to find the format we need for a double integral problem which is:

int (x^2 y^2 + x y^3) dx dy, x=-2 to 2, y=-2 to 2

which gives us an answer of:

256/9

And then we can compare use Wolfram Alpha to solve one that we did by hand to make sure that we got the right answer in the case that we are working on is in a textbook that only has answers to the odd numbered problems.

Sunday, December 8, 2013

Computer Graphics: How you are helping out.


The above image is a figure I'm sure most of us are familiar with as we have to fill them out in sites to make accounts or post comments. And whenever I see one I get a little worked up as I know I'm probably going to fail entering the correct values on the first try for whatever reason. In any case it is a good system as it stops spammers from spamming webpages since computer software is currently not smart enough to be able to decipher the above image as text. And that's because of the nature of how text is written without any consistency due to text being spaced differently for any number of reasons. On the other hand, there is consistency in the letters you are reading right now since each letter is exactly the same as the previous version due to the way computer programs display the letters we type.

And to go further into what the above image is, it is "reCAPTCHA [which] is a free CAPTCHA service that helps to digitize books, newspapers and old time radio shows." (read more at: http://www.google.com/recaptcha/learnmore). And what this means is that by solving these CAPTCHAs you are helping out programs in their conversion process of images into text so that all books can be available online in the future so that we do not lose them as in the case of the burning of the Library of Alexandria in which a considerably amount of knowledge was lost due to a lack of additional copies of works.

Sunday, December 1, 2013

Communications and Security: How to make good passwords.


Coming up with good passwords is the best way to keep your files secure. But what makes a good password? The first link on a Google search  for "how to make a good password" gave me: http://www.makeuseof.com/tag/create-strong-password-forget/ which suggests what a lot of websites I've made accounts for in the past suggested for making my password a strong one. And some suggestions for making a strong password that makeuseof lists is that your password should "contain special characters and numbers", "a mix of upper and lower case letters", and the use of random mixing in your substitution of letters like "B", or "b" for "8". And this advice seems rock solid since so many different sites regurgitate (and enforce) that these tips make your passwords strong.

But in reality these kinds of passwords are terrible because they are hard to remember. So you will most likely resort to writing down your password down on a piece of a paper so that you can log on to any of  your various accounts. This is bad because if you lose that piece of paper you will lose access to all of your accounts since you can't remember any of them due to all the mixing and matching of letters.

xkcd: Password Strength Comic
So what actually makes a good password? Good passwords are the ones that are long and easy to remember like 'correctbatteryhorsestaple' from http://xkcd.com/936/. These kinds of passwords are strong since they have a large number of characters which means that a cracker's password program will have to guess more characters combinations to get access into your accounts. However, many crackers probably employ dictionary attacks with random combinations of 3 or 4 words to guess your passwords, so it's probably still a good idea to mix up some of the letters you use  in your password to give yourself some extra security.

Sunday, November 24, 2013

Artificial Intelligence: The future.


Artificial intelligence has always been something that has fascinated me. Just the very idea that we can "...[simulate] human intelligence processes by machines" (Read more at: http://searchcio.techtarget.com/definition/AI) makes me extremely excited to see what the future will bring. Admittedly I have dabbled in it very briefly by making my own Tic Tac Toe program in which users can play against the computer. However, the computer will always play the very best moves so that it never loses which makes the game boring for the player as people occasionally make mistakes while playing Tic Tac Toe that allow for their opponent to secure the win.

Albeit the artificial intelligence used in voice recognition technology like Siri makes mistakes more often than not. And that makes me doubtful of whether or not we will be able to make artificial intelligence extremely advanced. On the other had, recent advancements like Google's self-driving car has me super excited for what the future will bring us. Because by doing something as complicated as making a program that can drive a car around safely without any human intervention gives me faith in the diligence of Computer Scientists to make new breakthroughs in techniques for constructing artificial intelligence programs.

And then we will finally reach a point where everything will be automated for us in which we can sit back and relax knowing that we won't have to work another day in our life unless we choose to do so, although I can't imagine many of us wanting to work. So instead we will be able to spend our time focused on obtaining happiness by exploring all of the wonderful things life has to offer us.

Sunday, November 17, 2013

History of Computer Science: From my perspective.


The first programming class I took was an Intro to Java course. My teacher started off the course by giving us a brief overview of the history of computer science. And I still remember my teacher talking about how people would have to punch cards by hand in order to make programs which sucked because if you made a single mistake you would have to punch the card all over again.

So thankfully we did not have to do that and could instead focus on the logic of the programs we wrote because 'The Java programming language is a high-level language...' (Read more at: http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html). And the first program my teacher showed me was a simple Hello World program which is a program that simply prints out 'Hello World!' for a user to read. And the example code intimidated me greatly as there seem to be a lot of text for a relatively simple task. It's code was the following:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

But I got the hang of writing programs in Java after a couple of weeks of doing basic assignments. Two years later, I took a class in C which was very easy to understand because Java based its syntax off of C. But then I got to pointers which are basically things that point to the location of others things which had me scratching my head for a really long time until it finally clicked after spending hours thinking about it. So I was thankful that my first programming course did not require me to know how to work with pointers. And C's version of a simple Hello World program is:

#include <stdio.h>

int main(void) { 
    printf("Hello World!");
    return 0;
}

After taking a short break, I took a class in Assembly which I found to be really hard as you had to keep track of all of the registers named eax, ebx, ecx, edx, etc in your head. So this class gave me a ton of respect for the people who made high level languages as they make programming more accessible. And it's version of a simple Hello World program is:

INCLUDE Irvine32.inc

.data
prompt BYTE "Hello World!",0

.code
main PROC
mov edx, OFFSET prompt
call writeString
main ENDP

END main

Which is really not that simple at all. And then I started to learn Python which was really easy compared to the other languages, as it's syntax is pretty similar to Java/C. And a simple Hello World program can be written in Python as:

print("Hello World!")

Which I think is super cool because it's so simple compared to the rest of the languages I have learned about.

Sunday, November 10, 2013

File Sharing: Its importance.



'...file sharing is the practice of making files available for other individuals to download. It can be as simple as sharing a file for general consumption via My WebSpace or enabling file sharing on your computer’s operating system so that you can access your home computer files at work.' (Read more at: http://www.cio.wisc.edu/security-filesharing.aspx). But the idea that comes up in most people's head as they hear the word 'file sharing' is that people can illegally download free stuff off the internet using a torrent program such as utorrent (Download link: http://www.utorrent.com/downloads). And they are right because with a quick Google search one can easily find pretty much anything online for free and with a couple of clicks be on their merry way to having a copy of the file onto their computer.

And even though that may be the way a vast majority of user's use such programs, file sharing programs should not be frowned upon as they are very useful in distributing legitimate files across the internet to help ease the burden of paying for servers for people to download files from. A good examples of this would be Ubuntu (Download link: http://www.ubuntu.com/download/alternative-downloads) which is a free Operating System that user can use on their computers. Another example of this would be the adult game Katawa Shoujo (Download link: http://www.katawa-shoujo.com/download.phpthat was created by various individuals on the internet which utilized file sharing in order to get their game out to the public faster.

Sunday, November 3, 2013

Data Structures: What are they for?





'A data structure is a group of data elements grouped together under one name. These data elements, known as members, can have different types and different lengths.' (Read more at: http://www.cplusplus.com/doc/tutorial/structures/). And what this basically means is that a programmer can create a single object to hold a bunch of different types of things in one place. And a good example of this kind of data structure would be the files you use on your computer as that is something that you interact with in your everyday life. The data structure aspect comes from the way in which your files store all kinds of information about themselves in addition to what you or somebody else put into them, like the date, or title/artist/duration of a music file. 

Data structures are also used in another way to help programmers make their lives simpler by hiding away the implementation details. And an example of this could be the way in which your music playing program uses a list data structure to hold all of your music files. And by using this type of data structure the people who write music playing programs can easily add features to allow you to sort your music in a bunch of different ways without worrying about the implementation details about a list by just adjusting the sort function their list data structure uses to be able to sort your songs in alphabetical order by artist or track name, or by the amount of times you played a song so you can easily play your favorite song.

Monday, October 28, 2013

Hacking: What it leads to.



Hacking is the way most programmers code. They combine random methods here and there in order to quickly finish the job at hand. And they can get away with it because the consumer does not care about what happens behind the scenes as long as the program does what it is suppose to do. Unfortunately this leads to spaghetti code. And spaghetti code is very hard to maintain as you can see from the above picture as things are mixed and matched all over the city in order get the code to up and running as quick as possible. So it becomes a huge hassle to upgrade or fix problems which leads to more hacks on top of hacks in order to keep the program working properly.


And so you should not hack your code together but take the time to think things through on a piece of paper. And by doing this, you will be able to come up will all the different types data structures you will need in order to make your project easier to maintain. The above image is a representation of this as your final project will fit together like a puzzle in which you can easily add or remove pieces to meet new goals that have been set by your client.

So in short hacks are good to get fast working prototypes or proof of concepts, however, in the long run one should strive to mapping out their data structures beforehand in order to improve maintainability of code.

Sunday, October 13, 2013

OPEN SOURCE: Should you open source your project?


Open source basically means that "The program must include [its] source code... [or] there must be a well-publicized means of obtaining the source code fro no more than a reasonable reproduction cost preferably, downloading via the Internet without charge" (http://opensource.org/osd).

And I think that is a good thing as making your code open source has a ton of positive benefits.

  1. When I make a project open source, people can help me out by submitting bug fixes.
  2. People can improve my documentation since they are basing their documentation off of what they can see in my code, whereas my documentation may not make much sense since I know all of the components I'm dealing with inside and out.
  3. People are more likely to trust running my program as others can verify it does what it says it does, or compile their own version from the source code to make sure the executable version I'm distributing matches up to the open sourced version. And this is especially true ever since the NSA (National Security Agency) was revealed to be using backdoors in closed source product like Facebook to have access to all of your information without you knowing about it.
  4. If I decide to stop working on a project, people can take over maintaining it.
  5. You can learn a ton of new things from reading other people's source code.

However, that does not go without saying there are some downsides to making your code open source.

  1. People will steal your code and not give you credit.
  2. People will compile your project with a modified name and charge money for your software even though you wanted to keep it free.

But in the end I still think that the positives outweigh the negatives as open sourcing a project means that it's safer program to run as people can verify that it does what it says it does and people can take over inactive projects to improve them to their heart's content.

Friday, October 4, 2013

AGILE: Yay or nay?




AGILE is a highly used method that many companies have used in handling the development process. It's manifesto is as follows:

We are uncovering better ways of developing
software by doing it and helping others do it.
Through this work we have come to value:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

That is, while there is value in the items on
the right, we value the items on the left more.

And so basically what this means is that to have a better chance of succeeding in making a piece of software as a team, one should focus on the items on the left over the items on the right even though both items are important to the overall success of the project.

However, their methodology is bad on all accounts, as tools are a very important part of the process when building pieces of software as using an IDE's (Integrated Development Environment) breakpoint feature to process code one line at a time is very important to catch bugs that would have been very difficult to find using such as notepad.

Comprehensive documentation is also a huge necessity as people do not always stay in the same position. And thus the maintainer of the code changes around, and if there is poor documentation the resulting program will be a huge mess of hacks to piece everything together, whereas with properly documented code the new maintainers can easily understand how the program flows together.

Contract negotiation is also very important as that sets things in stone from the start so that one does not have to constantly rewrite things cause the customer forgot that they wanted to implement this feature or that one which they should have thought of earlier to save your team time from rewriting the program to allow such a feature.

And that relates to following a plan as it's set things in stone. This is good thing for the team creating the program as changing one thing that the customer may be simple may actually be a huger undertaking due to the approach the software team took in making the product before this new feature was requested to be included in the final product. 

And that's why AGILE's methodology in creating software is a poor one as it basically favors the customer who is paying for the program over the ones who have to poor sweat and blood into creating it, as it promotes the idea that the customer should be able to change willy nilly even though they should have explained everything clearly in the beginning so that the developers do not get headaches from having to change things up to satisfy the customer's new demands.

Friday, September 20, 2013

LinkedIn and Branding: Setting Up Your Profile

"LinkedIn is the leading online professional directory of individuals and companies. LinkedIn (linkedin.comhas over 85 million members in more than 200 countries, including executives from every Fortune 500 company." (Source). And what this means is that many employers use to look for potential candidates for their hiring process.  So it is a very good idea to make a profile on LinkedIn to get yourself some exposure to companies that are looking for new employers. And it also good to have an account to build up your list of contacts which will strengthen your social network which you will find very helpful to have when you are looking for a job in the future.
    And one of the best ways to get yourself a better chance at being selected as a potential candidate for an employer is to update your profile's info. However, before I delve any deeper always be sure to remember the fact that you always need to check the date something was created before using it as a guide as things typically change with time as new design schemes are introduced. And you can currently get to this page using this link.

  1. Navigate to the upper left hand corner to find the 'profile' tab
  2. Hover over the 'profile' tag
  3. Click on the 'edit profile' button
Then simply edit each item listed on the page to reflect the skills you have. And one very important thing to edit is your LinkedIn url as a custom one looks a lot nicer than one filled with random junk, which you can currently get to using this link.


  1. Then navigate to the lower right hand corner to find 'Customize your public profile URL' link.
  2. Click on it and edit your automatically generated one into a custom one like: http://www.linkedin.com/in/lastnamefirstname or http://www.linkedin.com/in/firstnamelastname
And that way people will not have to try to remember your long LinkedIn profile url to view your profile as they will only need to type http://www.linkedin.com/in/ plus whatever you used as your custom url to get to your LinkedIn profile. And this should make yourself more memorable as you took an extra step in customizing your LinkedIn profile to get in touch with potential employers.

Friday, September 13, 2013

QR codes: What's it for?

QR Code to quickly access my blog.

QR (Quick Response) Codes were invented in Japan in order to store more information than possible with a normal bar code in order to make people's work at cash registers simpler (see: http://www.qrcode.com/en/history/ for more information on the history of QR Codes). However, they have only become really popular in the past couple of years. This increase in usage is due to the fact that smartphones have become the most popular type of cell phone for users to purchase. And so armed with this advance gadget people are able to do things they would never have been able to do with their older non-smart cell phones by downloading apps to bring new features to their device. And one type of app that can be download is a QR Scanner that allows a person to scan in a QR Code using their smartphone's camera in order to quickly access material.

QR Code on the side of a building.


But that brings us to the question of what the person is scanning in, as QR Codes can basically be made to do anything. And so one simple addition that people should make to promote the usage of their QR Code is to include a short caption under their QR Code like I did for the first image on this post to let people know what it is for. Because as you can plainly see from the next image is that some people do not include any kind of caption or image customization to give the people who are looking at them any idea of what they are for. And this is extremely important to do when you have a whole bunch of QR Codes next to each other as they are impossible to decipher by look alone. And so the above QR Codes on the side of the building could be for any number of things ranging from directions to the nearest public parking lot to how much it costs to rent a room there. This leads to them not being used as nobody wants to waste their time trying out each one to see if any deals with what they are interested in gaining knowledge about. And thus the creation of your QR Codes was useless as nobody scanned any of them into their smartphone even though they might contain information that a ton of people would find very handy to have on hand.

Friday, September 6, 2013

Social Networking and security. . .or lack of when promoting your brand


In today's world of technological advancements it is extremely important to be able to directly communicate with your customers quickly and efficiently. This is because word of mouth is an especially important aspect in getting your brand's name out there. And one of the most important aspect of this is customer support, in which you can gain a lot of new customers by positively and quickly engaging with your customers when they experience a problem. And this will lead people to talk about how great your company is at responding to issues which will lead more people to use your company's services since your company's reputation for responding to customer's issue is very good.

On the other hand, if your company has a poor or slow support service, people will start to talk negatively about your company and consequential switch over to one of your competitors. However, there is no need to be alarmed if your company cannot afford to actively engage with your customers in a live chat of some sort to provide quick support. This is because services such as: Google Alerts exist to monitor people's searches about your company on the web. And so armed with this feature your company can see what people are looking up about your company. Then if people are saying negative things about the services your company provides, your company can respond by prioritizing the fixing of this issue to make your customer's pleased. And then your company's reputation will become better as people see that you really care about listening to what your customers have to say which will attract more customers into using your services.

Thursday, August 29, 2013

Welcome



Debra and other San Jose State University CS100/200W classmates, welcome to my blog.

A little info on how much technical experience I have in Computer Science is that I took an intro to Java class during my junior year at High School in which I had a pretty fun time in learning the basics of how to code in a high level language. Then after I graduated from High School I went to a community college where I decided that Computer Science was the major for me so I then I began taking computer science classes there which included unix where I got friendly with the command line; c where I struggled to understand the concepts of pointer for a while until it finally clicked; and finally assembly which gave me a huge appreciation for all the work that the higher level language takes care for us coders behind the scenes so that we can just start tackling a problem right away.

What I find exciting about this field is that with by coding I can make a program to automate tasks that  would take me and other people 'forever' to do by hand without making any mistakes along the way.

And so a big problem that I believe I can tackle as a computer science is automating repetitive tasks for people which is something I have done recently by making a program for a site that I'm a administrator of to automatically generate posts for us with a simple drag and drop interface in which I learned a lot of new things.