Just a quick glance of the progress of my projects this year, roughly based on my GitHub history. You can find details at https://github.com/jiyinyiyong , I'm going to explain only the big moments in this post.
A majority of my commits were pushed to two components I created for my presious company.
- https://github.com/jianliaoim/react-lite-uploader One of them is file uploader which wrappes fileapi, which is mainly event handlers that does not bother React's pure rendering princeples.
- https://github.com/jianliaoim/react-stack-modal/ The other one is a piled modal. I wrote about if before. I realized there are two kind of different modal, one is global are reusabe, the other is private and relying on data from a local parent component. This component is the global specifically.
In Feb, I handed my tasks over to my workmates and got quite some time to update Cirru Editor. At that time Cirru Editor is something you edit with DOM but generates
- https://github.com/Cirru/cirru-editor This is the editor component built with React. It renders arrays and strings into
<input>s, that's why I edit in with a Web page.
- https://github.com/Cirru/cirru-light-editor Light Editor just wraps the editor with some glue code the connect to the server for file writing or something. The project is started in 2015 and at that time I just made it viable for my daily works.
- https://github.com/Cirru/cirru-writer Cirru writer generates code from JSON arrays, which is part of the Light Editor's work.
The work on Light Editor actually last weeks and I was still coding it in the followed month.
I started my rest in the 11th. So I got quite a lot time to maintain my personal projects. I started building Respo in the beginning of the month. Since I'm not working for anybody, so I can use ClojureScript for all my stuffs.
- https://github.com/Respo/respo I created Respo because I was trying if I get make something better than React.js with pure ClojureScript. It's only a virtual DOM library but enough to make small apps.
- https://github.com/Respo/respo-client At first I was trying to decouple diffing and patching so there was another repo. It got merged months later.
- https://github.com/Memkits/wanderlist Wanderlist is my first app built with Respo. It's a minimal version of Wunderlist.
- https://github.com/Cirru/boot-cirru-sepal Last week of the month, I started trying Boot to replace Lein. Boot is like Gulp but for Clojure.
Respo is huge work, I was also spending time on it in April. I made more tiny apps, fixed bugs, optimized performance. It was somehow happy journey the first time I can create apps with my own library, and without something like React. Then I started thinking about Quamolit, an old idea for Canvas.
- https://github.com/Quamolit/quamolit So React is programming DOM declaratively. I want something for animations too, i.e. declarative code for animations. A lot ideas was reused from Respo. The library is slow. But finally I made it painting animations.
- https://github.com/mvc-works/boot-workflow I collected my tools around Boot and put them in a project called Boot Workflow, as a boileplate.
Actually Quamolit comes with a bunch of examples. Each of them took me one or two days plus the time I debugged and fixed bugs.
Before returning to work, I was working on Quamolit. I wanted to prove that Quamolit is useful. So I created 2 examples with it. Then I went to work. It is a large company writing ES6, took me long time to get used to it again.
https://github.com/Quamolit/blossom-scores Just a minimal game in Quamolit that I can touch the points to pick numbers. I want demonstrating the animations. I got the idea in 2012 but only know CSS at that time. Now I built it in real. https://github.com/Quamolit/2048 This 2048 game is in Canvas with animations. I proved Quamolit is somehow working. https://github.com/Cumulo/shallow-diff Shallow Diff is actually immutable-diff and immutable-patch in ClojureScript, and simplified. https://github.com/Cumulo/cumulo-server The reason I need immutable diff is I want to do JSON/EDN diffing on a server, then patching on browser. My scripts was in CoffeeScript and now I made it ClojureScript. https://github.com/mvc-works/webpack-hud Since in my work people use Webpack rather than boot-reload, I felt inconvenent so I made wepack-hud to create a figwheel-like error message. Also a simple one.
This month I spent most of my time maintaining my previous projects. Respo, Cirru, Boot Workflow, Quamolit, etc. This was the third week in the company. To me it was really new environment. I spent quite some time exploring React Native, but shortly ended it.
- https://github.com/ElemeFE/react-native-reference I gathered my notes into a repo. It might be benefit to beginners, but not really useful to real React Native developers.
Respo was very slow at first, especially on mobile browsers. By reading the commit history I can recall that I spent a lot time trying to optimize it. As a former CoffeeScript programmer, I didn't know the difference between a vector and a list. I tried to replace slow seqs with vectors, still felt confused. But it became better when implemented caching. I realized ClojureScript is slow for some reasons.
I felt a bit more stable now with my work. Also I got some spare time to rethink my own projects. I have to say a lot of my code are wrote during work, so no longer productive as the beginning of the year. But I did got some ideas.
- https://github.com/tiye/tiye.me After all, I need to update my home page to update the information on jobs. Actually I started a refactoring, but gave up when I felt bored.
- https://github.com/Cirru/vectors-format I made some attempt to Cirru with a new IR format, but turned out to be useless after weeks.
- https://github.com/Cirru/clouditor One day I got a really interesting idea that I need to use a "Chrome DevTools > Sources" like UI for programming. I mean, I need that call stack. With a call stack I could easily navigate among the functions that were related to my bug. I was amazed and built an prototype for it. I was inspired at that time.
The main topic of the month was Stack Editor. I wrote quite some code. Thank god my work was not that heavy. It costs lots of time to think about the details of Stack Editor. I paused for a long while even with Clouditor since I don't know how to make it real.
- https://github.com/Cumulo/cumulo-workflow Remmber shallow-diff? I wanted to do diffing on server. In this repo I collected my toolkits as a boileplate.
- https://github.com/TopixIM/jane This was a demo app of Cumulo. A very simple chatroom as an experiment.
- https://github.com/Respo/ssr-stages Also some ideas on Respo that I can do server rendering too with Planck. I found that I could falsify a virtual DOM and make first screen rendering more smooth. I was like intrigued.
- https://github.com/Cirru/respo-cirru-editor Anyway to build Stack Editor I need it to be ClojureScript rather than CoffeeScript. So I migrated cirru-editor into Respo, which is totally in ClojureScript.
- https://github.com/Cirru/stack-editor This is the repo I make clouditor a real editor for my apps. Since I can generate Clojure code with macros very easily, I don't even spent much time on the compiler. The major work was to design the interactions of the editor. I can't recall the details but at last I reached this far. You should check out my videos on Stack Editor.
- https://github.com/Cirru/boot-stack-server This is the backend for Stack Editor with a ring server in a Boot task.
- https://github.com/mvc-works/stack-workflow Then I created this repo to stabilize related works.
In the past month before Stack Editor, I was writing ClojureScript with Light Editor, which generates Clojure from EDN files that's edited as DOM. Now I can use Stack Editor instead with some "goto definition" like features. I love such feelings.
I remmembered I had a bad time in the Autumn but not in details. I ranted another room and moved. There was some pain. Anyway I was still maintaining Respo and Cirru since they are my daily concerns.
Got stabilized in Oct. A 7-day vacation in China you may know. And it's was the first time I went to a beach on a island. Not bad for a person low-spirited. I looked into Respo again and realized seq is not slow, just lazy that made Chrome DevTools think it's slow. A list is fast when reading from the head. So I deprecated the use of vectors. Also I made a change to the DOM diffing algorithms and it's significantly improved. Still now comparable to modern frameworks though.
- https://github.com/Respo/respo-router I wrote a router for React before so I rebuilt it in Respo. Interestingly I found I can make a router recusive, yeah, recursive. I experimented, it worked. So I went back and refactored the CoffeeScript one.
- https://github.com/Respo/shell-pages I was asked to look into Vue's isomorphic rendering so I did. Actually I was familiar with React, respo.site itself is isormorphic. This time I did it in Respo.
- https://github.com/coffee-js/vue-coffee-workflow Oh, I have to go back on the right track of Vue. Vue 2 supported virtual DOM now, but compiling Babel is hard work, I preferred to use write in CoffeeScript by hand. Not big deal. After that, I translated the whole project into Babel code with a bunch of compilers.
- https://github.com/Respo/global-popup And a modal component for Respo too, just like stack-modal mention above.
Plus I reduce the amount of painting step of Quamolit, it takes less memory now. Meanwhile I learnt that allocating in ClojureScript costs a lot. I should learn it earlier.
From my commits I see more code for my work, ES6. I got some cough. Also I need to prepare for a speech in mid-December. I forced myself to travel between Hangzhou and Shanghai, which reduced the time I wrote code. Luckily I got a important idea in this month which is Recollect.
https://github.com/Cumulo/recollect For Cumulo project there's a problem. It's too slow. Diffing for React is acceptable. But on the server, it's not. At least I need an caching algorithm to make small Cumulo apps not that slow. And Recollect was the solution. It's abstracting data into components that are cacheable. It's still eating memory, but anyway a bit better now. https://github.com/Respo/reel Reel is a time traveling debugger demo in Respo. I built one for React before. Now it was even simpler with ClojureScript which has persistent data by default. https://github.com/Respo/first-screen-demo And in my work time I use Respo to created a loading animation which React and Vue is not capable of. I was conceited. Anyway it's an interesting loading, isn't it?
- https://github.com/Quamolit/fractal-box-tree I saw author of Vue playing with fractal so I tried it in Quamolit, it's surprizingly slow. Actually I want to blame Canvas API for that. With ClojureScript I can only get this far.
- https://github.com/mvc-works/recorder-docs And I wrote some docs for actions-in-recorder, which is my personal Redux alternative, in hope that people will notice it.
It's also noticeable that all my big ideas occured before 2015. After that I only managed to realize and reinforce my old ones. As I'm getting old, I may become less artless and less creative. Can I go further, to make Stack Editor an effective code generator, to make Cumulo and Quamolit production ready? I'm not even sure. There's still a lot to ruminate and to think.
This was first year writing ClojureScript.