diff --git a/_config.yml b/_config.yml index 1a238087674..a9582eeb3f1 100644 --- a/_config.yml +++ b/_config.yml @@ -2,18 +2,18 @@ # REQUIRED CHANGES # Edit next line, providing your own name. -title: Molly Maluhia | Professional Portfolio +title: Travis Green | Professional Portfolio # Edit next line, replacing 'techfolios' with your github username -url: "https://techfolios.github.io" +url: "https://greent3.github.io" # Edit next line so that baseurl is "" if your repo is .github.io -baseurl: "/template" +baseurl: "" # OPTIONAL CHANGES # You might want to change the bio page label to something else, such as CV bio-page-label: Resume # You might want to change the theme associated with one or more sections of the site. # Defining your own custom theme variations is easy. See the documentation. -theme-home: theme-home-builtin-1.html +theme-home: theme-home-builtin-2.html theme-projects: theme-projects-builtin-1.html theme-essays: theme-essays-builtin-1.html theme-bio: theme-bio-builtin-1.html diff --git a/_data/bio.json b/_data/bio.json index bbd4a0c66c1..666643b13f9 100644 --- a/_data/bio.json +++ b/_data/bio.json @@ -1,15 +1,15 @@ { "basics": { - "name": "Molly Maluhia", + "name": "Travis Green", "label": "Student", - "picture": "https://techfolios.github.io/template/images/molly.png", - "email": "molly@hawaii.edu", - "phone": "808-333-4444", - "website": "https://mmaluhia.github.io", - "summary": "I am studying for a B.S. in Computer Science in the Department of Information and Computer Sciences at the University of Hawaii. I expect to graduate in Spring, 2020.", + "picture": "https://greent3.github.io/images/me_resized.jpg", + "email": "greent3@hawaii.edu", + "phone": "843-830-0855", + "website": "https://greent3.github.io", + "summary": "I am majoring in Chinese and minoring in Computer Science at the University of Hawaii. I plan to graduate in Spring 2021, and am open to software engineering roles at market making and high-frequency trading firms", "location": { "address": "", - "postalCode": "96822", + "postalCode": "96826", "city": "Honolulu", "countryCode": "USA", "region": "Hawaii" @@ -17,41 +17,29 @@ "profiles": [ { "network": "github", - "username": "mmaluhia", - "url": "http://github.com/changeme" + "username": "greent3", + "url": "http://github.com/greent3" }, { "network": "linkedin", - "username": "mollymaluhia", - "url": "http://linkedin.com/in/changeme" - }, - { - "network": "twitter", - "username": "mollymal", - "url": "http://twitter.com/changeme" - }, - { - "network": "instagram", - "username": "molly", - "url": "http://instagram.com/changeme" + "username": "Travis Green", + "url": "https://www.linkedin.com/in/travis-green-luse/" } ] }, "interests": [ { - "name": "internet of things", + "name": "Stock Trading Software", "keywords": [ - "Arduino", - "TI MSP430" ] }, { - "name": "data mining", + "name": "Autonomous Driving Software", "keywords": [ ] }, { - "name": "artificial intelligence", + "name": "Artificial Intelligence", "keywords": [ ] } @@ -59,111 +47,60 @@ "skills": [ { "name": "Languages and Frameworks", - "level": "", "keywords": [ "C", "C++", "Java", - "Javascript", - "Assembly", - "Common Lisp" + "Python" ] }, { "name": "Toolsets/OS", - "level": "", "keywords": [ - "MacOS", - "Ubuntu", "Git/GitHub", - "g++", - "TI LaunchPad" + "Unix VI" ] } ], "education": [ { "institution": "University of Hawaii, Honolulu, HI", - "area": "Computer Science (expected Spring, 2018)", - "studyType": "B.S.", - "startDate": "2013-09-01", - "endDate": "Present", - "gpa": "", + "area": "Major:Chinese, Minor:Computer Science", + "studyType": "B.A.", + "startDate": "2018-08-20", + "endDate": "2021-05-20", + "gpa": "3.64", "courses": [ ] } ], "work": [ { - "company": "UH Manoa Board of Publications", - "position": "Web Developer", - "website": "", - "startDate": "2015-08-01", - "endDate": "Present", - "summary": "Head of online presence for Ka Leo", - "highlights": [ - "Maintain, update, and oversee official college newspaper website", - "Drive, design and build student-community projects for UH Manoa" - ] - }, - { - "company": "UH Information Technology Services", - "position": "Help Desk Consultant", - "website": "http://www.hawaii.edu/its/", - "startDate": "2015-01-01", - "endDate": "2016-03-15", - "summary": "", - "highlights": [ - "Troubleshoot software, hardware and networking issues over the phone", - "Answer phone and email responses to the ITS Help Desk" - ] - } - ], - "volunteer": [ - { - "organization": "Center for Renewable Energy and Island Sustainability", - "website": "http://manoa.hawaii.edu/reis", - "position": "Software Developer", - "startDate": "2016-01-01", - "endDate": "Present", - "summary": "Lead developer for weather sensing project", - "highlights": [ - "Design firmware for distributed weather sensor network", - "Maintain custom data collection and storage infrastructure" - ] - }, - { - "organization": "", - "website": "", - "position": "Professional organization involvement", - "startDate": "", - "endDate": "", - "summary": "", + "company": "US Air Force", + "position": "Medical Technician", + "startDate": "2014-05-20", + "endDate": "2018-08-06", + "summary": "Managed family practice and pediatric medical care teams", "highlights": [ - "Chair, ACM Manoa, 2016-Present", - "Member, IEEE Student Branch, 2014-Present", - "Webmaster/IT Officer, IEEE Student Branch, UH Manoa, 2012-2013" + "I'm always on time", + "I'm used to working with deadlines", + "I have experience leading and redesigning programs", + "920 actual work days of face-to-face customer service and working on a team" ] } ], "awards": [ { - "title": "B+ Scholarship", - "date": "2013-Present", - "awarder": "State of Hawaii", - "summary": "Scholarships awarded to incoming freshmen and continuing students who complete a rigorous high school curriculum with a minimum overall GPA of 3.0 at a Hawai'i public school." + "title": "Air Force Commendation Medal", + "date": "2018", + "awarder": "US Air Force", + "summary": "A medal awarded to those with distinctive accomplishments during their enlistment." }, { - "title": "First place", - "date": "2015", - "awarder": "University of Hawaii Micromouse Competition", - "summary": "My team won first place in 2015. See my portfolio site for more details." - } - ], - "references": [ - { - "name": "Available upon request", - "reference": "" + "title": "Deans List", + "date": "x3", + "awarder": "University of Hawaii", + "summary": "I was awarded deans list in Spring 2019, Spring 2020, and Fall 2020" } ] -} \ No newline at end of file +} diff --git a/essays/2015-08-26.md b/essays/2015-08-26.md index 2bdabd710c4..a1174c31e13 100644 --- a/essays/2015-08-26.md +++ b/essays/2015-08-26.md @@ -1,23 +1,28 @@ --- layout: essay type: essay -title: Igniting the fire +title: 解決污染在於創新 # All dates must be YYYY-MM-DD format! -date: 2015-08-26 +date: 2020-12-12 labels: - - Software Engineering - - Learning + - Mandarin + - Innovation --- - - -Ever since I first grasped a paintbrush, I’ve always been eager to learn about design. Design is such a complex concept. For example, when looking at abstract art, its meaning can be completely different for different people. It motivates a person to think thoughtfully and has the potential to submerge them in a sea of imagination. It’s that special relationship between the viewer and the art that makes something as technical as software engineering interesting to me. - - - -I never used to think that design and technology went hand in hand. Thus, learning about software engineering and the role of design has been incredibly interesting to me. Design, implementation, and management are just some of the many things I wish to learn more about. Good art, in a way, makes a person question it. They become joined in the idea of visualization – where captivation meets inspiration. - - - -I am now starting to take a Software Engineering class. I hope to learn a lot through the course, but I know it will be just the beginning of my journey. By the time I’m done with it, I hope I’ve learned enough to take the next step in my life as a developer. But until then, my fire will keep on burning. +Below is an essay I wrote in Chinese about how the solution for climate change lies in innovation. Feel free to contact me if you'd like the references. + 解決污染在於創新 + +從布匹到量子計算機,你周圍的一切都來自創意。從此可見,創造力强大的力量。我認爲環境污染短期和长期的解決都在於創新的技術。 + +今天環境污染的問題是不可否認的。除了霧霾以外,世界其他的污染也不少,比如水污染、廢物污染等。但是現在,空氣污染緊急,對人類和環境有最深的影響,因此空氣污染是這篇文章的重點。按照世界衛生組織的數據表明,每年 4.2 百萬個人,因爲空氣污染,喪命。【1】最嚴重的是污染對全球暖化的影響。按照美國宇航局技術的報告,到 2100 年,海平面可能會上升 130 厘米。【2】但是,我認爲那時候的人不會擔心這個問題。 + +据 NASA 的科學家們指出,地球的剩餘生命大約三億年。 【3】聽這些詞的時候,人們可能會一點怕。但是,人類社會只有六千年的歷史。在這很短的時期中,人類的成就不少。 我認爲將來 6000 年的人類行為會遠比過去的 6000 年巨大。大規模工程會換代今天不可持续的能源。也許將來最厲害的工程項目是 Dyson Swarm 的概念。DysonSwarm 是一組接近太陽公轉的太陽能電池板。由於這些太陽能電池板靠近太陽,所以浪費的能源比較小。【4】但是,爲了實現這個主意,殖民通勤外太空的基礎設施必須已經存在。令人慶幸的是,傑夫貝佐斯成立的公司 Blue Origin 已經開始建立這急需的基礎設施,大幅減少太空旅行的費用。而且,Blue Origin 的飛船可以從月亮的隕石坑裏收集水,將其轉化為氫(別一種綠色能源)最終用它來做燃料。【5】有太空的空間和資源之後,工程的潛力是無限的。 + +但是,2120 的技術不可以解決今天的霧霾。我們也必須快速地處理現在的污染問題。造成當今煙霧的主要因素是碳排放。 排放物大多來自化石燃料。以煤炭和石油爲例,這兩個自然發生的事物都比較容易獲得。因此, 今天的汽車行業和製造業以這兩種能源爲主。對這些行業來説,切換到一種其他的能源非常貴。但是,因爲商業永遠忠於賺錢,所以切換到新的能源對公司更便宜,他們采用這些能源是不可免的。這是創新能發揮作用的地方。据專家說,這十年會帶來世界上第一個核聚變反應堆。【6】這兩個發電過程比較複雜,可是它跟核裂變反應堆最大的區別在於聚變的好處比核裂變的好處更多。相較於核裂變,核聚變更有效率,對環境更安全,可以在小的規模中製造。此外,核聚變產生的能量比燃煤產生的能量高四百萬倍。對於希望獲利的高能耗企業而言,與使用核能相比,使用煤炭將是更昂貴的。至於已經存在的綠色能源,在世界有一些地方,太陽能已經比煤炭能源更便宜。另外,隨著更多的研究的完成,太陽能將越來越負擔得起。 + +以特斯拉公司的電池技術爲例, 在 2010 年,鋰離子電池的輸出在$1,100 千瓦時左右,但是每個鋰離子電池的輸出已經改善到$156 千瓦時。按照 Elon Musk 電池日(2020 年 9 月 22 日)的講話,特斯拉最新的電池創新會降低千瓦時百分之十四。【7】然後,這些技術的進步不僅對我們的汽車有影響,而且因爲我們的手機,電腦筆記本,和許多其他的便攜式電子設備都有這種電池,結果是他們的價錢和重量會減少。如果無特斯拉的創新,今天的電池肯定沒有這樣強。這一樣技術可以應用於碳捕获的技術。現代碳捕获領域的缺點是無利可圖。但是,就像鋰離子電池一樣,如果碳捕获有足夠的關注、研究和投資、下代創新的碳捕获技術可以蓬勃發展。其實,有一些公司已經開始研究如何把二氧化碳變成可利用的材料。【8】 + +最後,因爲創新和投資的關係不小, 爲了快速地進步環保的領域, 有環保政策是必要的。最近,許多國家的環保政策曾加了。一碳稅爲例,在美國,十一州已經開始執行這個法律。如果一個公司的排放物太多了,它需要必須付錢給政府。這個項目的收益也可以在投資到其他的環保項目。在 2018 年,除了碳稅的法律以外,中國的政府也通過一個水保護法律。這個法律讓地方政府負責執行水污染的政策。【9】可是有時候, 這些政策也必須創新. 也許一個特別好的例子是現在“偉大的重置計劃” (The Great Reset)的提案。雖然這個比較新的計劃的條件已經又多又多元化,但是我認爲在它的經濟計劃中,有一些政策有道理。譬如,爲了投資環保,將來的經濟刺激計劃需要部分地專注於建議環保技術和公司的基礎設施。這樣大規模的環保項目有起始資金。一個另外的條件是將來的經濟刺激計劃需要部分地專注於技術職業培訓。如果綠色能源行業有足夠的投資,有足夠的專家,政府就可以一邊刺激自己的經濟,一邊可以開始解決一部分環境問題。 + +這並不是意味著人們應該停止回收,當然每一個人對環境當然有自己的責任。我只是想說爲了提高我們環境的質量,創新是必不可少的。 diff --git a/essays/2015-09-08.md b/essays/2015-09-08.md index e8a005cf339..cf97eb51094 100644 --- a/essays/2015-09-08.md +++ b/essays/2015-09-08.md @@ -1,98 +1,24 @@ --- layout: essay type: essay -title: Smart Questions, Good Answers +title: Staying Current - Cybersecurity Threats # All dates must be YYYY-MM-DD format! -date: 2015-09-08 +date: 2020-03-15 labels: - - Questions - - Answers - - StackOverflow + - Cybersecurity + - Ethics + - Rootkits + - Ransomware --- - + Staying Current 2 + +With technology becoming ever prevalent in our everyday lives, it’s no surprise that today’s cyber environment is plagued with a multitude of malevolent forces. These forces include the ZeroAccess Rootkit and the Cryptolocker Ransomware Exploit; two programs that have a history of plaguing users’ devices. -## Is there such thing as a stupid question? +In an effort to understand the ZeroAccess Rootkit, one must first understand what a rootkit is. The term “rootkit” contains the stem “root” which stands for “root access”, AKA administrative capabilities. This is simply a piece of malware that is able to remain undetected while stealing a devices information, like passwords and credit card numbers. In addition to this, they are also able to download and conceal other malicious programs. For example, you could have a Rootkit that installs a different trojan giving you a “Raid Shadow Legends” advertisement every 23 seconds. They are also able to get into a device’s hard-drive boot sector and therefore crack your devices’ encryption. Rootkits are able to do this by injecting themselves into a program, or worse yet, by becoming part of your OS’s kernel, or nuclei. This means the malware is not only invisible to antivirus programs, but also has access to control your computer’s hardware. Rootkits can infect a plethora of devices including windows machines, apple computers, and even smartphones. ZeroAccess is classified as a botnet, which is a network of devices that can be remotely accessed by an attacker. This means the attacker can remotely access a victim’s device and can use it to do various tasks, like bitcoin mining and click fraud. It is often the case that devices affected by botnets run slower than their uninfected counterparts, as the device is now running additional tasks that benefit the botmaster, or controller of the botnet. One distinct trait of ZeroAccess is that it has peer-to-peer infrastructure, meaning all the information is transferred and stored from device to device, instead of being located in one centralized server. This malware is able to spread by spam e-mails, trojan-downloaders, files on person-to-person file sharing platforms, and exploit kits. (Exploit kits scan web-browsers and find vulnerabilities to deliver a malicious payload. This type of malware was used in 2013 on websites including www.federalnewsradio.com and can be purchased in crimeware markets.) Another main contributor to the spread of ZeroAccess is that botmasters are able to pay third parties to infect devices. In addition to this, the botnet itself generates revenue for the botmaster. This is done through techniques like bit-coin mining, and more frequently, click fraud, which is where infected machines send HTTP requests to specific URLs. To summarize, this means both the process of infecting devices and having remote access capabilities to the network of infected device is profitable. This also generates revenue for the advertisement companies whose ads are being clicked, providing an incentive for advertisement companies to work with botmasters. As for mitigating risk or impact caused by ZeroAccess Rootkits, both situational awareness and following your company’s Security Protocol will always heed good results. Another way to mitigate risk of exposure to rootkits is to refrain from downloading any driver or driver updates from third parties (instead of your device manufacturer), as it is often the case that rootkits are downloaded through driver instillations and updates. -I’ve had instructors address a whole class and say, “There’s no such thing as a stupid question.” I now know that is in fact not true because I’ve challenged the statement and received the appropriate dumb-stricken, annoyed look. There are definitely stupid questions, and along with that, usually unhelpful answers. Though we all might be guilty of being callous and making people victim to our poorly formed questions, there are steps we can take to ask smarter questions that hopefully don’t illicit the dreaded “rtfm” or “stfw” response. +Cryptolocker is a ransomware trojan that was released in fall 2013. Ransomware, a type of malware, is often spread through vessels like infected email attachments and trojan horses. It then uses its access capabilities to lock a specific portion of the user’s computer or data, sometimes even restricting the user from using any part of the device and then demanding payment before returning it to the user. Other types of ransomware can fool a user into thinking his/her device is infected and will demand payment before fixing the problem. Cryptolocker is a type of ransomware that encrypts a user’s files and demands payment to unencrypt the files. Like most ransom negotiations, if the user doesn’t pay the ransom in time, the victim (or in this case the data), will be disposed of. Cryptolocker had a specific modus operandi. After infecting a device, the original Cryptolocker program would encrypt a user’s files, then a program would launch and demand the user to pay $100-$300 within 3-4 days through Bitcoin or MoneyPak vouchers. This program would also disable the user’s ability to run .exe files until the program deletes the user’s Shadow Copies. This is to prevent the user from backing-up their files. Cryptolocker uses a public encryption key on a Command and Control server, where the decryption key is also stored. As for which files were affected, Cryptolocker searches for over 40 different file extensions when encrypting files. The payment confirmation is done by typing a code into the CL pop-up. Unfortunately for cunning victims, invalid codes will advance the payment deadline, making this a problem unsolvable by brute-force. Cryptolocker was effective because many people often neglected, and still neglect, to back up their data and are willing to pay the ransom to protect precious files like documents, pictures, and spreadsheets. CL was effectively spread via email by disguising as customer support emails harboring malicious zip files. These malicious emails range from payroll invoices, to resumes, and even package-delivery notifications. Thankfully, the original Cryptolocker was shut down in 2014, but there are many other similar ransomware programs in the wild today like TorrentLocker, which uses Cryptolocker’s name to instill fear into its victims. -## What’s a smart question? +Though the ZeroAccess Rootkit and Cryptolocker go about attacking a system in different ways, they share many similarities in their motive, methods of payment, and infection techniques. First, their main function isn’t just to wreak havoc, but instead to generate revenue. ZeroAccess generates revenue by using a device’s memory to run revenue generating programs like click fraud. Cryptolocker also generated income, though it was directly from the user, not from ad-based revenue. Other similarities shared by both programs is that they both used bitcoin as a payment method and used email as a vessel to infiltrate systems. One could say that these two types of malware reflect overall trends in malware development. One such trend is high profit and high infection rate. Rapid response from white-hat groups and software companies make it more ideal for hackers to create malware that not only generates a lot of revenue, but also has a large outreach. This way, if the malware were to be obsolete in merely a month, the hacker would have generated enough capital to make the effort worth his time. As hackers need a discrete way to do business, cryptocurrencies like Bitcoin will likely continue to be preferred methods of payment between hackers and victims. Lastly, both of these programs are low maintenance in regard to upkeep by the hacker. Once these programs infiltrate a device, a hacker can just generate income passively, unless he chooses to become more involved with his victim’s device. Platforms for generating passive income are becoming more popular, even in places like malware markets. As we advance into the technologically superior future, malicious programs will become more elaborate, requiring hackers to have less experience and profits from malware like this to increase. -Stack Overflow, a question and answer site for programmers, is a great resource for anyone who may have issues with code or who may simply want to learn new or different methods of doing something. There I found examples of good questions and bad questions, which could probably be improved. - -In the following example, we examine the components of a decent question. In this case, the asker is trying to figure out a way to get the date of the previous month in Python. - -``` -Q: python date of the previous month - -I am trying to get the date of the previous month with python. Here is what i've tried: - -str( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 ) - -However, this way is bad for 2 reasons: First it returns 20122 for the February of 2012 (instead of 201202) -and secondly it will return 0 instead of 12 on January. - -I have solved this trouble in bash with: - -echo $(date -d"3 month ago" "+%G%m%d") - -I think that if bash has a built-in way for this purpose, then python, much more equipped, should provide something -better than forcing writing one's own script to achieve this goal. Of course i could do something like: - -if int(time.strftime('%m')) == 1: - return '12' -else: - if int(time.strftime('%m')) < 10: - return '0'+str(time.strftime('%m')-1) - else: - return str(time.strftime('%m') -1) - -I have not tested this code and i don't want to use it anyway (unless I can't find any other way:/) - -Thanks for your help! -``` - -While the heading of his question could be better, it does convey what he’s trying to figure out. Usually something as brief as “python date of previous month” is what other users would enter in as search terms on Google, making it easily found. Another good thing about the question is that it’s not just a question. The asker shows what he or she has done and that he or she has put in some effort to answer the question. And while it may not be as important as the question itself, the asker shows courtesy, which does increase the chance of getting an answer. - -``` -A: datetime and the datetime.timedelta classes are your friend. - -1. find today -2. use that to find the first day of this month. -3. use timedelta to backup a single day, to the last day of the previous month. -4. print the YYYYMM string you're looking for. - -Like this: - - >>> import datetime - >>> today = datetime.date.today() - >>> first = datetime.date(day=1, month=today.month, year=today.year) - >>> lastMonth = first - datetime.timedelta(days=1) - >>> print lastMonth.strftime("%Y%m") - 201202 - >>> - -``` - -The asker received six possible answers, and he or she was successful in inciting discussion from multiple users. The answers themselves were clear and were devoid of the rumored sarcasm and hostility of “hackers.” Since I myself have referenced this page and found it useful, I can confidently say that it is a good question. - -## The foolproof way to get ignored. - -While there are decent questions that benefit everyone, there are those one can ask to create an entirely different effect. In the following example, a user asks how he would, in short, create a desktop application with Facebook. - -``` -Q: Facebook Desktop Notifier - -I am a beginner programmer that have never used anything other than what's included in a language. - -I am trying to create a desktop application that notifies me anytime I get an update onfacebook. -How should go about doing this? Thanks in advance. - -edit Sorry I was not clear. Is there any way to make a DESKTOP application with facebook? -``` - -A simple “yes” would have answered the question, but we know that’s not the sort of answer he or she is looking for. Fortunately, someone kindly responded with a link to Facebook’s developer website. The asker should have done more research on his or her potential project. Then further down the road, he or she could have asked more specific and detailed questions that wouldn’t require a thousand-paged response for a sufficient answer. - -## Conclusion - -When we rely on others’ generosity and expertise to provide answers to our questions, it should hold that the question we ask should be one that leads to efficient and effective help that not only benefits us, but also the people we ask and others who might ask the same question in the future. Thus, if you have a question… make it a smart one! Asking questions may not always get you the best answer, but asking them in a way that will make others want to answer them will increase the success of finding a good solution and make it a positive experience on all sides. \ No newline at end of file +Malware has been a problem since the dawn of the internet and will continue to be a problem. However, cyber security professionals and society as a whole can learn from the weapons of the past to make todays defenses. diff --git a/essays/2016-02-06.md b/essays/2016-02-06.md deleted file mode 100644 index 807ca1d5a60..00000000000 --- a/essays/2016-02-06.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -layout: essay -type: essay -title: The difficult things will always be difficult -# All dates must be YYYY-MM-DD format! -date: 2016-02-06 -labels: - - Engineering ---- - -*Difficulty: a thing that is hard to accomplish, deal with, or understand.* - -One of my friends asked the question earlier last week -- why is it so hard to be an officer for the student branch? Why is so hard compared to working at my on-campus job? This question came after he struggled a little with bookkeeping for the student organization. - -Now I gave him the standard answer - being an officer of an organization requires that you manage your time between school and work. There isn't anyone telling you what to do. It's the answer any good mentor would give, and is mostly true. - -But the more I though about it, the more I wondered to myself...damn that's a really great question; it's one that deserves some more thought. Most people I think stop at the answer I gave previously - he obviously isn't managing his time properly. - -Here's what I think: the difficult things will always be difficult. - -## In the context of programming - -In the context of programming, this has always been true. The difficult problems have always been different, although changes in technology can change the landscape quite a bit. "Business" type applications are the things that come to mind for me. Those types of applications are usually coupled in some way with people ... and people are awfully hard to deal with! - -Consider that one of the most popular content management systems is also considered the most horrible - Wordpress. But really, is there anything that fills that need? If it was so easy in the first place, where is the solution? Where's the magic CMS that is designed well enough that everyone hops on the boat to use it? - -Some things are just difficult - building applications that humans use is hard, and will probably be hard for at least the near future. - -## In the context of engineering - -Ever hear people ragging on engineering companies for delivering late and way over budget? Well, some engineering jobs are really difficult, especially if the requirements and funding are undulating underneath you. Because of the nature of the problem, sometimes engineering firms require large amounts of engineers and workers, inviting further problems and delays. - -The Honolulu Rail project at home has become this sort of poster child of failure, budget overrun and overall incompetence in Hawaii. Well, working though regulatory boards and fiscal procedures in Hawaii seems like it's a mind bogglingly difficult job to do. Granted, there might be some fishy stuff going on, but I refuse to believe that everyone is involved for nefarious reasons. - -The problem of creating an unprecedented public transportation backbone on an island is difficult! I'm not sure we would have done it right, even if the best people were involved. - -## In the context of relationships - -So in the end, we realize that all engineering and programming is there for a reason - to serve human needs. Maybe that's why those things are difficult, because they both involve humans and are for humans. - -Relationships, regardless if they're romantic or not take work. Humans are fickle creatures and relationships can come and go with the wind. To properly maintain something over time requires work. Family takes work. Marriage takes work. We live to figure out what works and what doesn't and hope that as we move forward we're improving. - -Relationships have always been difficult, and by nature will continue to be so. - -## Okay! - -So back to the original premise; why is being one of the club officers so difficult? - -And the final answer - it's supposed to be difficult, and it's supposed to challenge you, just like everything else that humans do that is difficult: programming, engineering, engaging in relationships, pondering the universe, etc. - -Ultimately the question you should really ask yourself if something if particularly difficult is then "is it worth it"? That is something that is context specific and only you can answer yourself. \ No newline at end of file diff --git a/essays/JavaScript-A-Lawless-Utopia.md b/essays/JavaScript-A-Lawless-Utopia.md new file mode 100644 index 00000000000..31b69fde1f5 --- /dev/null +++ b/essays/JavaScript-A-Lawless-Utopia.md @@ -0,0 +1,19 @@ +--- +layout: essay +type: essay +title: JavaScript A Lawless Utopia +# All dates must be YYYY-MM-DD format! +date: 2021-01-17 +labels: + - JavaScript + - Learning +--- + + Throughout my academic experience, I've studied multiple programming languages including: Java, C/C++, Python, and HTML. After much experience in these compiled languages, my first week programming in JavaScript has left me with some strong opinions. + + My favorite part of JavaScript so far is its ease of use. More specifically, JavaScript does not require the user's input to be as specific as it would be in another language like C++. Simply put, JavaScript does not have as many rules as C++. For example, In JavaScript, I can define a variable of type "let", regardless if the character is a string, integer, or character. This makes the language easier to learn, as the user no longer has to remember as many variable types. Furthermore, there are many different ways to type the same thing using JavaScript. In some (but not all) instances, when accessing a property of an object in JavaScript, the user can use dot notation or bracket notation to achieve the same result. This allows the user more freedom to write their code in a syntax that they prefer, and allows for users to have their own unique style. Lastly, JavaScript makes some tasks much easier than if they were done using another language like C++. Take the JavaScript unshift() function for example. This function will add an object to the beginning of an array of your choosing. If one were to do this in C++, they would have allocate memory for a new array, add the desired object to the beginning of the new array, and then append the items of the old array into the new array. This is just one way to solve this problem, but it clearly requires more steps in C++ than in JavaScript. + + On the other hand, with this ease of usability comes the potential for errors. Although C++ is said to have more rules, many of these rules are in place to protect the user from themself. For example, using variable type "let" in JavaScript might be easier for the user when initially learning the language, but may fail to protect the user at runtime when the user assigns a float value to a variable meant to hold an integer value. Furthermore, without these errors, debugging the code will be a much more painstaking process. Additionally, I believe programming an intermediate project in C++ requires the user to have a decent understanding of memory allocation. This level of understanding makes the user a more well-rounded programmer. + + In summary, I feel the tools and simplicity that JavaScript offers are both powerful and beneficial to the coding world. However, I also feel that this simplicity can lead to unexpected coding errors and a lack of genuine programming comprehension amongst new programmers choosing JavaScript as their first programming language. + diff --git a/essays/The-Importance-Of-Asking-Smart-Questions.md b/essays/The-Importance-Of-Asking-Smart-Questions.md new file mode 100644 index 00000000000..44b80bfec9d --- /dev/null +++ b/essays/The-Importance-Of-Asking-Smart-Questions.md @@ -0,0 +1,36 @@ +--- +layout: essay +type: essay +title: The Importance Of Asking Smart Questions +# All dates must be YYYY-MM-DD format! +date: 2021-01-23 +labels: + - Communication + - StackOverflow +--- +It is erroneous to assume today’s programming elders mastered their technical fields without encountering roadblocks in their educational journey. No one is born with technical expertise; it must be learned over time. Thankfully many these roadblocks have already been overcome by others, and with the genesis of open source software and communication forums like Stack Overflow, the answer to ones roadblock is likely just a few clicks away. + +However, It is also erroneous to assume that a user will not experience hurdles their first few times seeking technical assistance, whether it be on a forum like StackOverflow, a group messaging app like Discord, or even on a customer support helpline. With this ease of communication, it is not uncommon to see unspecific, uninformative, ungrammatical, and even unprofessional questions raised in these forums. An example would be the following post on stack overflow that asks [How should I approach the problem of making a fitness timetable?]( https://stackoverflow.com/questions/65865127/how-should-i-approach-the-problem-of-making-a-fitness-timetable). According to Eric Raymond’s “How To Ask Questions The Smart Way”, this question is unspecific and unexplicit, as defined below. The asker then follows with this description: + + + + + + +Although this provides the reader with a little more clarity on main issue at hand, it also introduces many other open ended questions like “What is a fitness timetable?”, “Edit the timetable how?”, “What will the table be used for?”, and “what have you done so far?”. Lastly, although there is no code written in this question, it is a good example of Raymond’s notion of “volume is not precision”. Had the user asked only one question and focused more on one specific aspect of the project, he may have seen better results. It’s no surprise that even though the question was only asked 25 minutes ago, the question has already been downvoted 3 times and is now closed. + +On the other hand, a smart question will usually receive a correct and timely solution if asked in the appropriate forum. For example, the following question “[Why is this C++ constructor called twice at the same memory location in this implementation of a linked list?](https://stackoverflow.com/questions/65853907/why-is-this-c-constructor-called-twice-at-the-same-memory-location-in-this-imp)” not only asks for an answer to one specific problem, but also mentions the fact that the constructor is in the implementation of a linked list. He follows up the question by providing a link and page number to the learning material where he is encountering the problem and code to be referenced by the reader. + + + + + +He then adds more specific detail by providing the actual output of the code, and his expectation of what the code should output. + + + + + +As seen above, he then wraps up the post by stating his question again, ensuring the reader has not diverged from the original question at hand. In addition to being precise, this user has also shown that he has put effort into finding the solution to his problem by researching it on his own and providing those helping him with an in-depth explanation about the problem. Lastly, the question is free from politics and the user is able to express that he is probably at fault instead of the author of the text he is referencing. It is likely due to these reasons that this question has already received 7 upvotes and 2 answers in less than 24 hours. + +Being an effective communicator on sites like StackOverflow not only help users solve their engineering problems, but also trains them to be great communicators in the technological and engineering sector, where problems can be very in-depth and complex, and asking for help is an essential part of the job. diff --git a/essays/Wealth-And-Prosperity.md b/essays/Wealth-And-Prosperity.md new file mode 100644 index 00000000000..32b993df63c --- /dev/null +++ b/essays/Wealth-And-Prosperity.md @@ -0,0 +1,19 @@ +--- +layout: essay +type: essay +title: Wealth And Prosperity +# All dates must be YYYY-MM-DD format! +date: 2021-01-21 +labels: + - Mindset + - Interests + - Goals +--- + +As the field of computer science broadens, it is becoming ever important to specialize in a particular discipline. I find the fields of high-frequency trading, artificial intelligence, and autonomous driving to be the most interesting. However, in my opinion, the most important disciplines are ones that not only yield profit, but also have a positive impact on the world. I plan to eventually launch a start-up that meets both of these requirements. + +AngelList founder Naval Ravikant has mentioned that there are 3 types of leverage: money, people, and technology. Money and people (ex: employees working for you) must be given to you or obtained over a long period of time because these two things can not be created (legally). However, with technology, you are able to access the minds and wallets of users and customers all across the world. I plan to use software to leverage good ideas and, as a result, yield a profit. + +However, it is also equally important to have a positive impact on the world. I believe how one makes their money is more important than how much money they make. During my last few hours of life, I think it will comfort me to know that I left the world in a better condition than it was in when I arrived. Because of this, my entrepreneurial endeavors will not only be profitable, but also based around an idea that contributes to the moving train of society. + +Starting a software company is difficult but is doable with enough hard work and drive. It’s impossible to know everything you’ll need to know prior to actually launching a profitable company, but as long as you have some knowledge to use as a foundation, building on top of it is simply a matter of time and concentrated effort. Over the next few years, I plan to develop these foundations for things like building/managing projects and find my startup idea. diff --git a/images/badCode1.png b/images/badCode1.png new file mode 100644 index 00000000000..36f2915f939 Binary files /dev/null and b/images/badCode1.png differ diff --git a/images/eggman (2).png b/images/eggman (2).png new file mode 100644 index 00000000000..f2c40f3af30 Binary files /dev/null and b/images/eggman (2).png differ diff --git a/images/eggman.png b/images/eggman.png new file mode 100644 index 00000000000..1f7061d5bd6 Binary files /dev/null and b/images/eggman.png differ diff --git a/images/goodCode1.png b/images/goodCode1.png new file mode 100644 index 00000000000..4e490e43581 Binary files /dev/null and b/images/goodCode1.png differ diff --git a/images/goodCode2.png b/images/goodCode2.png new file mode 100644 index 00000000000..d746850b199 Binary files /dev/null and b/images/goodCode2.png differ diff --git a/images/me_resized.jpg b/images/me_resized.jpg new file mode 100644 index 00000000000..8cce48a381b Binary files /dev/null and b/images/me_resized.jpg differ diff --git a/images/poker (2).jpg b/images/poker (2).jpg new file mode 100644 index 00000000000..585160d412d Binary files /dev/null and b/images/poker (2).jpg differ diff --git a/images/poker.jpg b/images/poker.jpg new file mode 100644 index 00000000000..813cd4e9d09 Binary files /dev/null and b/images/poker.jpg differ diff --git a/images/ttt (2).png b/images/ttt (2).png new file mode 100644 index 00000000000..3a2c63c3142 Binary files /dev/null and b/images/ttt (2).png differ diff --git a/images/ttt.png b/images/ttt.png new file mode 100644 index 00000000000..4d3fd00b2fc Binary files /dev/null and b/images/ttt.png differ diff --git a/projects/project-1.md b/projects/project-1.md index 9131e53aa5f..7c11272d7c0 100644 --- a/projects/project-1.md +++ b/projects/project-1.md @@ -1,44 +1,20 @@ --- layout: project type: project -image: images/micromouse.jpg -title: Micromouse -permalink: projects/micromouse +image: images/poker (2).jpg +title: Calculate my Outs (Poker App) +permalink: projects/CalculateMyOuts # All dates must be YYYY-MM-DD format! -date: 2015-07-01 +date: 2020-03-01 labels: - - Robotics - - Arduino - - C++ -summary: My team developed a robotic mouse that won first place in the 2015 UH Micromouse competition. ---- - -
- - - - -
- -Micromouse is an event where small robot “mice” solve a 16 x 16 maze. Events are held worldwide. The maze is made up of a 16 by 16 gird of cells, each 180 mm square with walls 50 mm high. The mice are completely autonomous robots that must find their way from a predetermined starting position to the central area of the maze unaided. The mouse will need to keep track of where it is, discover walls as it explores, map out the maze and detect when it has reached the center. having reached the center, the mouse will typically perform additional searches of the maze until it has found the most optimal route from the start to the center. Once the most optimal route has been determined, the mouse will run that route in the shortest possible time. - -For this project, I was the lead programmer who was responsible for programming the various capabilities of the mouse. I started by programming the basics, such as sensor polling and motor actuation using interrupts. From there, I then programmed the basic PD controls for the motors of the mouse. The PD control the drive so that the mouse would stay centered while traversing the maze and keep the mouse driving straight. I also programmed basic algorithms used to solve the maze such as a right wall hugger and a left wall hugger algorithm. From there I worked on a flood-fill algorithm to help the mouse track where it is in the maze, and to map the route it takes. We finished with the fastest mouse who finished the maze within our college. + - Java + - Probability +summary: An app that helps people practice calculating their possible outs (or stronger hand possibilities). -Here is some code that illustrates how we read values from the line sensors: - -```js -byte ADCRead(byte ch) -{ - word value; - ADC1SC1 = ch; - while (ADC1SC1_COCO != 1) - { // wait until ADC conversion is completed - } - return ADC1RL; // lower 8-bit value out of 10-bit data from the ADC -} -``` - -You can learn more at the [UH Micromouse Website](http://www-ee.eng.hawaii.edu/~mmouse/about.html). +--- +I worked on this project by myself during the Spring 2020 semester. It is the back-end of a mobile app that helps users calculate how many of the remaining (unshown) cards can strengthen their poker hands. After recieving their cards and looking at the flop, the user would be prompted to enter a number that corresponds with how many possible cards can strengthen their current hand. It is written in Java, and makes good use of Object Oriented Programming with objects like "hand, deck, player, and card". I have decided to move on to more profitable ventures in lieu of writing the front-end of this app, but I feel it is a good representation of my Java coding abilities. +The hardest part about this project was the fact that I originally didn't account for "double-counted cards". For example, I had to figure out how to prevent the program from double counting an "8 of hearts" if that card would give you both a flush and a straight. I also gained an appreciation for very detailed planning, as my lack of planning forced me to rewrite a lot of code. Below is a link to a video of me explaining the project. +[https://www.youtube.com/watch?v=XxRA5VM5DDE&t=1s](https://www.youtube.com/watch?v=XxRA5VM5DDE&t=1s) diff --git a/projects/project-2.md b/projects/project-2.md index 95327a7152f..0d961249234 100644 --- a/projects/project-2.md +++ b/projects/project-2.md @@ -1,25 +1,21 @@ --- layout: project type: project -image: images/vacay-square.png -title: Vacay -permalink: projects/vacay +image: images/ttt (2).png +title: TicTacToe AI +permalink: projects/tictactoeAi # All dates must be YYYY-MM-DD format! -date: 2015-12-15 +date: 2020-06-15 labels: - - Javascript - - Meteor - - MongoDB - - GitHub -summary: A responsive web application for travel planning that my team developed in ICS 415. + - Python + - Artifical Intelligence +summary: Playing a TicTacToe game against an AI. --- - +In this project I contributed to a program that creates TicTacToe rules and gives the computer instructions on how to play TicTacToe (with the exception of the UI). The program treats the game of TicTacToe as a search problem, and uses different concepts to solve it including: utility, minimax, and recursion. The AI is sometimes able to beat the user (depending on how the user moves), but the user can never beat the AI. -Vacay is a web application that I helped create as a team project in ICS 415, Spring 2015. The project helped me learn how to design and implement a responsive web site. -Vacay is implemented using [Meteor](http://meteor.com), a JavaScript application platform. Within two weeks, we created a website that implements several types of reservations including flights, hotels, and car rentals. +This project helped me develop my skill of working alone, and gave me hands-on experience of coding using the AI concepts associated with search problems. Below is a link to a youtube video of the program. -In this project I gained experience with full-stack web application design and associated technologies, including [MongoDB](http://mongodb.com) for database storage, the [Twitter Bootstrap](http://getbootstrap.com/) CSS Framework for the user interface, and Javascript for both client and server-side programming. - -Source: theVacay/vacay \ No newline at end of file + +[https://www.youtube.com/watch?v=wA1ioluQNvM](https://www.youtube.com/watch?v=wA1ioluQNvM) diff --git a/projects/project-3.md b/projects/project-3.md index d05cd307f56..30152bb52cd 100644 --- a/projects/project-3.md +++ b/projects/project-3.md @@ -1,61 +1,20 @@ --- layout: project type: project -image: images/cotton-square.png -title: Cotton -permalink: projects/cotton +image: images/eggman (2).png +title: Watch Out for Eggman! +permalink: projects/eggman # All dates must be YYYY-MM-DD format! -date: 2014-04-12 +date: 2018-11-30 labels: - - Lisp - - GitHub -summary: A text adventure game I developed for ICS 313. + - Sprite Sheets + - Java + - Teamwork +summary: This is a side-scroller my roommate and I made while in an introductory programming class. --- - +My roommate and I submitted this program as our final project for our Introductory programming class with Java. It is a side scrolling game that uses sprite sheets and moves images through a program written by a UH Grad student called "EZ.java". The object of the game is to collect as many coins as you can while avoiding the hazards. -Cotton is a horror-esque text-based adventure game I developed using the functions and macros built from The Wizard's Game in [Conrad Barski's Land of Lisp](http://landoflisp.com/). Slightly more interesting and convoluted! (It is not that scary.) - -To give you a flavor of the game, here is an excerpt from one run: - -
- -
-You open your eyes, and you are greeted by an unfamiliar ceiling.
-Startled, you get to your feet and quickly scan your surroundings. It's
-dark except for the stream of light coming from a crack on the only boarded
-window in the room. You try to peek through the crack, but you cannot see
-anything. You wonder where you are and who could have possibly brought you here.
-
-<--------------------help------------------------>
-Enter quit or one of the following commands -
-Weld light look walk pickup inventory help h ?
-<------------------------------------------------>
-
-look
-The room is a picture of decay with only a faded number identifying it as room-4. The bed you were
- lying on is stained with what looks like dried blood. Could it be your blood? No - it is not. The
- only way out of the room aside from the door to the corridor is a window that is boarded shut. It
- looks like it has been like that for decades. There is a door going west from here. You see a candle
- on the floor. You see a match on the floor.
-
-pickup candle
-- you are now carrying the candle -
-
-pickup match
-- you are now carrying the match -
-
-light match candle
-
-The candle is now lit. It illuminates everything in the room.
-
-walk west
-The corridor is lit with the candle. It is so long that you cannot see to the end. You notice that
- there are words written on the wall. There is a door going east from here. There is a way going north
- from here. There is a door going south from here.
-
- -
- -Source: jogarces/ics-313-text-game +Though the presentation of the game needs work, the project was helpful in teaching us basic programming concepts like Object Oriented Programming. Below is a link to a youtube video demonstrating the project. +[https://www.youtube.com/watch?v=JhQfGfVwmRI](https://www.youtube.com/watch?v=JhQfGfVwmRI)