Daily Log #84

Work was mostly light today because I made it so. I spend more time chatting than working. One of the reason was because I decided to update the copy of visual studio 2017 that I was using as well as Windows. When I do work, I focus on developing several APIs for the purpose of tracking user activities, ranging from login to every click they do in the system. I also developed a few more APIs for the purpose of fetching who are the users currently online, and the list of users and their last online time.

I also decided to create one JIRA ticket to describe a new idea that I think of to help with a potential problem that I saw. For one, I don’t know if it is part of the user requirement specification but I’m approaching the problem as though I’m the one building the product. After all, that’s just how my brain works. I like creating stuff.

In the afternoon, at around three forty, I received an email from someone asking for my photo because my boss’s boss nominated me to be a member of the Environment, Health and Safety Committee. I was like, what the fuck? I have zero intention of being part of anything other than the project I’m on and I have always preferred to be very very low profile. Because at the end of the day, there are only a few things I care about and don’t want any more stuff. Minimalism at work is what I live by.

However, there are advantages to be part of the committee. For one, I get to meet more people. Number two, I may or may not get inspiration for my writings. To write good, I must experience something in real life. It doesn’t matter if I’m writing fiction or non-fiction. Three, like I mentioned yesterday, I’m a sucker for rules if there is any. If I get to be part of something to enforce rules, I don’t see why not. Just that I have to be very very careful and not let it destroy my mental health or overstimulate me.

I also came to the realization that there are many authors out there who only became successful (by successful, I mean at least have a piece of published work by a major publisher) in their mid-twenties or early thirties. There are some who only became full-time author in their forties because they had other careers or jobs before that. J.K Rowling for one only published the first Harry Potter book when she turned thirty-one and even then, it was a limited release. Subsequently, I came across another article on medium that talked about the importance of persistence. For as long as you don’t give up and just keep doing whatever it is you like, you will ultimately win the game. So that is what I will do.

I know I will probably whine and complain along the way but I mustn’t forget the bigger picture: everything I do should ultimately contribute back to making me a better writer. It could be as simple as writing a report for management, writing codes, be in a meeting for some audit, etc. And if I forget, I hope someone can remind me of that.

And one more thing. After I came back from work, I decided to get a haircut. So I changed into a pair of shorts, put on a pair of flip-flops, off I went to the salon. I had my hair cut to almost crew-cut like except for the top. It still retain a decent mop of hair. Well, I admit that it was getting difficult to manage my hair because of its length. I mean, it’s been five months since I last cut them. Secondly, the weather is rather hot and humid despite the rain.

Hmm… for some reason, my wrist decides to have some kind of intense rash from where both ends of the Apple watch’s straps are bounded together. It’s both painful and itchy. It’s also affecting my typing. Applied some aloe vera and will see if it helps.

Daily Log #83

After work, I met up with a friend for dinner before we went to catch the movie: Ant-man and The Wasp in the cinema. While we were eating, we caught up on some work stuff and how “fuck up” companies we worked at when it came to processes. The management people tell everyone else, probably including themselves, that they are doing agile development and throw in words like SCRUM, etc. to so call “inspire” the troop when it’s obvious they are doing what my friend termed “fake agile”. They hold stand up meetings to sync up what’s everyone is doing yet never put in practice Test-driven development, pair programming, Continuous Integration, etc. They use JIRA to assign task and ask us to update it properly but never really create user stories properly, never define the story points, and have poorly defined EPICS. Hell, the customer and the product owner aren’t even participating.

Put it this way. I’m a sucker for rules or processes when there’s one. I will follow it to the letter as much as I can and I hate it when people start to make it gray instead of black and white. It’s like polluting the purity of the rule. So when people have gone through the trouble of defining what’s Agile Methodology, I kind of expect people to follow it to the letter. And that’s how you can ensure consistency, predictability and quality. If people are changing stuff left and right without care, we will end up with a mess that will take more time to clean up.

And at the same time, I recognize that in business, flexibility is required. If not there’s no way the business can survive. But that doesn’t mean you can or should play fast and loose with the “processes”. Those things are there for a reason to solve problems discovered by other experts.

Of course, complaining doesn’t change the situation. Only action can. I’ve reached a stage of my career that I am letting it go and don’t harp on “why aren’t you doing it the right way?” for the sake of my sanity and mental health.

Talking about that, I also started to apply this “flexibility” in my work. I stop preaching about design patterns, how one should do certain things, etc. I leave it up to my colleagues how they want to implement something. I also don’t really care that much if the codes they write aren’t in the proper folder or package. On the other hand, I follow my own rules and way of doing things, ensuring that it is as consistent throughout as possible. And when I write codes, I can get rather verbose with all the layerings, double dispatch, etc. But I know that if I want to change something, I don’t need to hop from class file to class file and change in multiple places. That’s because I always strive to be as fine-grain as possible in my codes. DRY and SOLID are my best friends in this case.

Other than work, during my free time, I tried to either read the books I bought or continue to write my novel. And yes, I know I promise I will finish the draft by end of May and now it’s July. I’m not as productive as I would like and I’m constantly feeling drained or tired no matter how much I sleep. Then sometimes I will be distracted by my video games, or be annoyed at my parents for talking so loudly when I wanted a quiet house. I really admire the fact that I was able to write 40% of the novel during the long Chinese New Year weekend back in February. And now the process of putting the remaining 60% took me almost four months and still ongoing. I do feel disappointed with myself. I just have to try harder.

I will turn in early tonight and then wake up early tomorrow to see if I can cramp half an hour or an hour of writing. I’m feeling pretty exhausted now.

Daily Log #81

Work today was pretty alright in terms of amount of things I need to do. Recently, I was told of a new requirement to track user activity in the application and to support various administrative function such as allowing another user (an admin) to kick an existing user out of his/her session.

Since all these are considered under identity management and access management, it falls under my purview. So I spent most of my day implementing stuff on the server side and then moving on to the frontend.

After lunch, one of my colleagues decided to publish a new version of the server side code to IIS. Now, she always have this problem of not getting the latest version of all source code for all modules before hitting that build and publish button. So end up, she didn’t get the latest server side code for the identity access module which contains fixes that I did two days ago. And in case you are wondering, I actually did publish a version containing that fix to the IIS two days ago.

And how I know what’s happening?

Well, later when she left office to join my team lead to go on an exhibition at Marina Bay Sands, another colleague of mine complained about not being able to login to the application and she was seeing the error message of “your account has been disabled.”

Of course, I can’t help but roll my eyes. This again.

As I was still working on my new task, the current version of my code isn’t deployment ready. So I told my colleague to give me a moment while I finish up the stuff on my side. At around 3.45pm, I did and published a new version of the server side application. At the same time, I also checked in the client side code and got my colleagues to get it. By about 4.15pm, everything is up and running. My colleague could continue with her other tasks.

And I get to continue working on my existing task, expanding the code to support other functionalities. I published the server application again and tested the changes I made to the client. All is working.

I call today a rather productive day by what I have accomplished: a new functionality of tracking user’s online status and laying the foundation for the activity tracking function as well as allowing admin to kick pre-existing users out of their session.

Later at night, I spent some time watching Ajin: The Demi-Human on Netflix. After about five episodes, I decided to stop and get down to write my novel. Thus far, I only managed to put in about four new paragraphs before I had to do something else. Then I switched to writing this Daily Log. I will see if I can get back to the novel again. And I found myself writing in the “as a matter of fact” style. There isn’t much description or decent use of adjectives. I feel like I suck as a storyteller. Oh well… more practice.

Daily Log #77

I hate many aspects of my job however there is one thing that I enjoy doing was paying attention to the usability and the overall experience of the user interface I’m working on. In fact, I was so focus on that today for most of my morning as I went about tweaking the user interface to support new functionalities while also making sure the previously done parts present correct information to the user.

As it got closer to 12pm, my stomach started growling and I had to take some antacid to reduce the acidity in my stomach. By then, I had already stop doing work and focus on just browsing the web.

After lunch, there was a quick meeting where the team lead, another colleague and I reviewed what needs to be done because on July 1, there is a planned trial run. In another words, UAT. With that in mind, there were also issues raised regarding the performance of one the core functionality. In part, it was reveal by the sheer amount of data that I had provisioned into the database of the identity access module.

So my colleague and I got down to discussing what to fix. Somehow during the process, I got pretty annoyed because of my perfectionism. To me, it was like how come I didn’t foresee this problem. Another reason was because of the potential changes that would have resulted in destroying the so call “expressiveness” of the pre-existing code, make it harder to debug and maintain, which in turn would have violated my personal value on convenience and quality. Normally, I won’t sacrifice those two for the sake of performance.

Of course, I also know that no one wants to use a slow system. Performance is also a key metric and very important to the overall experience. This is why I love Apple over any other brand. They fulfill all three attributes I use to judge.

It took a while before I manage to calm down but in the meantime, I focus on throwing in timing codes to see which section was causing the problem. After throwing a couple of timing codes, I already knew what’s going on and asked me colleague to come over to my desk. The slow part was the code she wrote. However, she kept telling me to add more timing codes everywhere. Naturally, I got annoyed also.

Now, unlike my colleague, I heavily rely on my intuition about how things should be and will be. This is why I am able to draw conclusion early that would subsequently be validated by empirical data. Thus to me, when the conclusion is already there, why add waste more time and energy on something? That’s one pet peeve of mine.

However, since programming and software development is primarily about actual data, numbers and proofs, it’s really on me to learn to go through the process of proving to somebody else that what my gut is telling me is correct. And honestly, it’s something I don’t do consciously because the end result of what I do is proof enough. And I also acknowledge that I’m only human and my intuition could be wrong. So I will just keep that in mind and treat it as a way to update the so-call intuition database that I have. After all, intuition only works best when there is sufficient experience. And experience is gained through trial and error.

Work and life experiences aside, after I got home, I decided to watch Penny Dreadful because there’s nothing else that I find interesting on Netflix. Three episode in of the first season and I got to say I quite enjoy it. And before that I was actually contemplating if I want to play video games tonight.

Daily Log #47

After I woke up in the morning, I got down to do some programming work, trying to implement the user session module and augment the existing database-based semaphore to make use of the session module for my client’s application.

At around 9.45am, my family and I left home for the immigration agency so that my mom could submit the application form for a new identity card. On the way there, I spent the whole journey reading The Shining.

Thus far, I really enjoy reading the book because of the way Stephen King wrote it. It is unapologetically true story telling. The words shows everything that is going on both in the character’s mind and in the environment. I also get to see that there’s no right or wrong way to present your story. Like for example, there was one chapter in the book that only has three paragraphs to tell something. I for one have always believed that a chapter should be at least two pages long or five hundred words long.

We didn’t spend a long time at the immigration agency. There was no queue at the service counter and service staff simply took the application form handed to her. Then, we went to have brunch of crayfish hor fun at Hong Lim Complex.

Once at my grandma’s house, I continue to implement the user session module while also refactoring existing codes. Some of the refactoring involved me trying to do micro-optimization.

While I was working, the sofa I was on had poor support for my back and neck, causing me to suffer another bout of back and neck pain. So I had to keep stretching. Then my uncle asked me to sit on a recliner chair that has better ergonomics. It helped a little but my neck still hurt and made me nauseated.

At around 2.30pm, my family and I left for home. But first we stopped by Chinatown point where my mom got some pastry while I got myself a cup of ice cream.

Then we left for home.

Once home, I continued to do some programming. While testing out what I implemented, my MacBook decided to undergo kernel panic caused by my use of VirtualBox running an instance of Windows 10. Now, I don’t know whether its VirtualBox’s fault or Windows 10’s or Mac OS’s. After a restart, I continue my work and decided to call it a night at around 6.45pm.

I joined my family for dinner at Han’s. I ordered Grilled Pork Chop for myself and a side of fried egg with bacon sandwich.

I love the pork chops with the black pepper sauce. The pork chops themselves were pretty well done and easy to chew. The fries on the other hand weren’t so good.

The sandwich, well, I like it especially the fried egg and bacon.

But after the whole thing, I actually felt bloated. After all, my gut is still recovering from gastroenteritis. So once I reached home, I quickly got myself a cup of warm water to help with the digestion because I do felt like vomiting.

Later at night, I decided to spend some time watching Dexter on Netflix. A few years ago, I did watch Dexter from season 5 onwards but never found the chance to watch the earlier seasons. So I am using this chance to catch the earlier season. I am also trying to justify to myself if I can learn something about trying to develop a character that has psychopathic tendencies yet have great self-control over his urges.

Other than that, I also have a talk with my parents like over the planned renovation of our rooms. An example would be to remove the wardrobe that I have in my room for over fifteen years. It’s kind of falling apart.

Another of note is I have notice how my blog’s viewership has fallen compared to the last six months. There is nobody else to blame, not even myself, actually because I made the choice to pivot towards writing fiction. And thus far, I really hadn’t been having any inspiration to write any new short story. As for poems, well, I don’t really have much inspiration either.

So until then, I will continue to go about my life, keep working on what I do best for a living, interact with people, keep reading more fiction books, play more video games and watch more shows.

Daily Log #40

While I was getting my daily Starbucks drink, the manager at the counter asked me how many times I get drinks from Starbucks per day. I told her one. Then she asked if I drink it every day including weekends. I told her no. The reason she’s asking was because I’m always at the store just before I make my way to office and most of the time, she’s at work too.

There were a few staffs who recognize me because of my frequent patronage. When I didn’t go there on a particular day, they will ask where I go the next time I visit. Because of this, I do feel bad not going and get something. But I also have to be aware of how much money I’m actually spending there and the occasional deprivation is important so that the mind doesn’t become truly addicted.

At work, I focus on doing a bunch of refactoring and renaming of existing classes and functions because I want to adhere to using domain-specific or user-specific terminology language. A big part of that want comes from the desire to express my codes correctly so that there are no confusion between what the user want and what is implemented. My colleagues, well, they are still stuck with the mindset of letting whatever that is in the external system leak into our current application. There may not be any problems in the short term but in the long term, when it comes to maintenance, it will be a nightmare for future teammates because of the disconnect. There will be confusions…

Hmm…

It just dawn on me that there is a basis to this aversion to letting the concepts, naming, or values from an external system leak into our current application. That basis is authenticity and self-identity. These two are something that I value a lot. Letting the concepts from another system enter into the our application is like you as a person let another person define who you are.

For example, if another person say you are tall, you accept that and make yourself tall. Then so if another person call you ugly, you accept that and make yourself ugly?

I don’t believe anyone would do that right?

This is erosion of self. And in some case, it’s just impossible. If you are short, you can’t make yourself tall. It’s confusing to other people who are looking at you. They won’t understand why you are making yourself into something you are not.

So if you don’t do such a thing to yourself, why do you make the application you develop become something it is not and use values or data that doesn’t belong in its core domain?

Where is that adapter?

What is that translator?

This is why my codes now are being refactored to rely on those things I mentioned. Every class files that I have created are put into their proper folders with a certain structure. Functions and variables are properly named. I just cannot tolerate the lost of identity, meaning and context within a given application built for a specific purpose.

For example, if it is an accounting application, the terms (be it function name, variable name, etc) has to be related to the actions or operation founds in accounting.

In the case of my colleagues, since they don’t really want to follow and the team lead didn’t enforce, I will just leave their stuff alone. At the end of the day, from management’s perspective, as long as something works, who cares about code style. At least that’s my view of people in management, especially those higher than project managers.

After work, I went home, had a quick shower and joined my mom and sister for dinner.

An hour after dinner, I decided to go for a run because it’s time for me to stop finding excuses not to run on a weekday. Previously (six months ago to be precise), I put a run schedule in my calendar for every Tuesday at 9 PM but I always ignored it because there was always something else to do: Netflix, Writing, and more Netflix. I’m rather disappoint with myself for lacking that discipline.

Anyway, the good thing about running at night is it’s cooler and there are less people on the street. That also mean lesser chance of encountering smokers walking around.

Second hand smoke is already bad for health, and especially so if one is running as you will be taking in bigger breaths. Despite the statistics of 1 non-smoker dying from smoke-related illness like lung cancer, the government isn’t doing anything about it. At least not in a meaningful way that will reduce 1 to 0. I personally believe it has to do with the tax collected from cigarette sales because it’s the only thing that’s more important than health. That’s also what my friends have been saying too: There’s a lot of tax to collect from cigarettes, the government won’t ban it outright. So until I’m shown otherwise, I’m sticking to this view.

After the run, I had another shower again.

Then I got down to write this log. Along the way, hunger struck and had to make myself a cup of oats.

Hmm… it’s already 11.20pm and I hadn’t really put in any new words for my novel. Anyway, I’m tired too so I will sleep early and wake up earlier.

Journal #332

A massive pang of disgruntlement and dissatisfaction struck. The world looked like it was all dark and hopeless. You didn’t know what else you could do. You wanted to give up. You wanted to shred every single piece of work you have ever done because you thought, ‘what’s the point?’

In this world, full of writers of both non-fiction and fiction, what makes you any better than those people? Nothing.

In this world, full of programmers, what makes you any better than those people? Nothing.

So you feel like you have nothing to contribute. Whatever you have done and will do, others have done it before. They came, they did, and now they are gone. Have you heard of them? No. Not all of them anyway.

You consistently put your work out but the quality isn’t consistent. You got your bad days. You got your good day. And you got your neither here or there days. You know that it’s fine. Nobody, ever, put out their best work consistently everyday. You have reconciled with that fact.

But have you?

Because the moment you go and look at the stats, the metric that determines whether anyone consumes your content, you realized that no matter what you have done, those numbers never quite go anywhere.

The question is, why do you still care? It has always been all about what you have done better than previous. Yet those numbers still gets you down.

It’s really simple. You are still stuck in that mindset of treating it as a scorecard. You are still comparing yourself against the world. A persistent low score means you failed.

But have you?

No, you haven’t.

This is what you need to do.

  1. Consistently build up your skills to write better so that you can squash that thing call insecurity.
  2. Find a better platform. A more minimalistic platform where there are no numbers so that you can focus only on the one thing that matters: Your writing.
  3. Re-audit your surroundings. Your friends, your parents, your surroundings. Are they helping or holding you back. Cut or remove the bad ones or reduce your time spent. Find new ones.
  4. Re-evaluate if the way you publicize your works are getting you anywhere. If the publicizing platforms aren’t channeling more readers your way, cut them. It’s superfluous and a waste of your time.
  5. Put in a system. It has to be a system that you can consistently follow to consistently write more and improve your overall health. Poor health means you can’t do anything good.
  6. Go out. See the world and step out of your comfort zone every now and then.
  7. Finally, decide on what is success. What is your definition of success when it comes to writing?

All the above applies to your programming. After all, it’s a form of writing.

Journal #311

Today was a decent day. I felt slightly happy because it’s Friday. And I do feel pretty lazy and unproductive.

Oh, I also came down with cold/flu-like symptoms and spent the whole morning until lunch sneezing away.

I did mention I don’t feel inspired to work on anything yesterday. But that doesn’t mean I didn’t do any work. Doing even something small is better than nothing.

My definition of small for today was building a high definition prototype of a search result page. At first, I thought the Telerik library used for the project had some kind of built in image gallery. After some searching, there was none.

Then I stumbled upon the RadTilesList user control provided by the library. I thought with some basic hacking and tweaking the codes, I can use it to present search result like an image gallery. But since it was the first time I’m using this particular control, I had to spend some time studying on how to use the control.

The whole high definition prototype took me two hours to cobble together. The end result looked pretty good. Of course, there aren’t any major business logic or codes that will handle events or load data. Instead, I let it relied on hardcoded data so that I can show my colleagues if the overall look and feel is acceptable.

I did show my colleagues and team lead after lunch the prototype. They gave me some feedback like how to present the data and how big the individual component should be.

They also mentioned how ugly some parts were. Haha. Surprisingly, I’m totally fine with that comment. Looks like I have somehow learn to let go of some stuff… or maybe I am disengaged from my work. Can’t tell which.

So, with the feedbacks, I put in the placeholders for the data, tweaked the grid used to hold the components and tweaked the size of each tile.

By around 3pm, I was done working. I just lost the desire to work and want to do something else.

I spent the remaining time playing some games on my phone, chatted with my colleague and helped her out with the part she’s working on, especially the RESTful API, SQL query using Linq, and chomping down on the bunch of fruits (a slice of watermelon, honey melon, and a bunch of kiwis) I bought.

I also bought a 250ml bottle of Soy to drink. The combination of fruits and soy turned out to be the right call. I didn’t feel that hungry until like 7pm.

Once the clock struck 6pm, I pretty much scurried out of office and made my way home. After I got home, I spent the evening showering, having dinner, and watching the last episode of Altered Carbon on Netflix.

There is a new movie call The Ritual and looks interesting. Maybe I will watch it later tonight.

And yes, I know I promised I will prepare an iPhone X review some journal back. I will get that done and published before the end of the week.

Tomorrow, I will have to do spring cleaning. Chinese New Year is around the corner and there aren’t any more days left for me to do that. And I have not gotten any new clothes.

If you are wondering, Chinese traditionally will buy new clothes for the lunar new year as part of the saying, “get rid of the old, welcome the new”. The minimalist in me now is wondering what should I do…

Journal #310

The cold I had yesterday didn’t really go away this morning. So after breakfast, I had to self-medicate. That medicine kicked just when I left house for work. It made me pretty drowsy and slow my reaction time down. I got pretty clumsy in a way when I walk. But I made it to the train station safely. Ha.

I went to work and ordered a grande-size Dark Mocha along with a Panwich with chicken ham and cheese from Starbucks. Those two combined sure could last me until 12pm and I wasn’t even hungry when I went for lunch with my colleagues.

Work was uninspiring. I no longer feel excited by the project and I don’t feel that excited by anything I have implemented so far.

In the morning, we had a quick sync up on what’s our progress with the team lead. I also saw that I still got a whole bunch of JIRA tasks I need to clear yet I don’t feel like working on them.

At around 3pm or so, I got so tired that I just feel like lying down and sleep. But since it’s not conducive to sleep there, I fight off that urge and use my phone instead. Social media prove helpful.

Later in the afternoon, like around 4pm, I went and guide my colleague on how to work with the server-side code. According to her, she has never touched backend stuff including entity frameworks since 7 years ago. By about 5 pm, she confident enough and ready to continue from there.

I spent the next hour or so discussing with my other colleague about how to implement asynchronous processing for one of the use case. After much discussion, we went from a highly complex solution to something really simple. It turns out we don’t need to do something that complex like task scheduling or management. All that is needed is the use of a thread pool or a timer, a few conditional statements and a few loops with database backing. We could achieve asynchronous processing without blocking user interaction.

That felt kind of good.

So, earlier I was saying that I felt uninspired at work and only want to do the bare minimum. Well, there is only one person to look at when it comes to such situation. That person is me. I will have to re-evaluate what I’m looking for again and what I should be doing next.

So let me break it down…

First, I need the money to pay off the credit card bill I incurred buying the iPhone X.

Second, I need the money to go for further studies. It could be anything. Short courses. Online courses. Anything that expand my knowledge further.

Third, I need to take a quick break and focus on my hobbies to counteract that feeling I’m having now.

Fourth, I need the money to build my freedom fund.

Let me start with money…

Therefore, for as long as I do my job not to shabbily, and don’t break any rules, I should be fine. I will just look forward to my paycheck every month. Check.

Have a break…

Well, I decided to go for a long weekend break during the Chinese New Year period. I applied for a day of paid leave the following Monday, which is the 19th. I will use that day to actually take a good break and focus on other stuff.

I will probably go on another break in March and then on a three-day or two-day course in April. I am thinking of User Experience Design or Creative Writing.

Journal #249 – Work was both good and bad, learnt something new

When I went office this morning, I was feeling tired and irritable. That’s even after I started coffee and waited for the caffeine to kick in. So that was definitely not caffeine-deprivation.

So I went through my morning feeling pretty angsty and went about doing my task. I did try my best to control my emotions from going out of control.

In hindsight, I suspect it was actually depression masquerading as irritation as described in this article.

At around lunch time, I decided to go for lunch at Ichiban Sushi for some sashimi. After lunch, I continue about converting the existing implementations to use the new web service and fixing any regressions. However, the server backend keep dying caused by overused threads in the application pool, so it wasn’t really productive.

My colleagues did later find out what was causing the IIS threads to be overused and stuck, preventing the server from responding to further requests. It was due to a problem with the way Linq was used to query the database. We didn’t know about deferred and eager execution, at least in the context of database and entity framework. Eager execution only happens under certain scenarios like when you execute “.ToList()”. While deferred execution seems to be the default operation.

So that is one new thing that I learn about at work today.

The second new thing that I learn about was how SoapUI behave when attempting to download WSDL files that has its XMLNS defined and the system running SoapUI do not have any access to the internet. It turns out SoapUI will throw UnknownHostException. One possible solution was to download the WSDl file.