weiran99-blog
weiran99-blog
Comp491 Blog
19 posts
Don't wanna be here? Send us removal request.
weiran99-blog ¡ 5 years ago
Text
Reflection on 492 Open Source Community
This course offers me great opportunity to get involve in open source community. I heard open source community before, but it’s my first time to involve in this and get better understanding of how the community works. The open source community I choose is freeCodeCamp. I think it’s an interesting experience to talk with people on the channel and see how people discuss about the project. If I join an open source community next time, I have more confident on building contributions to the community. I know how to find a good open source community after this course and will try to contribute what I can. What’s more the reading allows me to learn a lot about combination of philosophy and computer science. In this course, ourselves choose articles that we want to discuss in the class. I found lots of topic really interesting in the discussion. While we are having discussions in the class, I can know what others think about the topic. Although of class became online due to the COVID-19 pandemic, our discussion on the class channel is still interesting.
0 notes
weiran99-blog ¡ 5 years ago
Text
Reflection on algorithm bias
Algorithm bias describes systematic and repeatable errors that create unfair outcomes. Along with the convenience that algorithm brings to people, algorithm sometimes create unfair outcomes. Personally, algorithm is subjective. It is made by human and the creator of a particular algorithm is subjective. The data set that an algorithm use is also subjective. Human create algorithm that supposed to be objective but it is not that case in the real life. Algorithms are more than equations. They define us. Since algorithms are made by human beings so that it reflects human’s thought. Human decides which data is included, what mathematics should be used and let the computer calculate a final answer for the question. However, three aspects Data, constraints, and algorithm principles will affect algorithm and lead to algorithm bias. Data sets has biases due to ways people collecting data and those collector might has bias themselves. There are constraints around data as well. Even good data can lead an algorithm to make decision incorrectly. There are many companies experienced algorithm bias. One example of machine learning algorithms that fall victim to bias is google translate. A poem is written in Turkish language and there is only one pronoun that covers every kind of singular third person. Since there is no she or he in the poem, google translate cannot directly transfer the singular third person in the poem. Instead, google translate has to guess which “o” means he, she, or it. Google translate has a gender bias and translates “he” with hardworking and “she” with lazy. The algorithm is based on its translation on corpus of human language and reflects the already existing bias. People cannot avoid algorithm bias unless they figure out how to avoid human’s bias. However, there are some ways that we can reduce algorithm bias. One interesting point that we discuss in the class is that we can improve education among female and people in different race. If they have same education level, the bias will be reduced. Many tech companies provide training and workshops to check people’s understanding of bias. They can detect bias and reduce it.
0 notes
weiran99-blog ¡ 5 years ago
Text
Reflection on facial recognition
Facial recognition is a very popular technology that can identify or verify a person from an image or video resources. People are arguing that they have their right to protect the information of their faces. However, the right to protect people’s face information is not guaranteed by the social contract theory. Government needs to protect everyone’s safety and facial recognition provides convenient ways for the government to do that. For example, when people go to another country, they need to do a face recognition and fingerprint at the customs. The information of people’s face is given to the government and people give up some right to live in society in order to better society.
There are many benefits that facial recognition brings to the society. It’s easier to find missing people by using facial recognition than using other tools. People can quickly checkout in the supermarket if they use facial recognition to pay. However, facial do have some drawbacks. Facial recognition might generate some error while people are having make, accessories on their face. It also has bias that it’s more accurate on white people than on black people. 
In the discussion, we also compare facial recognition technology with fingerprints. People have used fingerprint for hundreds of years and it’s a technology that people are more familiar with. Compare to facial recognition, fingerprints technology has higher accuracy. People are more care about their face information than fingerprint information. Others will not look at your finger when they meet you, but they are look at your face. Hence, facial recognition is more personal than fingerprint.
If facial recognition on campus grounds to detect strangers, I agree with this, but it should be at the entrance of the building or public area. It’s not propriate to have it at student’s private space for example student’s dorm. I will not ok with Facebook automatically tagging me in photos. Facebook should ask my permission to do that.
0 notes
weiran99-blog ¡ 5 years ago
Text
Reflection on 02/04 discussion
Autonomous vehicles are popular technology and it will make people’s life easier and safer. People don’t have to drive in the AVs, hence it’s convenient for people to own an autonomous vehicle. However, there are still some moral problems that public needs to discuss about autonomous vehicles. If people can figure out the moral problems involved in autonomous vehicles, it would be a great improvement in technology. If a car accident happens, should autonomous vehicles use utilitarian models that will sometimes sacrificing the vehicles’ passengers. Personally, I don’t think that using a utilitarian model is a good idea. It’s unfair that people who obey the rules might be killed. What’s more people will refuse to use these vehicles due to social dilemma. No one wants to buy a car that might kill himself. The model not only affects people who is driving the cars, but also affects everyone including pedestrians. For me, I don’t want a car using this model unless I have to if all the cars turned autonomous. If an accident is inevitable, there are some factors that an AV should use, and some an AV should not. The model should take the crash optimization algorithm, the algorithm minimizes the impact of the accident, into account. It’s better to save more people’s life in general. However, it’s still a moral problem that people who are saved breaks the rules. The number of people involved, speed of the vehicles, weight of the vehicles should also be the factors that an AV use. Race, previous background, and age of the people should not be factors used in the model.
0 notes
weiran99-blog ¡ 5 years ago
Text
Reflection on 01/28 discussion
Our in-class discussion was based on the article of Ethics for the information age. The article introduces different theories that people can follow while facing moral problems. It’s interesting to combine ethics with computer science since we will figure out solutions that we can follow when we meet moral problems in technology. There are many different rights that people have in their daily life. Privacy is the ability that people schedule themselves and their information. Personally, privacy should be counted as a right. People should have the right to make protect their private information and they can express themselves selectively. The article introduces positive right and negative rights. Privacy should be a positive right since others cannot ensure that one person has his right of privacy if they do nothing. If one person wants to have the right of privacy, others should not try to find the private information. It’s a limited right since it’s not guaranteed to have it. There are still some ways that others can get the private information of a person. Rule utilitarianism and social contract theory are introduced in the story of Matt and Josh. Social contract theory states that “morality consists in the set of rules, governing how people are to treat one another, that rational people will agree to accept for their mutual benefits on the condition that others follow those rules as well”. Rule utilitarianism focus on the maximum benefits of everyone. Rule utilitarianism is the ethical theory that holds that we ought to adopt those moral rules that, if followed by everyone, lead to the greatest increase in total happiness over all affected parties. It’s hard to decide what Matt should grade on Josh. Based on social contract theory, Matt should honestly grade Josh and explain to the professor. While in rule utilitarianism, Matt should give Josh a good grade since this will lead to the greatest increase in total happiness.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on seminar
Senior seminar helped me to get skills and help me prepare for a life of civic engagement. In this course, we are working on an Open Source project. This is the first time that I know and learn about Open Source project. In the first-class discussion, we discussed about what is H/FOSS project, and now I can truly get involved in the community and contribute. Instead of just learning the theory of FOSS in the class, I searched over lots of FOSS projects and decides to work on freeCodeCamp. Involving in the community really helped me to get ready for life. The discussion in the gitter room is like a meeting and everyone is sharing they opinions toward the bugs. Joining the community, comment on the github ticket give me more confidence of joining a program in the future. Doing the class activities of seminar, I learned skills like installing and setup virtual box and how to grep a function among large amounts of files. In the bug gardening activity, I looked at the issue tracker of freeCodeCamp and know more about how to fix issues and share ideas of issues. I feel more prepared for a similar situation during work in the future. At the end of the semester, I feel like I have more understanding of H/FOSS projects and the history behind that. During this semester, we had 13 discussions including FOSS Licensing, software testing, and H/FOSS motivations. During class discussion we discussed our opinion as a group and report a group’s idea to the whole class. I can hear more ideas from others than thinking of the problem by myself. In class discussion truly helped me know more about the history behind the open source projects. We haven’t meet most of the topics we discussed during class time. Those skills such as software testing, software architectures, and software processes are very important. I might meet some problems during work that can be solved by those skills in the future during work.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on 12/10
Red hat is a software company provide open source products to enterprise the community. By using open source, the company create a model, “the most powerful thing that red hat has accomplished”, and brings the company nearly a billion dollars in annual revenue. Red Hat’s model is to support communities by contributing to the code and by creating projects from upstream projects. Customers are able to subscribe a stable release of Red Hat Linux. Rad Hat’s main revenue is sell new features to their customers. Customers don’t have to worry about the software being buggy and error. Peter Levine argues that “the next Red Hat” will never happen since Red Hat’s model won’t work. The model doesn’t allow adequate funding for research, investment. In the chart provided by Peter Levine, Red Hat had a low revenue during the years. It can’t compete with proprietary companies. Personally, I agree with Peter Levine’s argument that there will never be another Red Hat again. Meritocracy is an important concept. In a meritocracy, the best ideas win, and the best features make it into the end product. Successful work determines which projects rise and gather effort from the community, and everyone has access to the same information. Meritocracy exists sometimes in a FOSS project. In the view of individual, if a person works hard and contribute a lot to the project, he will be recognized and become an active or core developer. However, when we view among Foss Projects, the ones with more contributors are not the best project. Meritocracy does not exist in technology industry. People don’t have same information while they come to the industry. Some major technology companies are recognized by their revenue, which implies the success of their projects. We also discussed the imbalances in FOSS. The representation imbalances in FOSS are larger than in traditional companies. There are several of reasons caused this. It’s challenging for minorities to join the FOSS community. People with free time and have money to lie are able to join the community. Foss community usually gives non-materialistic rewards, so that contributors are not paid. Women are lack of time since most of them have to take care of their family. They work to get salary for their family. Hence, there are not much women join the FOSS community. FOSS could improve by allowing employees to work on FOSS project during company hours. Employees can get salary and improve their ability at the same time. It will be a win-win situation.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on 12/6
As open source projects become more and more popular, more and more people contribute to open source projects. However, open source projects don’t pay any money to the contributors. What motivates individuals to contribute became a good question to discuss. The most important motivation is introduced by the learning Theory. While people get involved with a H/FOSS project, they can learn by doing and get some real-world experience. People will be more experienced and they are able to communicate with other contributors. In the project freeCodeCamp, the company even offers jobs to good developers. When more and more people join the open source community, there are some important keys for a project to have a sustainable development. It’s important for the members of the community to communicate frequently. Dynamic Hierarchy is a key as well, since new comers should have chance to communicate with the core developers and learn stuff. The project should not be relied on a single leader, and everyone should get involve in the project. There are either advantages or disadvantages for a company to adopt a FOSS model. Becoming a FOSS project, more eyes will put on the project then the project will become more reliable. There will be more high-quality contributors comment on the project and revise it for free. Lots of money will be saved by the free contributors. Instead of paying money to hire tester to the project, the projects will be tested by the user. Since users are part of the development, the project is close to the customer. It will have broader market. However, being open sourced will also bring disadvantages to the company. The company will be lack of control over the project, instead, user will get control of it. One of the most important benefits that a FOSS project has is that a FOSS project is considered more reliable and secure than closed source software. There are more eyes on a FOSS project to check the software, and even little bugs will be reported on the ticket. The contributors offer high-quality feedback or review from the community to find bugs for free. Since lots of users get involved in the community, users themselves care more about the sustainability and security. It’s easy to detect any injected malicious code since the code base is open to the public.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on agile
As more and more software is developed, the system of software became more and more complex and larger. It’s hard for people to build a large software system without a plan. Software process models give overall plan that direct people working on large systems. There are plenty of different software process models introduced in the article “Software Process Models”. Code-and-fix is one easy software process model that people can follow. In this process, people write the code and fix the bug as long as they notice it. This process is only suitable for small projects and it’s pretty straight forward to see your result directly. Another process model is called waterfall model is a linear process that it describes a sequence of activities and corresponding artifacts. This process is suitable for the project that is easy to divide into different phases and it’s very organized for each group since they know what they need to do. This process depends on if you know the requirements in advance and are sure that they will not change in the future. What’s more, sashimi is another model similar to the waterfall model except that sashimi has phase overlap. The overlap shows that requirements can’t be completed until multiple different architecture options are explored. It’s appropriate for medium size projects, and it allows you to communicate between different levels of project. Agile describes the ability to create and respond to change, is a set of principles and methods. Agile development is characterized by emphasis communication between each stage. It communicates frequently with costumers and welcome changing requirements. There are 12 agile principles which focus on collaboration, self-organized team, and communication. There is one principle says that “Welcome changing requirements, even in late development”. Hence, customer will get advantage that they can change their requirements while they want. It is better than waterfall model that people cannot change their requirements. Agile development brings lots of advantages that it gives collaboration with all skateholders, it’s high efficiency, and it’s gives fast response to changes in requirements. Scrum is one of an agile framework and it organizes development into a sequence of sprints.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on 11/26 discussion
Software testing is the activity to check if the software has no defects and the actual value match the expected value. What’s more, it also finds errors and see if it meets all the requirements. If we don’t test on the software, it could be dangerous. In history, monetary and human loss was caused by the software bugs. In the class we discussed different kinds of testing. Black box, white box, and gray box testing are three different types of software testing. White box testing focuses on the internal structure, design, and coding. In this type of testing, the tester can view the code. White box testing has advantages that testers are able to find hidden errors behind the software and it can be easily automated. However, white box testing has disadvantage that it’s expensive and complex to test and testers should be familiar with the code. Black box testing is focus on testing the functionality of the software and the testers are testing the software without looking at the code. The advantage of the black box is that it can find bugs that are hard to find, and people who don’t know about the code can be the tester. Its disadvantage is that people have to write more code in order to test on the software functionality. Gray box is kind of the combination of black box testing and white box testing. Personally, it’s possible for a software to have all these kinds of testing to make sure that a software works fine. The testers should obey the 7 testing principles as well.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on 11/19 discussion
In the reading, the author Jeff Friesen introduces design pattern, including what is the design pattern and the classification of design patterns. A design pattern describes the classes and interacting objects used to solve a general design problem in a specific context. Compare to software architecture, it’s more like an implementation. It’s easy to update and solves specific problems by using design patterns. Design pattern has advantage that it is reusable, extendable, manageable. However, it also has disadvantage that it’s difficult to read the code, and might be restrict. There are many common design patterns used, for example, composite, bridge, command, mediator. In our group, we discussed Flyweight and abstract factory. Flyweight takes similar data over and over again. For objects share an intrinsic characteristic, people only write the code once. If they want to create a specific object later, they can just modify the data instead of rewriting the code. How people choose a design pattern is an important question as well. They can first understand each of possible patterns and see which one fits in the code. Multiple design pattern can work together. If people found that old design pattern cannot fix the question, they will combine some characteristic from the old ones and create a new design pattern. In software engineering, double dispatch is an extension of single dispatch, when there are two objects interacting with each other. Double dispatch is often confused with method overloading. Java doesn’t support double dispatch.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on 11/8 discussion
Google developer Max Kanat-Alexander introduces three common flaws in software design. The flaws are writing code that isn’t need, making code hard to change, and making code to generic. In the video Alexander talks about the law of change, the longer your program exists, the more probable it is that any piece of it will have to change. According to Max, lots of code and design are unnecessary in software design, since the software design changes as time changes. What’s worth designing or planning became an important question for software engineers. Personally, the basic functions, and architectures are worth planning and designing. The basic concept has lower possibility of changing. As the example of calculator says, people design plus and minus when they design a calculator. People never design multiplication and divide first. A software should be designed from in to out, from basic to complicate. Hence, in my perspective, people should make sure the basic assumptions work well first, they need to put more time on the basic ideas. What is not worth planning? People should not pay much time on the assumptions that are too general, since they will have to change it later. In the video, Max also mentioned that some comments will make the code looks more complicated. When we are writing codes in our daily life, we are always thinking about what should we put as our comment. What makes good comments became an important question for programmer to discuss. In my point of view, comments’ purpose is to explain the code more clearly. If people can make the code easier, they should not write a comment. Bad comments make the code hard to understand. In contrast, good comments gives a clear understanding of the code, and make it looks easier.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on 11/1 reading
License is very important for a software, because it indicates how the creator of a software want his code to be used for. Licenses can let others use your software in the public and ensure fair use. In order to append a license to a software, people should state the license on the project’s front page and bundle it with the distributed software. Selecting a license is very important for a software. Different licenses can be selected due to different intend use of the software. There are two commonly used licenses, MIT license and GPL license. MIT license offers no limitation of rights to use, copy, modify, publish, distribute, sublicense, and sell copies of software. GPL license is more restrictive than MIT license. GPL does not allow sell of the copies of software. The creator who wants it software to be modified and sold in terms commercial use should use MIT license. Since GPL does not allow people to sell the copies of the software, people can only modify the original one and make it a better software. My selected project FreeCodeCamp uses BSD 3-Clause “new” ore “revised” license. It allows user to commercially use, modify, distribute, and private use. It has limitation of liability, and warranty. It is possible for a software to change a license later. However, it generates some problems that people might have different rights of using a same software. Hence, it’s great that the creator doesn’t change that and decide the license at the beginning.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on 10/25 reading
Software Architecture is the big picture design of the system. It’s the process of converting software characteristics into a structured solution that meets the technical and business expectations. People can view it as the blue print of a project. There are many different kinds of software architecture introduced in the reading, such as pipe and filter, Data Abstraction and Object-Oriented Organization. How does a Software Architect choose an architecture among many different architectures? First of all, the architect should understand what the project is since choosing an architecture is depending on the project. If a project needs to have hierarchy, architects probably will choose to use Layered Systems. Different architectures have different advantages and dis advantages, so an architect can try different types of architectures and see which gives more benefits. Trying different types of architectures can also tell if a specific architectures work. People can change to another architecture when they found the previous one didn’t work. Sometimes, one architecture cannot meet the needs of a project. In this condition, architects can choose to use combined architectures Heterogeneous Architectures.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on Version Control
After discussion of Version Control for two classes, I got deeply understanding of how version control better and how should we do in a version control system. Version contral system is an important part in FOSS project, because it makes sure that there are no conflicts between each person’s version. One question is interesting in today’s discussion that what is the difference between a centralized version control system and a decentralized version control system? In centralized version control system, the code updates are automatically pushed to a central repository. Hence, everyone’s code got updated automatically. I think in this system, the beneficial of version control get lost. Maybe someone is not finishing and his code got updated. Some people might not agree with the code people updated, so it might cause some problems. It does have some advantages, such as it’s more organized and people all got the same code. Decentralized version control system works as developers choose when and where to push, and everybody has his own repository. It’s more flexible that people can clone the code and work on it locally. However, there also exists some disadvantages of this system. If someone is working locally, others cannot have a look at it. It might cause some trouble that people are doing the same work.
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection on 9/17 reading
As a newcomer to an open source project, we want to find some good projects to start as a contributor. What aspects of a project would encourage people to get involved. The first thing contributors look is the documentation. The mission should be stated clearly. It’s always hard to start, so it’s better to have a step-by-step guideline that can lead the newcomers to contribute gradually. The second thing we should look at is the community. The activeness of the community reflects how active people will offer help when you meet some problems. It’s better that the community can offer an easy way to see the communication. Recently, I did the review of a project called Sahana Eden, and found that it’s hard to join the community. Although slack channel name is given on the website, I failed to join that. What’s more, a good open source project needs to have bug tracker with good version. The bug tracker of OpenMRS project is very clearly. It shows a form with different kinds of issues, for example, issues ready for work, issues waiting for assistant. With clearly label of issues, bug tracker is easier to read. 🤔
0 notes
weiran99-blog ¡ 6 years ago
Text
Reflection H/FOSS Project Community
In the article Four types of open source communities, the author introduces four types of communities, which are single vendor open source projects, developer communities, user communities, and open source competence centers. In the open source projects, the company develop software in-house, and own the full copyright. Contributors who wants to contribute to the project cannot choose the version of the software that the company will use. If the company owns the full copyright, what motivation do companies have to create single vendor open source projects? Why would developers join the single vendor communities if they cannot control the project? For companies, they can choose which version they want to use. With contributors, there are more eyes on the project, so the project might become better. For the contributors, the reason they want to contribute to the project is that they can get experience during the process. Although their version is not chosen, they get work experience in the project.
Fork is always an important topic in open source projects. Fork is one copy of a project diverges from another copy. In open source projects, forkability is very common, since all the code is open source. If everyone can copy the code and start a competing project. The company might be worried. Should company be worried about forkability? Personally, no companies can avoid forkability in open source communities. If the companies want their code get improved with the help from contributors, they must take a risk. They should be worried that someone will copy the source code and develop a competing project better than theirs.
0 notes