This is a blog for reflection on Programming Language part 1 at coursera produced by UW(Universit Washington). The design for this course is to help developer better understand what is the programming language and how does functional programming differs from object-oriented programming. And in the first part, we will use a language called SML(Standard ML).

For the first two weeks, the course mainly covers the basic of SML(synatx, list...). I have to say at the first look, this language is quite like Javascript mix with rust. While, if we dive into this language, we can find some interesting points. Like the variable is immutable, such immutable is not like mut in rust. It just doesn't have the concept of assignment on value. Instead, it introduces another concept called shadowing and binding. In this case, binding works for binding a specific value to a variable and shadowing is for re-binding a value on a existed variable(such process is quite like assignment). And due to this feature, the = can perform the role of binding value(if the right is a value) and the role of judging value equality(if the right is variable). And this is quite confusing when I first time touched this language.

In addition, this week, it also introduces some basic thinking in the functional programming and let ... in ... done syntax. The let ... in ... done may look familiar if you have tried pascal. Basically, it allow you to introduce some local variable and function into the current scope. The most important thing this week, is the recursive way of solving problem. This might be the most trick part, since recursion might be abstract in some cases. And in such a language that does not have any loop feature(so far from what I know), it forces you to rethink all the patterns you have built in the past coding life. Like, we all know we can step through an array using recursion by passing its sub-array. Such operation seems to go against the OOP(Object-oriented programming) thinking.

On more thing, is the list operations. In the first week, it introduces operations:

  • hd that will return the first element in the list.
  • tl it will return a new list with every element but the first
  • e1::a1 that can add one element e1 to the head of a1
  • a1@a2 that can append a2 to the tail of a1. Note: we can use this operation to achieve append in python. If we want to append e1 to the tail of a1, we can use a1@[e1].

At the end, about the first assignment, it is not so hard once we can the sense of recursion. Here is the link for the first assignment.

I have heard a lot of times about the story of Linus Torvalds and his rude behavior to the community, but this is my first time to dive into the detail of the outcome to the whole Linux community. Also, this story makes me reflect on the part of Code of Conduct that does such a conduct works and if so how does it work, since such a Code of Conduct has noting reinforcement?

From one aspect, we can tell that a piece of the Code of Conduct will bring the community with peace, diversity, creativity and an easy atmosphere. We can tell that in one community with a powerful “dictator” the community can trend to reduce the diversity if the “dictator” chooses not to accept all differences. More than that, such a Code of Conduct will guarantee the communication and ways of leaving comments on the codes. And it is that part makes the community vivid as well as creative since a good communication and pleasant code review procedure will give contributors a positive feedback.

Another point is that how does the Code of Conduct work in practice. From my ground, I think that the what guarantees the validation of the Code of Conduct is the sense of community that we are a part of a group that we considered as a home-like thing in this case. So that we don’t have reasons to disturb the order of that and even further we may want to maintain the community just by the sense of belongs to such a particular community.

From the Processing and FLOSS, we can know that FLOSS is an acronym for Free, Libre, Open-Source Software, which is a sort of open source’s outcome and a long last thing from my viewpoint. A FLOSS software offers us varies of accessible applications, friendly community and an inclusive environment for developers and users.

As the article has mentioned, many professional applications will charge a lot of money for using which will be a bit unaffordable for general users. For myself, last semester we need to use Mad Mapper to do projection mapping and the free trial they offered only gives us limited features. Thus, we have to buy the license for it which is 35 EUROs. In this case, if we can have such an open source community like Processing offering a FLOSS software for Projection Mapping, it will really help me out. Yet, this is only a some but most related to ordinary users values for a FLOSS software.

Furthermore, one of the best things I like about the FLOSS software is the community. Instead of a commercial product’s community, FLOSS software’s community usually trends to become like newbie oriented and creative oriented, since members in the community are largely also members of the development environment. In this case, such a community will give an autonomy that benefits the software itself.

And the most interesting part is that user can also contribute to the software. In this case, users are developers, UI designers and owners of the software. Like the Blender or Processing, they are also outstanding software and they attract a lot of users to polish it and contribute to it. It is not only because it is a free software but also because its source code opens to everyone and allow users to contribute to. And it is exactly because it gives these FLOSS software a strength to live longer.

Honestly speaking, for a long period of time, I considered that Open Source means useful packages and solutions to some commonly encountered problems. Since then, my first impression on Github is basically a place where I can find answer and convenience. My next stage is that I start to treat Github as a code repository and showcase to big companies. Thus, basically, I put every work I had done on Github without any documentation or Readme file. In this scenario, I am taking the Github as a solo game. And until like last summer, I just found out what is Github truly stands for it is not a solo game or where I can find wheels, but a community, I can share, implement and improve ideas and codes.

Then I start to come up with an idea of contributing to some open source organizations. However, what I found is that the open source is overwhelming since I am still fresh about the workflow of open source organization. Like what is an issue, what they are talking about on the issue, if I want to contribute what should I do first and do I need to follow a code style, tons of questions come up in the same time. And it is just like the article Bring Kindness back to Open Source stating sometimes the new guys can not get a positive feedback from their first contribution then it makes them lose their heart of holding on to it.

Frankly, though my first experience of open source contribution is terrible, I am still willing to keep on that, since working together for implementing some cool things is really fun and meaningful. And from another viewpoint, I always believe that coding together(not necessarily physically) and exchanging ideas about use cases and design patterns will deliver a better product. Thus, I always think open source is a way of making a difference in the worldwide.

This is assignment is for accessibility on the web design. From the WCAG(Web Content Accessibility Guidelines), we know that WCAG aims at two aspects: 1) natural information such as text, images, 2)sounds and code or markup that defines structure, presentation, etc. Though we have clear guidelines, in the practice, we still can not develop a holistic accessibility on one website. From a view of a front-end developer, I think it might be a problem that our visual design, performance, and animation are not primarily aimed for the disabled. Thus, what we are doing about the accessibility is like fixing bugs from the peripheral. As for the accessibility of the website, I think if there were an ultimate solution it should be a new design language, patterns that servers for them. Back to practice, we can take a look at the p5.js Website.

Test with Color and Contrast

Since the p5js's main site is quite complexed in some extents, I sampled two color contrast analyser result from this site. We can see that in most cases, this color contrast works fine except for the AAA standard and AA standard in some situation. This variation may because of the changing background that makes the readability keep changing.

Voice Over

As for this part, I could say this website gives me a relatively good feedback with the voiceover. At least, I can get necessary information from the voiceover and most images, svgs and icons have a alt to describe what it is. However, some links are kinda of confusing, like there is a hyperlink named easy yo interact and jumps to the example. This might be a little hard to understand with some people. Also there is a hidden button in the main website, it won't be seen but voice over can detect it which also lead to some misleading. Also the outer iframe is leak of description and confuses users with the structure of the website.

Hidden Button

Overall, I think the accessibility is not only about how to develop the website friendly with the new HTML5 tags and attributes that help the voiceover works better. But it is more about how to do some extra design that let the website has a solution that is friendly with the disabled. We should pay more attention onto the design choice and paradigm.