Journal #254 – Good progress overall

Today is another application deployment day.

I met up with my colleagues at the cafeteria of the customer’s building. I had my second breakfast and coffee there before we made our way up.

If you are wondering why I have two breakfast, it’s because of my stomach’s high acidity and need food to ensure my stomach wall don’t get eroded. I could take antacid but they only help to relieve the symptoms for a little while and after that, I will get excessive gas and gut discomfort.

So food is the best way.

After that, my colleagues and I went up to the main office making our way specifically to the datacenter, signed in, got the assigned laptops and start working.

The initial deployment went pretty well. I dare say the whole experience was smooth. The application functions as intended after subjecting it to some testing and my team lead was happy with it. I felt good but I thought the application could be better. I mean if you want it to be a product to sell elsewhere, whatever we have now isn’t enough. But I also have to keep in mind that right now we have to deliver something for phase 1 of the project before end of the year and so we did our best within the time we got. So I will still take the win.

While testing, my team lead and I found some usability issues that should be fixed and so I noted them down.

In the meantime, my other colleague proceeded to deploy a version of the application with kerberos authentication over HTTP. I also prepared another copy of the client application for that purpose. Enabling proper kerberos authentication is as simple as changing the configuration file and that’s as far as what we have implemented.

However, there was some issue with the server side and it was already lunch. So we decided to call it quits and go for lunch. We packed up the stuff and left the building.

We ate at Chinatown. I had fried carrot cake for lunch as I don’t feel like walking around looking for food, don’t feel like queuing for food, and I’m a pescatarian. The combination meant that, I will order something from a stall with few people and doesn’t serve meat.

After that, I went to get what is known as fried butterfly bun to serve as late afternoon snack. I think Malaysians call it horseshoes due to the shape.

In hindsight, it looks like I actually consume quite a lot of carbohydrates.

Anyway, we made our way back and start working again. My colleagues finally could get the server side application working and started ensuring the four instances of the application are all load balanced. Then, I went about testing the client application again after making some changes to the configuration file. I helped a little bit with the server side stuff too like patching certain data and doing some basic troubleshooting.

All I can say is that I’m pleasantly surprised at how well everything turned out. But at the same time, I also found some usability issue which I noted down. Tomorrow once I’m back in office, I will need to discuss the issues with my colleagues again and see what should be fixed now in light of the need to deploy actual copies of the client application onto the customer’s workstation for actual use by end of next week.

Personally, I have these two days to fix stuff and I don’t want to wait till next week. Next Monday and Tuesday, I won’t be in office anyway as I will be going for a technical writing course. I hope I can fix everything, including the extra stuff that I want to implement by this Friday.

As for the extra stuff, well, I always saw myself as a product developer and so I will always try to implement additional features that I think the user will want or expect based on their experience with other applications. I do care about how the user interact with the application and I want their life to be as easy as possible.

And one last thing I want to share. I actually procrastinated a lot before I got down to writing this journal. I am feeling very lazy these days and I just want to play games or do something else. I suspect it could be the time of the year. I don’t really know yet. But still, I force myself to write either way. This is why I publish the science news roundup first because it is the easiest thing to do. I know what kind of science I like and what kind of news I enjoy. So by lowering the activation barrier, I can move on to do a bigger piece of work like writing this journal. When I got started, the words just pours out.

So I call that a good progress too. Another win for me.


Journal #253 – Documenting my Monday

After spending the last half an hour struggling to narrow down a decent thought to start writing from, I decided to give up. Documenting my day shall be the default mode rather than wasting any more time trying to find a perfect topic to talk about. And part of my decision process included me writing something on Facebook that got me settled down.

So what’s my day like?

I went to work slightly earlier today because there is a company-hosted dialogue session for new employees. The best part of my morning was I was melting as I made my way to office from the MRT station. In other words, I was basically sweating non-stop until my shirts (I wear two layers, one to absorb sweat) got soaked through. My body for some reason felt exceeding warm and just keep sweating. Yesterday was fine actually. The worse was when I was getting my daily Starbucks and I was just standing there waiting for the barista to make my coffee.

At the dialogue session, the person conducting was one of the department manager introduced himself and got us to introduce ourselves. Then he talked about how the company is transiting to building products instead of just providing services and doing projects.

After the whole talk, I am not even convinced because I have been lied to so many times by company management about building products and Singaporeans in general always think in terms of project. It’s almost like they are incapable of thinking in terms of product development. That’s just my conclusion from what I have seen. I want that conclusion to change and in order for that to change, I need to see actual Singaporeans doing product development.

I would like someone with way more experience in product development to share what are some of the most common approaches to product development in a company. Whatever I know right now is theoretical (I think closer to be naive) and I have never got the chance to experience it. And by theoretical I mean some of it is based off this article by ThoughtWorks. I also have an idealistic view of how products should be built.

One aspect of product development, which I think is important, is the process has to be design-driven. To me, without being design-driven, it will be very hard to lay down the foundations for future growth because you don’t get the chance to ask the right questions.

The other is having a team of product developers, not just developers who think short term and simply want to get the project done and over with.

One last very important thing is funding. I believe that you need to have a delicate set of funds to support the process of product development. You can think of it as an upfront investment. I don’t know how correct I am on this part but I have experienced enough where the company simply don’t have the money to support product development because the money comes from existing projects. All the research and development, trial and error, etc. simply couldn’t be done properly. All that tend to make me doubt the company about its ability to build and sell products. Again, I could be wrong. Someone please correct me on this.

After that, I went back to my desk and continued to implement whatever features I need to do and fix any bugs found. Tomorrow is when we will be deploying a proper set of applications for the actual use by the customer over the holiday week. So we will be testing it heavily over the next few days to identify any further issues and fix them fast.

Thus far, I hadn’t been enjoying the process of working on this project. The biggest gripe that I have is with the project approach the company is taking despite their claim of wanting it to be a product. But it’s not up to me at this moment because I’m not in that position. And I have no intention of being in that position because I never want to manage people. I just want to focus on doing what I am doing to the best of my ability.

The other gripe I have is with the design side of things. Design just wasn’t done properly and every developer is just implementing stuff their way just to meet the basic use cases. Our team lead did try to ensure whatever we implemented is useable and perform well but that’s about it. It’s not his fault really because his plate is pretty much full too. At my company, one person will be responsible for more and more projects over the years. So with that kind of multitasking, I don’t think it will be possible for that one person to think of the future of a so-called product.

For me, I did try my best to think of the future—think about how the user will want to use the application and what will happen if I don’t do certain things. Within the short time frame, I did whatever I could to add certain kind of controls, ensure certain kind of interaction the user can have with the application. But I also know that I could be completely wrong with what I implemented and will need to change later. I have also tried to ensure code reusability by introducing more layering.

By around 5.45pm, I was done gathering the latest client code from source control and compiling the codes into a deployable application for tomorrow. I put the compiled files into a folder on the share folder where my other colleague was preparing the server stuff. I waited for my colleague to finish putting everything onto a thumbdrive before leaving.

So tomorrow, I will go to the customer office to do the deployment and testing the applications. I do hope it goes smoothly.

I went home to rain and then join my mom for dinner at the Legendary Hong Kong restaurant. I ordered Seafood fried rice with XO sauce, pineapple drink (basically canned pineapple with syrup), and steamed shrimp dumplings.

Nothing too fancy but then the price tag is just not worth it. The food is just too average and I could get them cheaper from elsewhere. I think I will avoid going to this restaurant in the future.

Journal #252 – Just exhausted

I didn’t feel like writing anything today. As I wrote that sentence, I felt like just switching off my computer, brush my teeth, and go to bed. But I shall compel myself to write something. At least a quick summary of what happened.

The quick version is: I’m exhausted.

Ok, I’m done.

Nah, I’m just kidding. Here’s a slightly longer documentation of my life.

There are many reasons for me being exhausted. You can call them excuses because I will most probably agree with you.

The first reason was that I didn’t even want to get out of bed this morning because I didn’t have enough sleep and that is despite the fact I went to bed last night at around 10pm. I was tossing and turning in bed until about maybe 12am.

The other was I spent roughly 45 minutes more today at work writing codes and implementing a feature. By the time I left my office and boarded the train, it was already 7pm and my mind was in complete daze. I couldn’t be bothered to think about anything. I didn’t even want to make any decisions. Even my attempts at playing Sky Force on my phone ended with my plane being blown up within a minute. I tried a few more times and kept getting blown up because I just couldn’t concentrate. But it’s just a game, so I didn’t give a shit. Once I reached my station, I stopped and made my way home.

Once I reached home, read an article on Facebook and went for a shower. Then I just lazed around, reading articles online, watched some YouTube video around until dinner. Had two plates of home-made spaghetti and went to watch one episode of Dark on Netflix.

After I’m done with that episode, I got down to write this journal. And here I am, yawning away.

Alright, I shall listen to my body and just end it here. The weather is pretty good today for sleeping. It’s so cooling.

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.

Journal #248 – It can get frustrating

Work can be frustrating when things don’t go your way.

Life can be frustrating when things don’t go your way.

Even play can be frustrating when things don’t go your way.

Being a programmer, a software engineer, is especially frustrating. Sometimes you got stuck on solving a problem and you got a deadline approaching you. Then you got your team lead pushing for stuff to be done faster.

Right now, I’m struggling to even deliver any decent quality in my work. The existing code base is such a mess that it is starting to lose its form and I can see it could create potential problems in terms of maintainability in the future. But do we have the time to fix it?


There is never time because once the software is delivered by the end of this year, it will be tested briefly, then a quick two weeks UAT, and then go straight into productions. After that, it will be second phase of development.

At the same time, my colleague who is responsible for the frontend mostly implements stuff that are requested and don’t think further about how the user would use the application. She approached it based on how she would use the application.

I hate that approach because it leads to applications that scream “I suck. Don’t use me.” Well, that’s how I see it anyway because I do use quite a number of apps and subconsciously, I’m judging all of them by a lot of metrics. Ease of use, minimalistic, and how it look are some of the metrics, if you want to know.

So what my colleague is doing does feel like going against my desire for quality application for user to use but I also recognize what I could do is work within that constraint and do quality. I can’t change another person but I can change myself.

Another reason why I get upset about building an application without caring how user would use it is about my legacy. I know for a fact that people or users tend to harp on problems and issues rather than the good things. I just can’t help but feel like this is a drag on the overall quality. I admit that a part of me is wondering if I should continue to be part of this development work. I don’t want people to think that I was part of a team that deliver a basically functional software but lack the thought or empathy for the user.

But I will note that I’m not yet depressed though I catch myself just taking whatever it is my colleague decide to implement and starting to not care anymore. As long as it works, right?

Whatever my feelings are, it doesn’t mean that I lost sight of the big picture. The customer only want a functional product delivered on time that also perform well so that the users can do their jobs. My company is concern with the Profit and Loss. I have to work within that too and it’s frustrating.

If only we got unlimited budget…

Journal #247 – Work-related reflection

I must have gone mad because today marks another day where I actually write two journal entries. Well, it turns out it may be a good thing. You may ask why.

The truth is in any given day, there will be many things going on at once and sometimes, each of those things should be documented and distilled. Your thoughts and feelings about each of those events should be put out there for people to read. One journal post that summarize the whole day just don’t cut it.

My first journal for today talks about my dental appointment, some background, the importance of oral health, and me showing gratitude.

For this journal, I shall talk about some thing that happened at work.

So after I’m done collecting my new identity card from the Singapore Immigration and Checkpoint Agency and had my lunch, I went back to office in the afternoon.

Once there, my primarily focus was still getting the pagination stuff implemented properly.

But before I could get down to doing my work, my team leader came over to talk to me and my colleague about the high-priority stuffs that we need to do before start of 18 December. That week, we will be deploying at least two copies of the client application onto the customer’s workstation for them to test over the holiday week and provide feedback. To ensure that happens, we need to test our stuff properly and give training.

So during the talk, he asked us when we can finish the part that we are assigned. I told him I can finish my assigned tasks by 13 December. And not surprisingly, my colleague also said the same date. Personally, I think it is because no one wants to give the impression they are not effective in doing their job. But I never ask and don’t really care. For me, I will just do my part to the best of my ability and what I have promised.

After that, I got down to business and started solving a specific problem that could cause some usability when user perform dynamic searching of data.

As I was solving the problem, I encountered an issue where the server-side application is not very responsive to client requests sent via HTTP. It turns out, the IIS was stuck processing a large volume of request generated by an external system for the purpose of data syncing.

I went and talk to my colleague about it and was genuinely surprised at why we are using the same application instance to process data-sync requests. I was expecting the data-sync was done using another cluster that is independent. I even went to talk to my ex-manager to talk about whether having a second cluster was there right way to go. After all he has far more experience with these kind of thing. He did gave me some suggestions, which I am going to tell the team leader about it. But for now, it turns out the architecture was meant to be like that due to resource constraint. I seriously hope we can change that soon if not we will be the ones suffering.

During the discussion about the performance issue, we ended up talking about stuff like my focus is on delivering high quality even just for one part and how the company itself isn’t even putting quality first, even though that was one of their core values. It’s actually very obvious when compared to my previous company and I did mention it from time to time in my past journals. The first indication of lack of quality is the lack of proper training and getting the right people for the job. Due to budget constraint, the company just decide to dump everything on us and ask us to figure it out. Not that it’s wrong but it’s not effective especially in the face of short development time, large amount of data the application needs to handle, and our general lack of experience in infrastructure-related stuff.

Now that’s not an excuse for us not to learn or do our job. To be useful to the organization, one has to learn, apply what one has learn, and solve problems given a certain resource constraint.

However, it is a problem when the resource constraint reach a certain level where it is obvious there is no budget for us to do anything worth our time.

I heard that the project that we are on has actually exceeded its current budget and the management can’t add additional manpower. I don’t know how true is that but it is something that I have seen and heard before. I encountered the same thing in my previous job because the project got dragged too long.

I think this issue is especially rampant in Singapore. I’m probably wrong to generalize like that and I know I have not face enough stuff in life but my conclusion is based on the culture of Singaporeans when it comes to services—everybody wants cheap, wants high quality, and fast. And management people tend to squeeze the people below them to achieve profit at the expense of job satisfaction. In a way, most Singaporean workers are highly skilled but underpaid and under-appreciated. Some of them can’t quit because of their family. Please feel free to correct me if I’m wrong here.

I would love for someone working in the tech industry elsewhere in the world to share what’s like over wherever they are.

Regardless of the budget issue, I will still focus on doing my job well and deliver quality work but that doesn’t mean I will flood myself with work. It’s all about being un-busy, focusing on the really important stuff. Right now, quality software is the important stuff.

There is a mindset that got drilled into me by my previous boss and it goes something like this, “I am not the one paying your salary. Your customer is the one paying you. If you don’t deliver quality, no one will look for you anymore.”

Now I realize how it fits into my values and I am telling myself, “It is not my company paying me. They are just the intermediary, an agency of sort. My focus is the customer and I will do my best to make their life easy.”

In the spirit of delivering quality and finishing my task, I got the pagination of data working. I have also implemented additional stuff to make life easy—like a refresh button for an example. I also made sure the component can be operated in an intuitive way, well, at least the way I see it now. It will have to face the customer and only then I will know for sure if I did something correctly.

When I was testing the functionalities, I lost my patience and got pretty irritated a lot of times because the server was responding a little too slowly. Data loading took a long time. It was already 6.30pm when I finally left office. Way later than I would like actually but I got what I need to do done.

Journal #244 – Maybe mundane work but it starts from one

At first, I found myself procrastinating about writing this journal because I wasn’t sure what I want to talk about. There are a few things in mind causing me to doubt if I am able to squeeze them in and give a relevant title. Then as I wrote the subsequent paragraphs, it became obvious that I should cover different aspects of my day in separate journals. So after some editing and sorting, this journal is about work and how “one” is an important number.

I will just say that work was pretty mundane. It’s all about going through the drudgery, fixing bugs, testing the fixes, implementing new functionality to improve usability and tweaking certain areas of the application.

The latest update I got from my team leader was the customer wanted at least a few instance of the application running on their workstations before Christmas so that they can test it out over the last week until New Year. That means we don’t really have that much time to implement any brand new features.

So with the time we got now, our priority is getting the pagination capabilities working. Thus far, our application hasn’t been doing any pagination, server-side sorting and searching. That happened because we were so focus on delivering function that we didn’t put performance first. In hindsight, it’s probably because the application is a thick client and the workstations can do the heavy lifting. At least that’s what one of my colleague seems to lean towards.

As of mid last week, we were actually loading thousands of records over the network into local memory. An utter embarrassment. Right now, I feel disgusted with our current codebase. Yes, the code works and there are design patterns being applied. However, the way the patterns are applied look like they are hybrids. Even my own codes are ugly.

Bug fixes and User Interface tweaks were done in the morning. After lunch, I spent my afternoon doing that pagination stuff, at least getting the basic function right and removing the unnecessary multi-threaded operations. Honestly, it didn’t take me longer than an hour to get the basics working and tested, only to find that there were some performance issues. Tomorrow I will go and test more after my colleague tried to optimize the backend codes and have already deployed it into the development server.

I also had a discussion with my team leader on what I will do next to improve usability because I had some ideas. After explaining, my team lead asked, “Do we even need to implement that feature so well? We are not Apple. We are Android.”

It’s a known fact that I am a fan of Apple because of their well-built products which made my life convenient. Their products are very usable and intuitive. There’s quality everywhere, which is inline with what I am looking for. And I’m willing to pay for that.

With that comment, I went on to justify that if we don’t do what I suggested, then user will find themselves drowning in pop-up boxes and alerts, which are all distractions, pulling them away from what they want to achieve. It slows down their workflow.

From management perspective, it’s probably overkill for that given module that I’m working on. It’s only used by system administrators, which aren’t many. Therefore, it’s easy to see it is not cost effective to do that part so well.

But I don’t subscribe to that school of thought. I believe in committing to quality for one person, one software module, or one software function at a time to achieve extraordinary things.

It’s like my journals. I’m a nobody and I’m writing this journal for me because I want to document my own journey in life. I want to see how far I have come. But if I can’t even deploy that discipline, patience and desire for quality, I won’t even read my own journals, much less improve.

There is no doubt I will fumble and some of my journals are too boring but at the end of it, I will still feel proud of my own work because I tried to do it for one person, which is me. And if along the way, these journals even helps one person in any form or shape, it is the best thing in the world.

Don’t just take my word for it. Practice focusing on and committing to one thing at a time, deploy the patience and discipline and giving all your best. Gary Vaynerchuk also advised in his blog post about WHY 1 VIEW CAN CHANGE EVERYTHING. Or Yann Girard on The only way to succeed at anything

So work maybe mundane but if you can’t even do one mundane work with quality, you can forget about doing it for everything else.

Remember, everything starts from 1…

Journal #239 – Good day or bad day?

I don’t know if today was a good day or a bad day, having trouble writing this journal, stumbling and rewriting the introduction over and over again.

At first I wanted to make this update into a rap but the words just won’t come out. At least I tried. I mean I got rap music going on as I write this journal.

Me: “Come on brain. Damn you brain. Help me out.”

Brain: “Just write, just write!”

Me: “Ok! I write!”

I shall go with today was a good day.

Discoveries made the unknown known, creating ways for me to move forward with my work.

ClickOnce deployment was work, patching of application through ClickOnce work, custom installation path of ClickOnce don’t work.

I feel proud. Pat myself on the back.

Bugs were fixed. The UI was made consistent after reviewing the changes.

Spent the afternoon to implement a hybrid paginated, lazy-loaded list. Team leader expected me to do a quick one but I end up putting extra effort to create something more useful and is slightly more robust to handle user interaction. Definitely slightly more than the possible implementation my team leader suggested. I threw in multi-threading, thread cancellation, synchronizing changes made to the collection used for the list.

By the time I’m done, it was time to package the code for deployment tomorrow. We got a performance test at the customer site to see how our application handle tens of thousands of records.

Part of me expect failure. Expect the application to explode in a massive supernova loading that amount of data.


We were and still are practically rushing through the implementations just so to meet a timeline that now appear to be shifting again. The UAT date doesn’t look like to be next month anymore.

So that lead me to the question: “Did my company just forced me to defer my military reservist by three months just to finish primary development before November so that we can do UAT in December only for the UAT to be pushed to January 2018, considering I will only be gone for two weeks back in October and could have easily finished my part before January after I come back to work, and now I have to go back reservist by myself for two weeks next year in January?”

So I’m not happy at all. Pissed in fact.

But I also understand that nobody can foresee such kind of changes. Yet this decision by the company actually has a more drastic effect on my future reservists, who I am with, when I get to finish my reservist, and has a future effect on my plans when I’m in my late thirties, early forties, etc.

So now, it’s not a good day at all but there is nothing I can do about it, so I will just live with it.

Journal #237 – Out of inspiration, I think

You read that right.

I ran out of inspirations and ideas.

I don’t know what else to write that doesn’t sound boring. I know I could fall back to just documenting, which is what I have been doing.

Why did I keep going back to that? Because my day was I would call uninteresting.

And what did I do today? I will document from the most recent to the earliest. Personally, I don’t think I was being productive. You be the judge of that.

I wrote a review about something I bought and published it just a couple of minutes ago.

Before that?

I watched Supergirl and Arrow because it is a four-part crossover. And I have never watched supergirl so I don’t know what’s happening before today.

And before that?

I went out for dinner with my mom after I got home and had a shower. As usual, I ate at a nearby foodcourt, having a vegetarian meal. There’s really nothing super nice, is suitable for a pescatarian, and filling. I really didn’t want to feel hunger later at night. And as I write this line, I’m actually feeling hungry. Damn.

Anyway, what’s before that? I was at work? I did some more coding to standardize the dialogs used, add more logging. I did join my colleagues for lunch, one of the rarer things this particular month because I have been eating by myself at Green Dot and Simply Wrapps for the past few months.

And now we are approaching what I did for the earlier part of the day.

I was in a three-hour course conducted by internal people covering about things like risk management, security, export control, and procurement procedures. Everyone at my company needs to know those. I would say those topics are dry but necessary to ensure that we don’t get ourselves into trouble with the law and the company. My personal safety and stability is dependent on that.

And do you want to know what’s before that? I suppose I will just write it down cause I’m documenting in a reverse order.

Ate first breakfast, showered, left home, commuted, got Starbucks and a sandwich, and arrived at office. Then I eat my sandwich.

So did I ran out of inspiration? Yeah… I think I did. But did I write anything? I sure did. You see, I started out with not really sure what to write and now the words just keep pouring out.

The power of simply starting. Or be the 5 minutes writer like someone smarter, more successful, and more hardworking than me said.

And what’s next.

Well, until now I still hadn’t gotten around to signup for the technical writing course.


Because the course required me to fill in some very personal and sensitive information and yet doesn’t use HTTPS.

I mean seriously?

With all the data breaches and stuff in the recent years…what’s the school thinking?

Journal #236 – Development, both software and personal

Work today was like consisting of meetings and some development work.

The meetings were all about status update of the project and determine the next series of tasks to do in the near future.

Then in the afternoon, it was all about bug fixing, standardizing stuff like the dialog boxes, and adding logs.

Other than that, I also told my team lead that I will be going for a two day course in technical writing in December. He’s ok with it. So I will sign up for it and taking two days of paid leave to go for the course.

As I did mention many times that I wanted to switch career from software development into writing-related and going for this course is part of that. Consider it as investing in myself, to develop my skillset further.

Yesterday, I said I will get the AIR+ Smart Mask and so I did after work.

The smart mask comes in two parts for effective use. The first is the mask itself, that is certified to be N95.

The second part is the micro ventilator meant to help expel trapped heat, moisture, carbon dioxide.

I have yet to try them out and now I’m charging the ventilator. On a full charge, the ventilator can last two hours or so.

I will try the mask out tomorrow and see how well it filter out cigarette smoke that I encounter ever so often in Singapore.