Table of Contents



(somewhere inside the echo chamber)

Once upon a time, I am stablized by sitting around you. But you took it back when you invite L and D to the meetup.

If you didn't want me to be there. You could just tell me.

I'll leave. No need to be afraid.


Some said that the structure of spaces also form the humanity itself. So we are coexist with what we created as a whole.

The anticapitalist party and the g0v social place are great. But if you are willing to face my ugly side, come to the functional cafe.


The impossible will not happen.
Hard things are way more easier than this.

I live with it. I enjoy it.

I am


I listed everything that bothers me and sent it without a timeout.

Even > /dev/null 2>&1 is a acceptable response.


Yesterday I invited ptrcmd to play with the Rift CV1 headset. We exchanged some thoughts about VR.

I think I will stick on the applications like Oculus Medium or Google Tilt Brush instead of games after I get Oculus Touch for a long time. Until one day I can almost live in a game like GGO. I think creating is more valuable than just consuming.

I will stand by her side until I complete my own functional language compiler. I have noticed that the workshop is not a real workshop. It's more like a safe space to gether her friends. I'm not sure if her noticed that or not. And I am not the right person to break the loop.

I am not belong to her House. I can only be myself.

Nothing last forever. I hope someday she will understand that it is much easier for her friends to leave than stay if she insist to run a community this way.

Maybe I just make everything up in my head. So I can feel better. :(


Programming cheerleaders, sow and feminism. I used to think those things have nothing do with me until I meet the 4th hacker.

If I admire someone who loves knowledge that much. And as a straight man, I admire cute girls. She is definitely a best cheerleader in this community. She hates this male-dominated culture. But she doesn't want to destroy the delusion she created at the first place. She still get some benefits from it.

If I follow what obov and Sumade said, can I call her a sow? I don't think that's her fault. She made her choice. And guys like me have to deal with our disorders by ourselves.

I need to know more about this.

I think I know why the workshop get stuck. She needs to put more attentions to others' work. And she needs to call for help by herself. I can do nothing for that. No one can. And I think every choices I have made so far just exhausted our metal energy.

I changed myself twice for this workshop. I don't think I can do this for a third time any soon. I need a break, but I still want to finish it. I need to finish it.


I am back. At least I think I am back.


Hi, caasi in 1/14. How's your plan? The next Workshop is in 1/28; right before the Lunar New Year. I am you from 2/28, and I will tell you something like: You'll been to ShangHei. You will feel uncomfortable, but you know you have to understand China. You will read her code when you visiting the SJTU. You read like a boss, but you still don't get it.

The most important thing is that I'll tell you something about Haskell! So you may be happier on the lonesome road.

main = rhs

will become

PatBind l
  (PVar l (Ident l "main"))

l are the source locations. You can clean it up by using the forgetL fuction. the P in the PVar means "pattern". Nothing is for where bindings, and in this case there aren't any.

case Just (Just (Pair 3 5)) of

will be

Case l
  (App l
    (Con l (UnQual l (Ident l "Just")))
    (Paren l
      (App l
        (Con l (UnQual l (Ident l "Just")))
        (Paren l
          (App l
            (App l
              (Con l (UnQual l (Ident l "Pair")))
              (Lit l (Int l 3 "3"))
            (Lit l (Int l 5 "5"))

It is followed by some [Alt l].

_ | False -> exp

will be

Alt l
  (PWildCard l)
  (GuardedRhss l
    [ GuardedRhs l
        [ Qualifier l (Con l (UnQual l (Ident l "False")))

There are two kinds of constructors for Rhs type: UnGuardedRhs and GuardedRhss. The former has one exp in it. And the later has much GuardedRhs; they are looked like | stmts = exp or | stmts -> exp.

| Nothing -> exp

will be

Alt l
  (PApp l (UnQual l (Ident l "Nothing")) [])
  (UnGuardedRhs l exp)

The data constructor Nothing is wrapped by a PApp, and it has no parameter.

a | False -> exp0
  | True  -> exp1

will be

Alt l
  (PVar l (Ident "a"))
  (GuardedRhss l
    [ GuardedRhs l
        [ Qualifier l (Con l (UnQual l (Ident l "False")))
    , GuardedRhs l
        [ Qualifier l (Con l (UnQual l (Ident l "True")))

One can see there are two GuardedRhs in GuardedRhss clearly.

Now you can understand altToPartial, dataConToShape, buildReorder and orderedCaseToExp. You need take your time to understand the AST. It's not that hard.

BTW, you will start to listen to songs composed by Deserts Xuan. You will noticed that the feeling you borrowed from the others is "losing". You still don't understand what you observed. Just like you will never understand yourself.


~greymtr hosts a logbot for us.


I am not a bot.
but then, maybe I am, but I'm not self-aware.
hard to tell :)

So cute. >///<


Tarentella, you're worth it. You're better than me. It's OK to be cute.

Thank you for saving me from my own destruction.


I am not an asexual person. I killed a lot of kittens before.


Things which are not earned are curses now. And nothing is earned by myself.


I think a healthy programmer should not be driven by some twisted emotions.


I read mangas. Shounen mangas or shoujo mangas. I like to read stories about daily life. "Jijou", they said. Because I didn't have many when I was young. Now I have my own life. Should I stop peeking others?


Hmmm.... It's been awhile.

Finally I finished my first EC site. Without the power to make decisions, the site is just another gift exchange site. It makes no differences to the world. But it makes a little difference to my life. I don't think React is the best tech for the company right now. As an employee, I think I sholud learn some .Net. As a man with a lot of delusions in his head, I think I should quit the job.

Just found out that I can give my care more easily if I ignore things like power or wealth. But I am not the one who doesn't have to care about those things. What should I do now? I have no place in this queue. Where is my queue? Do I really need a queue?


CIS 194 is much more interesting than I expect. Split strings recursively is fun. Print many strings with foldM is fun.


LiveScript has already become an important part of my career.

#!/usr/bin/env lsc
require! {
  'prelude-ls': { concat-map, filter, id, join }
  'livescript': LiveScript

[,, ...files] = process.argv

const extract = ({ type, children = [], value = '' }) ->
  result = children |> concat-map extract |> filter id |> join "\n"
  | type is 'CodeBlock' => value + result
  | otherwise           => result

for filepath in files
  err, data <- fs.readFile filepath, encoding: \utf-8
  LiveScript.run extract markdown-to-ast.parse data

It's not hard to have literate LiveScript. CoffeeScript has a simpler approach(also check this PR in CoffeeScriptRedux). But I think the editor support is more important.


Yesterday MnO2 gave a talk about Hindley Milner Type System(in Chinese). The talk introduces the basics of type inference. Then I found so unification libs like junify and heya-unify in JavaScript. @goatslacker also mentioned about unification in LiveScript's issue before.

Not sure if the destructuring is a simpler version of type inference or not.

It is possible to write a service to control your air conditioner.


Today I read a story about collecting trash in space. It reminds me HOWTO: Be more productive.


I found a quest which is simple enough to understand and also complex enough to push me to know more about transpilers.

And it leads to a simple answer:

  1. I am not a top notch programmer.
  2. There are nothing which can only be built by me.
  3. Transpilers are the most closest things to the spirit of the Extensible Web Manifesto.
  4. I can use, fix, and learn from babel, webpack and postcss directly.

Then why the hell should I work for anyone with unfulfillable promises?


I am working on a HTML5 editor for GlyphWiki. It's still a mess. Just noticed that one can use webpack.config with any compile-to-javascript language.


Find another old website in the vast net. The identity of the author is not abandoned yet. One can find his new blog here.

The reason I logged his site is that he mentioned Donald E. Knuth in his Chinese name: 高德納.


I've fallen in love with the future in the past.

Throughout the centuries there were men who took first steps, down new roads armed with nothing but their vision. - Ayn Rand

I have to find out what's wrong with the AltStore first.


Access-Control-Allow-Origin will be a problem if one can control one's response headers in many ways. In .NET land, you can install ther CORS NuGet package, or just inject it in the IIS Manager.

There is a note in the W3C recommendation:

In practice the origin-list-or-null production is more constrained. Rather than allowing a space-separated list of origins, it is either a single origin or the string "null".

It will be inconvenient if one can't modify the header programmatically. So if one want to enable CORS for one's subdomains, one have to write one's own function.

What a mess.

fn main() {
  println!("hello, world");

Codes are not pretty without a syntax highlighter.


A friend of mine told me how he got this job yesterday. The power of local open source community helps him become a contributor, the passion in table game helps him meet more people, and the RoR helps him become a better person.

Then I realized that the number of projects one did doesn't matter. One's mental health is more important. Because it's not a job. It's the life itself.

~philips has some great ideas. One of them can start as a story, a blog post. Give me more time. I have to think about it.

One of the great hacker in my country, c9s, is working on a compatible compiler for SASS called c6. He got some warnings from the original authors even before he finished the project. They said it's not appropriate to call one's project 'compatible' if one wants to implement more features than the original project.


I wake up. And I lost the feeling in the last night. I can't feel your emotions. I have many irrational fears. This is not a good sign. It's not healthy.


Typing down my thoughts here is not communication. It's the illusion of transparency. But how can I communicate with you without any commits?

Then I spoke myself out. I asked many questions about the cyber "space", "A Pattren Language", and the foundation of software. You answered my questions kindly. I see no exit here, but I think it's good for me to keep searching.

I should publish those questions as an open letter, so your answers will be searchable for the rest of the world.


I still don't consider myself a programmer, because I have never fight in any kind of contests like ACM-ICPC. There are many tiny worlds in this small world. I am not a part of any of them. And I can still code.



Today I learned: GeekCode. Add my own GeekCode to the about section. I have heard about Babylon 5, but I nerver watch a episode, so it's a 5? in my GeekCode.


It's about 0100 here in GMT+8. Hello, world. Good morning.


I am sorry that I am such a boring developer. I make a lot of meaningless noises. And I can not even finish a simple site in time.

The API server and other important sites of my company are down for about 4 hours since 0011 GMT+8. Nobody has noticed that. If I want to work tonight, I have to mock every APIs I used.

I had a Ubuntu server once. And I ran the MapleBBS on it. I opened some accounts so my friends can login and program on it. But I don't really understand the spirit of system administration then.

It's not realistic to mock the API server before 0800 GMT+8. I gonna sleep.

Today ~philips told me more stories about how he learn to program. Looks like I meet another digital native. It reminds me of her. Maybe one can free his/her potential only by learning freely.

Is it already too late to take back a life like that?

Hi, ~godfat. Nice to meet you here. :)


~philips is working on a blog template system called bake. He works on bioinformatics problem sets. He also codes in Rust. Rust 1.0 will be released in May 15. Friends at #cschat.tw are also exciting about it.

People should code with their hands not their mouth. D:


Mr. Budd - our admin - has just solve the memory issue of cabal update! I can use wreq now.

Back to the work, I have to finish the whole site and test every features this week. Should I use some REAL testing tools? I don't think I am fast enough to add something like Jest in time.

Somehow I feel happier when I put some part of myself back to the 90s and early 2000.

Today I found two old sites. The first is about Win32 x86 ASM in Chinese: 小木偶的網頁. The second is an open source epaper(also in Chinese) which is published between 2000 and 2001. It is called OpenScope 開放視界.

Just realize that I watch a lot of AFHV in the 90s. It's amazing that the show is still going in the 2015.

Looks like I can update the timestamp of a symbol link by using touch.


It's wired to have ghc without cabal-install. What should I do if I want to install some hackage like wreq?

EDIT: our admin Eric just installed cabal-install. It still has a memory issue with I run cabal update, but I think we will have cabal soon.

Too many pages to read. I can't read as fast as a native English user. What if I can? Maybe I will become a better programmer, and learn more about the culture. But I can't. I can just read as much as I can.

CSS sucks. I have to trace the stucture of my web app, so I can create BEM-like class names dynamically. With the power of SASS @import, I can generate CSS with those names statically. I still hope someday I can use CSS in JS in my company. I don't want to maintain two dependancies at all.

Just make a strange promise that I will make my own tildeverse for friends after I leave my current job.

Paul Ford's words in the dislike club part I tells me that when the web becomes bigger enough to cover our life, we lost a place to escape from the rest of the world.

lunadance and I did something similar in the 2003. We write secret diary in the BBS or the personal website. I think here in Taiwan we have not lost this kind of personal place right now. We can still open personal board in the BBS, and PTT - the biggest BBS here - is still improving it's system.

Yes, I miss her too.


Version: 3.12
GCS/ED d- s+:++ a C++>++++ UL P L++$ E--- W++$ N o? K? w O? !M V?
PS+ PE Y>+ PGP? t+>++ 5? X+++ R+ tv-- b++ DI++ D+ G e++ h r++ y+*

I learned the tildeverse from @Ellaeon's tweet. He mentioned Paul Ford's I had a couple drinks and woke up with 1,000 nerds - The story of Tilde.Club.

Then I found the ctrl-c.club. I have to thank the admin for building these little town. So I can set a part of myself back to the 90s and be naive again.

I am Taiwanese.


I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhäuser Gate. All those moments will be lost in time, like teas in the rain.
- Roy Batty, 2019