Wednesday, December 30, 2015

Blogger December 2015 Stats

Google Analytics
Sessions = 905
Users = 817
PageViews = 1898

Google Webmasters
Impressions = 6392
Clicks = 710

Google AdSense
Page Views = 121
Clicks = 0

Pageviews Last Month = 1960
All Time Posts = 374
All Time History Visits = 66818

Sunday, December 13, 2015

Searching an offer to get a raise should be allowed

The Fish for a Raise Game - "Some applicants only want to get a job offer so they can go back to their current employer to ask for a raise."

I do not agree with this. Allow the applicant and if he gets a raise, then you don't want him anyways. Also if they get a raise, then your offer was not good enough. This should be a win-win for both applicant and employer.

If you are afraid of job-hoppers then stop paying below competitive rates. If you are afraid of looking bad, then don't offer unrealistic salaries or rates.

If you are an applicant and treated like this by your recruiter, I suggest you find a different recruiter. Most recruiters are only looking for one thing... and that is not the client nor the applicant. Low offers and high turn-overs are the lifeline of headhunters.

Sunday, December 6, 2015

Cabbage, Nappa, Carrots - Dish not good

I had some leftover cabbage, nappa, and carrots. This did not make a good dish. There was some odd flavor that I couldn't place... maybe the carrots. It was also a little sweet. At least it was edible enough for me to finish off.

Saturday, November 21, 2015

.NET Find User Control in a Master Page, or really any control

Solution: Set the control you want to access to public or whatever accessibility is needed for your application. To do this, you will need to go into the designer.cs file (assuming you are using visual studio; if not, you should already know how to do that).

Error: (When using FindControl) An exception of type 'System.NullReferenceException' occurred in XXXXX.dll but was not handled in user code

Better solution: Create a public function within the master page to do the actions needed.

Scenario: I wanted to create a dedicated login page and had a login process in the master page. The need was to hide the master page login for the login page.

Although I have not considered during the design phase, this can also be used to manage the menus.

Wednesday, November 18, 2015

Cold Calling "Recruiters"

Every so often, I get a burst of cold calling recruiters. I don't know if it is a season or what, but for whatever reason, I always get 5-6 cold callers within a 3-5 day span then radio silence for about a month. I always like to listen to them discuss the last activity on my resume. Because I switch somewhat frequently, I can tell how old the resume the resume they have. And, it is quite fascinating how old some of them are... then at the same time, how old my phone number is............ then how old I am...................... (sigh)

Although kind of annoying, I will admit that I did get a couple jobs through the cold callers and the jobs ended-up not bad. Respectfully, I usually just start the conversation by asking what their rates are. If they tell me, usually the numbers are pretty low, and I tell them the minimum amount it would take me to leave my current job which typically higher than (what I think is) the normal rates. "I think" because I am still figuring out how what that is.

My first couple contracting jobs, the recruiters were more than happy to meet my rate. Then I was suckered into that I already signed up for those rates when I bring up the topic after the interviews. I still worked hard and got some experience eventually leaving for something better. Odd that the same recruiter cannot find a new job for candidates they already have.

Most of the time the recruiter does not give the rate first by asking what I am looking for. So I give a much higher rate than if they gave me their client's range. What I found interesting is that no matter what I give, they always say they cannot meet the range, pick the lower ranged number, and subtract $5 / hr. So if I say that I am look for $50 - 55, they will respond, "I don't think our client can pay that but I can probably get them to do $45." I can double this amount, and they'll say $95. (The values are made up although it would be nice to make $100 / hr.)

Of course, I get fewer call backs when I give higher numbers but it is surprising (at least to me) how they won't reject any value that I provide. Although it sounds like a game, I actually give them real numbers that I can live with because if they ever do say that they can work with it, I do not want to be stuck with something I didn't mean for... even if the number is much higher than the market. Why would I leave a job that I already have good standing at to an unknown place for the similar amount?

Worst is when they ask what I do make... sometimes I give it and sometimes I do not. Why does it matter what I make? If I am going to do more, I should be paid more. If I got a job as a cashier, I am sure they will not be matching my current rate.

One of the many double standards on why everyone just hates the HR industry. Don't hate the recruiters, hate the game =P

Saturday, November 14, 2015

Google Analytics Advertising Feature Opt-out

If you've enabled any Google Analytics Advertising features, you are required to notify your visitors by disclosing the following information in your privacy policy: 

The Google Analytics Advertising Features you've implemented.
How you and third-party vendors use first-party cookies (such as the Google Analytics cookie) or other first-party identifiers, and third-party cookies (such as Google advertising cookies) or other third-party identifiers together.
How visitors can opt-out of the Google Analytics Advertising Features you use, including through Ads Settings, Ad Settings for mobile apps, or any other available means (for example, the NAI's consumer opt-out).

We also encourage you to point users to Google Analytics' currently available opt-outs for the web.

Wednesday, November 11, 2015

Money is like salt...

Money is like salt. In moderation, it can enhance life; too much, it can ruin life; without it, life will continue; and without life, it is quite useless.

Saturday, October 31, 2015

Buggish: Visual Studio 2015, MS SQL mass insert limitation

I just attempted to insert 43000+ records through Visual Studio 2015 SQL Server Object Explorer to my database on MS Azure cloud. For some reason, it errors out and states that there is an error on line 41357.

I ran that row independently and executed without error. I ran the query again and received the same error except the following line. Then I just ran all the inserts in batches. The final batch was the largest with 18,000+ records which took 3.5 minutes to execute.

So all my individual INSERT queries appears to work fine. Perhaps there is a limitation the number of records that can be sent in a single query.

Saturday, October 10, 2015

Update single column to be case-sensitive

ALTER COLUMN [column] [type]

[NOT NULL] is optional

Tuesday, September 29, 2015

Amazon Store Card First Month Requires Manual Payment

I was charged late fee for not paying my first month statement. I checked online to make sure that I had recurring payments setup which it was. I then checked my email and found each one were sent prior to the end of the pay period.

Note that there will be two emails on the recurring payments. The first will be that you configured it, then it takes a couple weeks (13 days for me) for the company to configure the recurring payments. When that is complete a second email is sent.

Within the second email (yes, the grammar error was also in the email): 
Your request to change your Recurring Payment has been processed for your Store Card account ending in ****. You have selected to pay the the "statement balance" option for your monthly Recurring Payment . Payments will be made from your XXXXXXX account ending in **** on your payment due date.
The last statement would make you think that your first month would be paid on your due date. When I called into support, they said that the first month has to be paid manually. He did waive the late fee and said that the second month would be paid via the recurring payment process. Also to note, I did not have to wait long (maybe 3 minutes) on hold and the service rep was articulate, respectable, and quick.

Side note: If you are ever late on a credit card payment, you can typically call in to have the late fee waived if you typically pay it on time. My mom hated using the internet to pay so would only use the paper statement which for some reason she did not always receive. I have not not had any issues (at least with Visa or American Express) with support to have the fee waived.

Edit (10/13/2015) - You could wait till the next month, but if you don't, sync bank will call every, single day because you have an overdue balance. For how badly they seem to want your money, you think they have a manual trigger to use your automated payment information... but of course, that is not the case, and you have to enter all your bank info again.

This was the second time that I had called to sync bank support. This time to ask why I keep getting the calls because the automated message does not state why you should call the number or visit the website. Surprisingly, the support techs have been knowledgeable in the issues and were able to answer my questions directly and clearly without putting me on hold to ask a manager.

Edit (10/31/2015) - I started calls again but no messages, until very recently. This is when I found that my account had an overdue balance which is very odd because I didn't purchase anything. This is odd because I thought I paid after the last time I called and second I had automatic payment set up.

Well, automatic payment setup was my own error. For some reason my account number was off by a digit... which is odd because I usually copy/paste from the bank site. As for my payment, I could not find any records of my attempt to pay but I am almost positive that I did because I had complained last time that my automatic payment info didn't carry over. I remember having to enter all the information again. So, I'm not sure what really happened. Either way, I found an option to pay manually from the automatic payment so this time I didn't have to reenter any information.

And I really cannot repeat this enough, syncbank's support is just awesome again! Although I am not sure if the support person understood about my attempt to pay a month ago, she still was able to waive the late fee again. This time I made sure to check for emails and confirmations after I posted the payment. Prior to the call, I was seriously going to cancel the card.

8667711104 (866) 771-1104

Friday, September 25, 2015

hackerrank Mr K marsh

This puzzle was quite the mind bender for me. I didn't know that performance was one of the requirements so my first attempt worked for the most part but failed some of the test cases due to timeouts. This was only my second challenge outside of the warmups.

The Timed Out Method

Briefly, my first attempt was simply iterate through each 'cell' and within each cell I iterated through all the possible perimeters. As it iterated, I just kept the largest, allowable perimeter. This of course had many, many loops. 1 loop to check so that is O(n^2), then another loop within the loop so another O(n^2) which would make it O(n^4). Then a final loop to validate the perimeter... which for simplicity say another n-order so at most O(n^5). Of course, I tried to cut corners by looking for largest perimeter and skip some loops, but that will be at best be O(n^5 / x) where x is some fixed value which will not outperform the size of the data.

Comparing my solution to a couple that I found on-line, I iterate through rows instead of columns. This is quite minor as long as you remain consistent which dimension goes to which, then they are essentially the same except for the terminology used in the notations or variables. A bigger difference is that I iterate from the largest potential perimeter. I don't think this made a huge difference depending on how the data is provided. Worst case O is the same either way.

Accepted Method

I attempted to write how I reached the need for each step in the code but this turned out to be very messy and tedious and likely very boring to read. But I hope this explanation would be more helpful than just reading the code.

Another matrix is used to calculate the number of marshes. This is used to determine if the top border or bottom border contains a marsh. This matrix contains the accumulation of marshes per row. Thus 'x.x.x.x.....x' will become '112233444445'. The reason for this is to easily identify that 11 is a set, 22 is a set, and so on and so forth. When comparing the left part of the perimeter to the right, if the numbers are different that means that a marsh exists. But when the iteration reaches (for example) as 4 for the top left corner while the top right corner is on the last 4, then a border is found without having to iterate through each cell to find a marsh.

The first logical loop is to identify the left and right side of the perimeter. I chose to start with the far left and the far right (the other solutions start with the far left and the second column which is fine too). This requires two loops to identify all possible widths with different starting points.

The next loop is to identify the height of the perimeter. I started with the top most and bottom most. But as I debugged, I found that the subset perimeters are always true. Thus if I started with the smallest height, I eliminate one of the loops.

Depending on the loop, this determines whether the perimeter should be calculated or not. Initially, we assume we have no rows. When we finally iterate to a partial row with no marshes, we set the initial row.

Iterate to the next row, if the row has no marshes, then calculate the perimeter (store only if it is larger than a previous calculation). If the row contains an x, then do not calculate the perimeter but continue to iterate because it is still a potential side. If the end points of the row contains an x, then that is the end of the iteration for that top boundary by resetting the initial row. Continue to iterate to find other potential loops. Logically, the checks should be in reverse order (ie marshes as endpoints, marshes in boundary, then no marshes).

Hopefully that would be of some help while going over the other codes online.

Attempt to Illustrate the Algorithm

First find top part of the fence. If the land is:

You'll find one acceptable top in line one, column 8-12. Then look if the next row is a potential bottom. If a potential bottom, record the row. If not acceptable, then do not record as potential row. If To be efficient, check if the left-most and right-most are marsh-free. If marsh-free, check if the two values are the same. This will reduce a loop to check all spaces are marsh-free.

x.x...x.....x (potential row)
x.x...x..x..x (not potential row)
x.x...x.....x (potential row)
x.x...x..x..x (not potential row)

After looping throw all rows, you'll find that row #4 will create the largest perimeter for this iteration. If the perimeter is larger than the last perimeter (always true for the first set), record new perimeter value.


Repeat above steps for all other valid top rows. I did not include any logic to exclude subsets but one could be included to make the algorithm faster (efficiency is debatable as it probably requires another matrix).

There is one other major set but you'll find is smaller so will not be recorded.


Edit (10/31/2015):
Added an illustration portion to hopefully better show what is going on.


Saturday, September 19, 2015

C# Exception when using foreach, datatable, and modifying collection

InvalidOperationException was unhandled by user code
An exception of type 'System.InvalidOperationException' occurred in System.Data.dll but was not handled in user code.
Additional information: Collection was modified; enumeration operation might not execute.

I was curious how the foreach worked when I modified the collection. I came about this because I had a list of available options but wanted to remove the ones that already existed in another dataset.

Basically the code went like:
foreach(DataRow dr1 in dt1.Rows)
                    foreach(DataRow dr2 in dt2.Rows)
                        if (dr1["Id"].ToString() == dr2["Id"].ToString())

This causes the above error because I am doing what the error message says. Basically, I had to switch to a for loop instead. If you loop backwards, you can avoid a lot of other checks.

Saturday, September 12, 2015

Storing Approximate or Partial Dates in Database

One of the common issues that I have in programming is how to store questionable dates. There are all different forms of questionable dates, but I have primarily been focused on partial dates where I may or may not have the date. The most common property is the a person's birthday. After a few different ways of storing the date, I have found that having an additional column to store the certainty of the date works best for me thus far.

In MS SQL, I have an additional binary column. I will have two columns, DOB (date) and DOBAppr (binary(1)). DOBAppr contains the certainty of DOB. If DOBAppr is 0 then the date is known exactly. If 1, the day is uncertain. In the application, I will only display Month and Year if DOBAppr is 1. If 2, the month is uncertain. This is uncommon to have only the year and day but the possibility is there. One example is when someone does not explicitly share their DOB but has mentioned that they shared the same day (and you know how old they are). If 3, the day and month is unknown. So basically, I have set it up like a binary flag. 4 is unknown year, 5 is unknown year and date, 6 is unknown year and month, 7 is all unknown.

In the previous solution, I used to broken the date into multiple fields, day (tinyint), month (tinyint), and year (smallint). If the value was unknown, I would leave the field as null or use 0 if null is not allowed. Although slightly easier to build the tables, there was quite a bit of overhead to programming. There are other insignificant inefficiencies. This solution has always just bugged me because it was just not a perfect fit even though it worked sufficiently.

Recently, I have expanded on my application and found other uses to using a flags. I was trying to store data on music genres and one of the field is origins. Often in sources, I only get date ranges or decades. So by simply expanding my flags to include the 4th-bit for decades, 5th-bit for centuries, and 6th-bit for millenniums.

While on this expansion, there is also another flag that I could use in the future like approximation (ie circa, c, ca, circ, or cca). Quite similar to partial dates, but this would also mean that the value provided may be incorrect. For example for circa 2015, this could include 2014 or 2016 (or a wider range depending on the object). For partial dates, 2015 would have high confidence that it is correct (or at least a very small chance for error). Although I have no implemented this yet, the solution still gives this flexibility. I probably would use the last bit.

Sunday, September 6, 2015

TED: Alternate Solution to Addiction

Interesting talk that has changed my views on addiction (chemical hooks) vs reconnecting addicts to other values.

Sunday, August 16, 2015

MS SQL Partial Date

I have been struggling to find a best practice for storing partial dates as I build out an application that attempts to be as flexible as possible in storing information. A lot of information and data are not consistent on date requirements.

There are three different methods that I have thought to do. Another method which is the same way how MySQL implements dates where they use 0s for unknown date parts.

The first attempt was to create multiple columns. This worked ok until I had tables that required multiple date fields then they became cumbersome although could still work.

The next attempt was to use the date field and a bitmap column to identify which part is unknown. This seems cleaner.

I then attempted to research if there was a way to create a new type. I started looking into the user defined types but this did not appear to do what I needed it to do.

The last idea (not yet implemented) is to create another table to store partial dates, then use an id to create a link. This way I did not have to create multiple columns. I am not sure whether I will ever attempt this. The above two seem like a cleaner way to do the same thing.

I had also thought to use an int column to store the date with 0 for unknown parts, YYYYMMDD. For example, 101 will be January, 1st with unknown year; while 20150100 will be January 2015.

Different scenarios where I had the need for partial dates:

  • Birthdays - Users may or may not provide all the information. Year could be required for certain applications. For social media, users are less likely to provide year. Month or day could be the only information known from conversations without prying further.
  • Founded dates - Certain situations like publishers only give the month and year. Other times only the year is known.
  • Known dates - When tracking historical information from hearsay, only confident information can be used. For example when determining the start date of an employee, a person can recall that they started in a certain month but not the exact date.

Saturday, August 15, 2015

Windows 10 (first impression)

Just upgraded yesterday to Windows 10 from Windows 7 Pro. So far the transition has been good. I have not had any issues continuing with working with Visual Studio and standard web surfing.

I haven't had to play around with any OS configurations yet. Glad that I haven't been forced to learn it yet. Didn't notice much of a difference with Microsoft's new browser Edge from IE (besides the cosmetics). I was kind of disappointed that the icon looks similar to IE.

W10 is supposed to be faster but I haven't noticed it being much different so far but then I haven't had any speed issues with W7. Not sure if I care that MS has returned to a more squarish (in some ways more windows-like) format. There are a lot of new settings which look interesting, but importantly not really out of the way.

I do like that do have a few more touchpad commands with sizing, shortcuts with multi-finger tapping. I did not like that it changed the scrolling to reverse scrolling so that the behavior was more similar to a touch screen, but this is changeable.

Saturday, June 20, 2015

Microsoft Word Online (First impression) compared to Google Word

Disclaimer: I typically prefer Google's solutions so my opinion may be biased but I try not to be. I have also been using Google Word for a good period of time, but have only used MS Word Online in the last couple days.

Overall, both solutions meet the basic needs for editing a word document.

So far, Google Word is by far more superior to MS Word Online. MS Word Online is also far behind the capabilities available in MS Office Word so there may be hope in the future of MS Word Online.

As of the time of this post, there are several things lacking in MS Word Online that is available on Google Word both of which are free as long as you have a login. Here is the list of things missing:

  • Revision history
  • Keyboard input (useful for international languages)
  • Offline viewing (personally, I never used this in Google)
  • Table of Contents (this was a huge surprise)

  • Similar layout to MS Office Word*
  • 1-click styles (I use this all the time, Google word requires 2 clicks**)
  • Errors creating/loading word document***

* I know most people do not like the MS Office Word ribbon style, but I have really adapted to the ribbon and find it much more effective. I will admit that there is quite a relearning curve.
** There is a keyboard shortcut for Google word, but ctrl+alt+# is not a simple combination. 
*** This may have been temporary.

Other Notes:
I used Google Chrome for both. This may or may not have a difference to the experience of MS Word Online. I do not plan to test this in IE, maybe Firefox if only Chrome is not available.

Saturday, May 9, 2015

Hyperlink in Gridview

There is no way to decode the hyperlink with gridview when autogeneratecolumns is set true. BoundField has a property HtmlEncode that can be toggled to false to allow hyperlinks.

This was needed for blogs and changelogs but not for defect resolutions due to wanting to deploy the actual html. Not sure what happens if I need to include a link and actual html.

Sunday, April 12, 2015

Buggish: Visual Studio 2013 with Azure - Waiting Internal Operation and Checkin

Waiting Internal Operation

Microsoft Visual Studio is waiting for an internal operation to complete. If you regularly encounter this delay during normal usage, please report this problem to Microsoft.
I don't know why I get this sometimes, but is quite frustrating to wait for several minutes for this to go away. I have not figured what causes this. My only guess at this point is it may be due to me rebuilding the solution too frequently in a short period of time although this is not always the case.

Check In

Check in fails if I have a sql query open that was not saved. I do not want it saved since I only use it to check certain queries and view data information. If I select not to save, the check in will cancel. The only way around this is to close the window or save. What makes it odd is that the count with the number of files does not change so the process is odd to be dependent on a file that is not even part of the project or check in count.

Thursday, March 26, 2015

Buggish: Microsoft Outlook - Replying to Meetings

I just cannot tolerate it after so many years and Outlook versions... why do they not include reply button as an option when you open an Outlook meeting? It has the forward and forward as iCalendar. Yes, you could just CTRL+R or Right-Click > Reply but some people just cannot understand how to do that (those people exist or they just enjoy messing with my brain). That or they conveniently forget every time I explain those options after I waste 2 minutes (plus being distracted from my work plus venting why they do not either write it down or open the several emails with the same steps).

Or I suppose I could just stop sending meeting minutes that way the boss can stop requesting them from coworkers when I am out. Sorry, that was my 2 minute rant. Back to work!

Friday, March 20, 2015

Outlook 2013 - Change Start of Week

File > Options > Calendar > First day of week

I do not know why this changed from my settings from 2010. I tried to get used to this for almost a year, but I just could not take it anymore. I am also partially sad that I do not have the brain agility to just get used it, but I just cannot get the correct date when I schedule things for work. Perhaps it is because everything else outside of Outlook still starts on a Sunday. The biggest problem is when the date starts reaching the end of the month and the day of the week header is further from the dates, my brain just automatically assumes Wednesday is the fourth day of the week and not the third day of the week. Anyways, I could practice more if I actually needed a calendar in my person life but the risks are not worth it for work when you are trying to coordinate 30-100 people.

While I am griping about the new Outlook 2013, I also hate that I no longer can open Outlook while not connected to the work network.


How to change the calendar to start each week to Sunday?
Change which day to start the week? - Outlook 2007

Thursday, March 19, 2015

Your exit clause - Work Contracts

This is a topic that is not discussed often and one that I have not really thought about. This may not impact everyone as not all jobs require you to sign a work contract. But this is something worth knowing before you are presented with one so you know what to look out for.


Guy Kawasaki Keynote - It's about meaning, not money - Business Innovation

Guy Kawasaki gives an interesting talk about business innovation.


Wednesday, March 18, 2015

Interview: Basics by Lazlo Bock

A linkedin article that gives 6 basic points on how to do well in interviews.


Tuesday, March 17, 2015

Life: Car Loan Paid Off

I just completed my final transaction for my car loans. What a relief to have one less bill to pay.

Interestingly, paying off the final payment was not as easy as I thought it would be. When paying online, the normal amount was the final principal plus interest up to the due date. Since I pay online, I find it odd that it would be that amount since the transaction would be for that day. The page does provide the payoff amount.

My options at this point was to use the payoff amount in the "other amounts" field but I was skeptical whether that would trigger that I had paid off my car. I was tempted to just pay the larger amount (it was only 20 cents difference) but then I didn't want the hassle of having them send me a check. So I called into the service desk.

There was no hold time (even though the system told me it would take 2 minutes). There were a few options I had to go through which brought me through the payoff amount, and I got a third amount between the payoff on the site and due date amount. The lady was able to answer all my questions clearly and quickly.

I am to use the "other amounts" field and enter the site's payoff amount since the transaction is before end of day. The phone quote is assuming that I may be mailing in the payoff which it then estimates a 10 day quote.

Overall after three years, I am quite happy using Honda Financials. Hopefully, I did not jinx myself as I still have to wait for my title to be mailed.

Monday, March 16, 2015

Life: Exercise 20150316

Well, I am basically still stuck at the same weight. It still fluctuates +/- 2 pounds from the average. I have decreased the frequency of my gym visits. I now go every other day and sometimes the third day.

Either I have stretched my pants a bit or I may be a bit leaner. I feel leaner and my movements feel more fluid, so I think it is the latter since I haven't actually bothered to measure my waist. Overall, I feel more fit so I am happier about that.

More exciting news is that I ran outside for the first time all year and I have already jogged further and faster than I did late last year. My ankle issue felt like it was slightly coming back near the end of the run. Since it took more time to develop and was much less painful, I am thinking the issue is more to weak ankles than join issue. The issue did not return while I was on the treadmill the following days. As for my preparations for my 5k race, I think I am going at a good pace to beat 36 minutes which would be averaging a little faster than 5mph. I am now able to jog 5 mph for 30 minutes with easy effort where I am still not breathing hard nor feeling tired. Almost 2 months ago, 5 mph for 20 minutes was the furthest my lungs could handle.

I have also noticed that my runs improve much faster when I take breaks from my workouts. I feel like running everyday does not improve as quickly. Very unscientific, but the feeling is rather lop-sided. Even if I do not actually run faster or longer, I definitely feel less sluggish running every other day. Although recently I have not done any sort of exercise in between, I have done some other weight lifting exercises on the off days. This does not seem to detriment my runs except I will feel a bit more sore in the particular part of the body that I worked out which is typically the chest.

Sharing Salary

Here's an interesting post on sharing salaries within a company.


Monday, March 9, 2015

ASPNET Sessions and Response Redirect - Why logins do not always work after logging off

This is the first time that I got around to building a custom login user control. Typically, I build the login as part of the master page. Because of this change, there was a problem I ran into while testing the code. The issue was that I was unable to log into my application right after I log off. I can log in in the very first session or login again after it fails.

This issue is not a huge deal but can interfere with the user experience which makes it a big deal. But how often does a user log right in after logging off? This should not happen often and the user will likely naturally try again.

Any case, I found that I cannot Clear and Abandon a session in the same page transaction as I set a new session. Essentially, I found that this issue occurred only on the logoff page. I can log in twice because the page is redirected to the home page after the first attempt thus leaving the logoff page.


Not IsPostBack will prevent the issue that I ran into. Executing session's clear and abandon will trump any sessions set within the same page transaction, even if it is "executed" earlier in the code. By using Not IsPostBack will prevent the clear and abandon code to be executed when the Page_Load method is executed after clicking on the submit button.

Off-shoot issue

I had ran into a different problem earlier in my career (I think this may already have been fixed in the later .NET Framework versions), but in case the above does not help... here is an article that provides detail on using sessions and page redirects.


Friday, February 27, 2015

CSS - div #foo vs div#foo - How a space cost me an hour worth of frustration

I start "coding" again and quickly ran into the "pulling my hair out" moment on why I cannot troubleshoot the simplest of things. By "coding," I mean working on stylesheets. Yes, I have not even reached the real code stuff (yet I suppose I do have much fewer frustrations there because the syntax is more strict there).

So, I am working on a layout with a site div that contains many sub-divs which may also have additional sub-divs. I was able to get styles up quickly and easily, then I wanted to add a width to the highest parent of divs and for some reason it would not work. I tried all sorts of combinations of switching ids, spell checking, and checking other divs. It works for all the divs except the parent one.

Here is basically my layout:






And my style sheet:
div #foo { width: 800px; border: 1px solid black; }

No matter what I did, nothing happened, yet if I changed #foo to #top or any other id, I would have a banner. Then finally, I removed food and made it separate from the other divs completely. Suddenly, I had no borders at all except for left, content, and right.

This made me realize that having a space meant the sub-object of the previous object. In other words, CSS is looking for an object named foo inside of a div. Because foo is the parent div, there is no parent div thus CSS does not find a foo instead a div. This is why all the other divs changed accordingly because they were all within a div, foo (whether it was named or not).

So the proper way that I should have coded this was to remove the space between div and #foo, thus making it div#foo. All my problems went away! FINALLY! Nothing like this to remind how foolishly amateurish I can be.

Even #foo would work, but I thought I would be cool by being a little more specific. Even in hindsight, I should have known this because I have used similar practice with classes. Although, I admit that I actually didn't know this difference even though I have developed websites for several years. Usually, I have a placeholder div so I never ran into this problem but not realizing that was what kept all my designs working. Of course, I decided today to not do that because I just felt like making the design insignificantly more efficient.

As for searching on google, this was not easy to find because "css style not working" brings up a lot of results. And "css style working on all objects except parent" did not return what I was looking for. Defining this issue is still not simple even though I have figured out the problem. Perhaps, this problem is too easy to even be mentioned. Hopefully (or perhaps not), I am not the only person to run into this problem and this would help someone in the future........ perhaps my future self!

Wednesday, February 25, 2015

Buggish: Candy Crush 787 - Unable to click after candy combo with frog on conveyor

There seems to be a bug when you trigger a stripe and wrapper combination with a frog in the blast path while on the conveyor belt. At least, that is my best guess as I have used that combination while the frog was not on the conveyor without any problems. The bug is that I can no longer click on any candies. I can still click on the exit game.

This bug is kind of annoying because I was about to beat the level. This level is one of those that requires quite some luck to beat.

Saturday, February 21, 2015

Outlook 2013 vs Outlook 2010 (First Impression)

The biggest issue I have with 2013 is that it does not automatically pop-up the replies or forwards. I often have to copy information from one email to another, so not being able to quickly switch from one email to another is quite bothersome without changing the default settings. So, I do not like this new feature unless there was an easy way to tab back to my previously viewed emails.

There seems to be more bugs with 2013 than 2010. 2013 crashes more often, lags more often, and other odd behavior. This occurs even when there is no stress on the system. For example, I would just do a typical email check and Outlook could just crash completely or it hangs for several seconds.

For some reason when I am not on VPN, I cannot view my regular inbox. I have no looked into saving/caching emails onto my local system but why would this default change? I rarely have issues with disk space on the local system. Group mailbox seem slower to refresh when I switch between my mailbox with a group mailbox even if I was just in the other mailbox.

Still unable to assign the organizer to a meeting. This is quite annoying as I still cannot find a way to change this after opening a new meeting. I still have to go to the mailbox before creating a new meeting. Even if it is static or constant for a meeting, couldn't there be at least a query box to ask which mailbox I want to use? I would still like the ability to change the organizer to a meeting because some coworkers can never remember to use the group mailbox. 

2013 seem to be bulkier with no new advantages to my daily use so far. The ribbon style does not bother me as much as other people make it out to be. I actually find it easier to edit emails and files with the new ribbon. People's biggest complaint is that they cannot find the features. Yes, it was kind of annoying but it only takes an extra minute or two. They should learn to scan/read more accurately. But given some of the other work that I've seen them produce, I doubt they will ever really learn. 

Overall, Outlook 2013 is functional and usable. I prefer 2010 primarily because it seemed more stable. I only use the most basic of features like compose email, setup meetings, and group mailbox.

Friday, February 13, 2015

TED: A Kinder, Gentler Philosophy of (Career) Success

Why do we care so much about our career and about our material goods? Alain de Botton gives an amusing discussion on how we feel and the reality of why we feel that way. Even with current social advancements, new social problems arise. Where do we go from here?


Monday, February 9, 2015

I am not a fan of agile / scrum (Software Methodology)

I am not pro-agile, but also not anti-agile. I did just enjoy reading a post by Giles Bowkett on "Why Scrum Should Basically Just Die In A Fire." I think agile methods (including Scrum) can work, but time morphs any processes and agile is no different. Giles presents a lightly-humored touch on how Scrum can go wrong.

For me the biggest issue with agile (at least today) is its inability to weed out poor-performing members. Even weeding out bad-performing members is pretty difficult. The second biggest issue with agile is the ability to game the company system. Another big issue that most sites do not point out is that agile is not good for high risk solutions, especially solutions that may determine real life and death risks like medical solutions or an airplane.

There are other issues that agile also do not manage well is regression test. It requires that it to be automated which is fine, but how would it regression test features that take up real physical time like scheduled jobs that are triggered daily or even weekly. Agile also loses performance when dealing with multiple components or multiple environments, where the project essentially becomes traditional methods to coordinate all the different pieces.

Poor-Performing Teams

My biggest problem with poor-performing members is that we have the misconception that those members are dumb. In reality they are just not good at their role, but are smarter than people credit them to be. So this allows a lot of freedom for people to game the system or start politicking.

The easiest excuse is that agile is new, so they still need to work out the kinks. Blame the other group, blame the requirements, blame coding, blame testing. Everyone just points fingers at everyone else. Sadly, these poor-performing teams come out looking better because they are more prepared to blame others while the good teams were working how to fix the issues.

Even if you can isolate the team, identify the individual is even more difficult. There is less information as there is less focus on documentation (if there is an documentation at all). Is the problem with the scrum master not leading properly or the developer not coding properly or the tester not testing sufficiently? Or the scrum master does not have proper support or the requirements are consistently poor or test cases ill-defined? Finding the high-value and low-value members is like a game of mastermind.

High Risk Solutions

I find it odd that I have not come across any sites, posts, or forums (even anti-agile fanatics) mention that agile is not advisable for solutions that have high risks if something does fail. I surely do not want to be on an airplane that went through an agile process... unless maybe if it were on its one millionth iteration and the last 500,000 iterations had no deaths. Or use the laser eye surgery. With my luck, I will probably be that one test case that no one anticipated.

I am also sure that financial companies would not want to risk millions of dollars due to a flaw in the system. I doubt explaining that they didn't provide the proper requirements would make financial companies feel any better. Telling them that the next iteration would correct the problem would not be much consolation. 

Or an online bank losing your life-savings. An individual losing $100 of life-savings will likely be just as angry as another person with $1,000,000 of life-savings. Sure there is insurance for that too but who really wants to go through that experience.

Sure some solutions do not carry such risks like Candy Crush or Farmville (there have been extremes with some video gamers that could probably prove that wrong too). The problem is defining where that line is like a cloud solution that promises 99.99% uptime. Is the risk worth all the customers possibly switching to your competitor?


How many people do you know that the value to agile methods is "comprehensive" documentation in its core value: working software over comprehensive documentation? How many of those people even know what that mean? Most people hear "no documentation is needed" (at least the people I know). Not sure how many times I had to point out that we still need some documentation after hearing that they are not supposed to provide documentation anymore because they went agile.

There is definitely something wrong if that value even has to be stated. What company would not love to drop documentation as part of the process if the software just worked? Writing documentation takes up time, and to our corporate world, time is money. I mean they will drop testing if that would save them money too. Besides time and money, I think traditional methods can also drop comprehensive documentation so making it a value of agile is kind of redundant. 

Comprehensive documentation came out of technical writers wanting to keep their job and managers wanting to make people as replaceable as possible which means that the documentation also needs to be continuously updated (mostly the latter which coincidentally didn't get complaints from technical writers). If it is faster to read code to learn what it does than it is too read documentation, the documentation is too comprehensive. I have personally read some old corporate documentation that went into such details as even providing illustrations on single-clicking versus double-clicking or how to move the mouse or how to insert a disk (although the younger generation probably would need that step today).

But my main issue with agile is that people seem to take this to mean "no" documentation. Although it is not stated that way in the manifesto, many people perceive it that way. Developers don't want to document, managers don't want people to waste time documenting, so it appears like a win for everyone. 

That is until 6 months later and the whole development team has changed. New updates are needed on the old code which no one knows about. No documentation, so more time is spent figuring it out. Code is eventually updated and passes the end-user acceptance test. Deploy the change then realize an old process has changed which broke something else. Maybe the change was a comma instead of a semi-colon which passed regression test but fails for the client. The point is more time was spent than was necessary. Management is going to put this as a lesson learned or retrospective, then will require more documentation. 10 years later and we are all going to be back with the issue of comprehensive documentation for agile and traditional methods (or whatever new method name it will be in the future).

I haven't even touched on audit which is already a nightmare with traditional methods. Surprisingly I have not had to experience audit with agile project (yet), but I would guess that it would be just as difficult as traditional in its best case. More likely it would be more painful due to lack of documentation which is a majority of the problems I face in traditional methods. But I supposed it could be easier just to tell the auditor that it just does not exist than trying to hunt down the document, then let someone else worry about what process need to be put into place to "correct" the audit problem.

Solution Complexity

Assuming a great and awesome agile team, the agile method will slowly become similar to traditional methods as the solution grows in complexity and scale large enough to partner with other groups. Having to coordinate times, priorities, and many values to traditional methods, agile cannot avoid certain decision gates needed for multiple team coordination. Agile can work purely in the requirements through development phase, but once it reaches integration another branch of code is required. Then the company will also need another set of testers and developers to fix issues because the agile teams are to be working on the next iterations. If the same team is used, then most of the agile iterations are pretty moot.

Assuming another team is available to support code that is being prepared for production, processes need to be available to merge code to any code that is still open. Further regression test is required. And this is probably the easiest and most regular process.

How will the group manage if there is a production issue that needs to be corrected while in the middle of an iteration? What if it happens to be in the middle of an iteration and in the middle of integration? Is there a separate team? Does integration stop to work on production issue? Now there are at least 3 branches of code being developed. That is only if the code is for one group.

Working with multiple groups, departments, partners, etc., there is bound to scenario where there is not enough resources. In traditional world, all the requirements are coordinated. For agile, this may be more difficult because iterations now have dead-lines which is almost counter to its values. One of the groups may keep its agile schedule, but the others have to coordinate accordingly to their dependencies. Working with other partners may even mean coordinating different flavors of agile methods.

And this is becoming more and more commonplace, as companies have software solutions for billing, accounting, finances, manufacturing, sales, and other departments. Then you want to interact with other companies.


I think agile is basically the same as traditional but just from a different view angle. I think traditional has always been trying to go agile, and many companies probably have made it work. Most of those methods are probably more agile than traditional compared to the corporate world. I think some would argue that it was more or less lean processes like six sigma.

I spent most of my career with small to medium sized companies which basically are traditional methods in a very fast paced world which forced us to be very agile-like. So when I learned agile, most of it was already very familiar except without all the fancy terms and ceremonies. The learning curve was actually harder when I worked with a corporation sized company where the bureaucracy was so daunting.

So, I feel that agile is either the leanest process of traditional method or a traditional method that goes through many prototyping that just never gets refactored. In the smallest of worlds, developers at the very beginning is the truest form of agile where we our own client, product, end-user, developer, and tester. Came up with an idea, tried to program, test, check with initial idea, come up with new idea, develop, test, accept the result, repeat if not acceptable, then becomes final product when accepted.

Saturday, February 7, 2015

Life: Exercise 20150207

After a week, I have returned back to the same weight as last week. I gained quite a bit of weight eating all the food from Superbowl weekend... too much pizza, wings, chips, and so many other not so healthy foods. I gained about 4-5 pounds within 2-3 days. Took another 2-3 days to lose that.

I still exercised everyday except Sunday. This week was kind of sluggish. I did mostly walking on Monday and Thursday. It was harder to run long distance. I found doing amateur-level intervals (2 minute walking and 2 minute jog/run) helpful in getting me out of the sluggish feeling.

Weeks ago, I was only able to do 5mph jogs, now I am able to reach 7mph. Not only that, my heart rate does not reach as high as before. My ankle issue seems to have gone away but I have been avoiding extended jogs. I've tried a couple times and now it seems that my right calf gets tight or tired. Running does not seem to bother me at all even at longer distance and longer periods of time.

It has been about a month since I joined the gym. I have been going almost every day. I think I have missed a total of 5-6 days. I do mostly walk/jog for 1 hour. I do mix up my running exercises between extending my long distance running, just plain walking, and intervals (trying to increase my run pace). When the gym is quieter, I will do some weights after an hour on the treadmill. Overall, I've lost about 7 pounds.

Wednesday, January 28, 2015

Life: Exercise 20150128

My Ankle

My right ankle still bothers me when I jog even after taking the previous day off. I did some lower body workout the day before that with no ankle problems.

This time around I found something interesting though. The discomfort was not as bad as before so I actually tried a faster pace. I found it odd that it takes around the same amount of time no matter the speed I ran at. At 6 - 6.5 mph, I have more of a running form. At this pace, my ankle did not bother me at all. I can do this for 10 minutes with no discomfort whatsoever (except that I was very out of breadth). When I go back to jogging form (5-5.5 mph), the discomfort grows again. Walking and running seems to remove the discomfort.

Walking around 4 degrees seem to cause a little strain to the ankle. At 7 degrees and 3.8 mph, the discomfort becomes similar to jogging. I did not stress it too much this time around by quickly returning back to angles and speed that do not cause the discomfort.


Oddly, I seem to lose more weight the day after I take a day off. I no longer gain weight after working out and at times I do lose a little bit of weight. Now, I have basically returned back to the weight I was at when I started three weeks ago which is about 5-6 pounds. I do feel leaner in exchange though. So far this has been the basic pattern whenever I start working out, and the inverted pattern when I stop working out for long periods of time (unfortunately more not working than working out).

I also do keep track of my weight on a spreadsheet. I have almost three years of data with many large gaps of data. I have one sheet that aggregates my average weekly weights. I did this because the daily weights changed to much because I did not keep a consistent time of when I weight myself. Interestingly, I noticed there were patterns of me gaining weight over the years. I gained weight when I didn't record my weight for long stretches of time (many weeks).

Basically when I become too busy with other life events, I also stop watching my health. So it seems that trying to keep a regular practice of storing my weight also keeps me more focused on healthier alternatives... or at least reminds me to be.


I plan to run in a 5k race in April, and I am hoping to be under 36 minutes as my safe goal. My primary goal is to be under 30 minutes by end of the year. At my current rate (assuming on a treadmill), I think I should be able to get pretty close to 30 minutes.

I can occasionally do 10 minutes at 6 mph. I can pretty easily do 5.5 for 20 . My limitations currently is my ankle then my breathing. 

Thursday, January 22, 2015

Ted Blog on International Idioms

The ted blog on idioms was very fascinating.


Buggish: BMC Remedy Error - User Preference Server must be the same as Server 'xxx' for IGWL

User Preference Server " must be the same as AR Server 'xxxxxx' for IGWL
IGWL Has Failed to Load Properly. Please Exist Remedy and Try Again.

If you have already changed your Log File,  make sure to include the preference server and TCP/RCP port in the login window. You may have to click on the "Options >>" button to see the options.

Wednesday, January 21, 2015

Life: Exercising 20150121

It has been two weeks since the last exercise update. I have been having ankle issues when running on the treadmill so yesterday I took the day off. It was kind of sad to not meet my calorie goal after completing 15 days in a row with the Wii U.

Fortunately, today was the first day where I made some headway into losing weight. I also went back to the gym after a day rest. I did not want to stress my ankle too much so I started with 5mph after my warmup. I didn't not feel the usual strain that I felt last week. After 5-6 minutes, I started to feel some pressure in my ankle (right). I kept running through it then took a break after another 5 minutes (totally 10 minute jog). The pressure did not get worse. As usual, it goes away after walking for a bit.

After a small walking break, I started another 10 minute jog and this time the pressure did not return. Actually, it felt pretty good. I didn't want to push my luck so I went back to walking speed for 5 minutes.

On my third attempt, I felt a little more pressure than the first time after 7-8 minutes. The fourth time, the pressure didn't return but I did get pretty exhausted. Ended with 4.4 miles in an hour. I took a short break then did a slow pace on an elliptical.

Overall, I think this is a good sign for my ankle. I think I need to replace my shoes.

Friday, January 16, 2015

Who are These Electric Suppliers?

Once again, a relative thought I could assist in this just because I studied electrical engineering. A relative received a call from an energy supplier and was not sure if that was her electric company (ie energy provider). She thought she heard a different name at the start of the call but then they kept saying her provider's name. She was confused on what the difference was between a supplier and a provider.

I was confused too as the terms does sound very similar so google I went (I never understand why people just don't do this before calling). So I find that the suppliers are basically resellers of energy. All the infrastructure and maintenance is still done by the provider. The provider being the typical company that provides your energy.

The savings that was given was about 20%, but the supplier's telemarketer was very pushy about getting voice authorization... because it is so obvious that people should just sign up. No information on contract or fees or anything. They also called me at a bad time (my relative forwarded the call... sadly my private number now on another calling list that will probably never be removed), so I was trying to get off for a meeting. They kept pushing that it will only take 2 minutes to authorize while I am trying to say that I need to do more research before doing so and this lasted another 15 minutes!!! I felt too invested to hang up at this point but I should have.

After finally hanging up, I did more research and I suppose it was a good deal but her electric bill was already pretty low so the savings did not seem worth the hassle of switching to a company that would use such unscrupulous tactics to get someone to sign up. There are many things the supplier claimed that basically everything will be the same but I could not find any reviews online so I didn't think it was worth the risk.

They may be a legit company. They are on the list of licensed supplier in the state. Even then, there are so many terrible practices that can used to just annoy you to no end with just billing alone much less if there are other problems. I cannot say if suppliers do these things but could easily be done as you do read about them in other industries. I also had one where the vendor never stopped billing/charging my credit card even after I called and even went onsite a couple times. Eventually, I just called the credit card company and blacklisted them, and fortunately my money back. But usually utility companies require direct payment from bank or debit cards where you won't have that extra level of protection. Even then, it is such a hassle to manage.

So for a company to have to call and pressure the person to switch (especially not willing to provide written form of the agreeement/contract), this deal is just not worth it to save a couple dollars.


Thursday, January 15, 2015

A Simple Life Reminder to Appreciate Your Parents

A talk from Marc Mero about appreciating your parents. Although it was in front of kids, the message can be applied to anyone in any stage of their lives. A nice message for the young, a kind reminder for the experienced.

The real sad part is in the comments where responses to seemingly innocently posts that some people judge as ignorance are completely opposite to the video's message thus their own message. Some responses are legit to counter-argue but then they throw in name calling or other derogatory comments that just does not belong with their response. I know this is just part of today's internet life, but I still hope.


Tuesday, January 13, 2015

Center div with table content and fit to content

style="border: 1px solid black; display: table; padding: 0px 25px 25px 25px; margin-left: auto; margin-right: auto;"

The trick for me is the "display: table" portion which seems new to me but did exactly what I wanted it to do. I wanted a div containing a table to be centered into the middle of the page.

Without the display parameter, the div defaults to the full width of its parent container which then obviously would not have margins to auto-fill. Floating the div would only keep it to the left (obviously but still had to try). The stackoverflow articles also contained some other alternatives but this one seemed cleanest for what I needed.


Monday, January 12, 2015

New Employee Promoted Over Seniority

I just read an article about whether it was fair or legal for a company to promote a new employee over longer term employees. The article does a good job of explaining how to overcome this and does overlap with my ideology (albeit admittedly also not perfect) on how to manage my own life. I will be discussing more on the side of knowledge-skilled labor. Some could probably apply to other skilled labor or unskilled labor, but I am sure the dynamics would be slightly different.

In my experience and highly in my opinion, I find that companies typically promote an unqualified manager whether you choose to review their credentials or experience. This is the most demoralized feeling for the group.

I definitely know my share of people who have been in the role for a while who seek management promotions. Like the article states, there are some that just would not make good managers in general and others that would not be good for that company's culture.

I think the most common mistake is that company's tend to look at either the management skills or their technical skills. Here I use "technical" meaning specialized knowledge of the field (ie engineering, secretarial, waste management, accounting, etc.). Rarely, do they seek for both. Even rarer do they even bother reviewing their own employees of different talents that typically are not needed in the technical field.

I keep a reserve of people in my mind that would make great managers. I do this in hopes that one day I will have the opportunity to provide a recommendation. Maybe because I am very science/logic oriented profession, our roles typically do not require us to display managerial skills. As you work with people, you do see some soft skills that I think are signs of better managers.

Unfortunately, most of my world does not really work that way. And bottom line, the managers do not make or break the company. Plenty of companies have been able to get by with below-par managers. I've seen managers gone weeks at a time. I have met acquaintances who are managers who proudly state that they do not do anything most of the time (which is also pretty obvious by the amount of non-work related things they do like posts, on-line shopping, even watching videos/movies during work hours).

For example, I once worked for a company where I've been for about a year and a half. Seniority-wise, I was the youngest in the group. I also had a different skill set than most of my team so I was pretty confident I would never be promoted in that group. Within a few weeks from when I started, the company had promoted a person from another group as a manager within our group. She has been with the company only for a couple months. We had worked with her and respected that change since she had good managerial skills. A group of about 10 people who are at least at par with their roles. Some of them have good traits.

To keep up with company growth, our group hired a few new undergraduates. After four months, one of the new hires was promoted to supervisor role. This had a major shift within the group. To most of the group, she appeared to be the least experienced and least likely to manage. 5 of the original 10 people either quit or transferred within a month or two. I left after my first ever negative review. My review was that I was unable to anticipate all the changes she was unable to decide on. Probably also for the first time in my life did I actually stood up for myself on the quality of my work by stating how it was logically possible to build software if she could not make up her mind and very wishy-washy about what she wanted. I could not get the favor our original manager who became director, the manager of my current supervisor. The director didn't even counter argue and just remained quiet. On top of that, my applications were mostly build on my ideas while most of her ideas did not pan out. At the end of the day, I continued to provide good quality of work with more emphasis with some of her suggestions which was just to focus on her requirements which I kept and stored.

I eventually left for better opportunity not long after my review. I heard within a couple weeks, most of the remaining people had also left the group. The supervisor eventually "quit." The role was not filled. One of the remaining people tried to apply for the role but was told they were not going to make the same mistake again.

I would like to say that this was a win for fairness, but this really had no impact on the company. Business went on. The director is doing well. The manager is also still doing well. I have nothing against them (I consider the poor review as a minor incident... whatever). And the company as a whole is still growing and doing well.

As for the quality of work, they tried to get me to work on some of my other ideas. They even tried to get me to work on it without pay... can you even believe that! They may have paid for the work but I just did not care to return so quoted 2-3 times the going contracting rate. I may have done it for regular rate if they considered apologizing (but then how can they apologize if they don't even know they did wrong in the first place?). On second thought, I do not think I want to work with those kind of people anyways.

So, what is the lesson here? If you want to become a supervisor or manager, there are at least two paths to take. First is the one suggested by the article to learn relevant skill-sets and working with your manager on how to move up. Second is to play the system because the impact of a manager has very little impact (just see how frequently they change coaches and CEOs who you would imagine is the biggest cogs in the wheel).

If you think that you are a big part of the company too, think again. I had worked for a different company where the sales team sold a solution that we didn't have (not a surprise). They had quoted 80 hours, but the amount of requirements was clearly more than that. I was only given two weeks to finish and I spent 80 hours both weeks to finish that project. No post-integration problems or issues. Who won? The client because they were not charged the 80 hours (weak sales team who I even told them before I left that the project would take longer). My employer because he sold a solution and since I was an employee no over-time pay. The sales team because they get commission. I lost 80 hours of my time over two weeks which does not even include the travel time, lack of sleep, and my personal health (which is only realized later in life). You think an employee like that would be pretty invaluable to the company.

Nope! They just hired three people to do my work. Even then lower quality, then hired a couple more to support the lower quality. My coworkers also benefited because they got raises because now the company couldn't afford to lose them. And the company is still doing well and succeeding. When I was there we managed the work with 5-6 engineers for 4 years, now they have almost 15 within 2 years leaving. A company I recently left, they had replaced myself and coworker who left within the same period of time with 6 others.

Sooo...... sadly, you are replaceable. Your replacement may not be better or even make the company more money than you. The company may even regret losing you, but it will only be a small stumble. I hope this will inspire you to see the world differently and eventually change the world for the better... hopefully taking the high road.


Sunday, January 11, 2015

C# Session.Abandon() Event Process Not So Intuitive

Unless you understand how all the events are triggered within the webserver, a casual programmer may not necessarily understand the first time they use this method/function.

I was programming the login and logoff process. I use Session.Abandon() to clear the sessions. On the master page, I have the typical welcome user and log off hyperlink which should be cleared when accessing the logoff page. But it does not and remains on the corner of the page. After stepping through the debugger, the session still exists.

This is because the session is not cleared until all transactions have been completed. This is confirmed both on the Microsoft site and Stackoverflow site. I'm sure there is a reason for this.

Abandon vs Clear

The two links do a pretty good job of explaining the differences but it was not completely clear what impact this had on coding. One interesting comment was that they used Clear and Abandon. The counter-comment was that this was redundant.

I found that this is not redundant as the third comment has pointed out. The reason actually is the way I should have executed my logoff process because Clear() will "nullify" all the session values, then Abandon will clear out the session (supposedly the session id) as I would like a different session id if a different user is on.

My Programming Experience

Although I have been programming for several years in the past, I have fallen so far behind on a lot of new practices. I have enough knowledge to probably transition between one programming language to another, but not enough to program without a reference book or revisiting a lot of less-used functionality or program once functionality (ie login and logoff). I probably just used a flag in my past career life.

I had to look up the C# page even orders. I recall this was one of my interview questions. There is a bunch of events, but I typically only had to worry about init and load so I probably just answered that question poorly (mediocre at best... I knew a couple others but not the specific names).


Improving Charisma (link)

Interesting article... most of us known the list but does not hurt to be reminded on where we can improve on. For me #2 is the most difficult as it is difficult not to filter with all the information that could be presented. My limitation on the amount of information that I need to retain so I unconsciously "not listen" to someone, although I sometimes recall them talking about it before (who knows how much I actually forgot completely).

I think most people have a hard time with #10 because we are oftentimes told to be perfect (well, at least the people around me). In trying to be perfect, they try to hide their imperfections. In trying to hide their imperfections, they start lying to themselves then the other items start to fall short of their potential too.

I find the list to be a good list to follow to make a successful life. It may help with a successful career but there are many other factors, but then a successful career also may not mean a successful life.


Thursday, January 8, 2015

Life: Exercising 20150108

Well, I guess I have survived the holiday meals. Lost some wait since October but gained a little back near the end of December.

I have been focusing more on running recently. Last night, I really pushed myself to complete 5 miles in an hour. I ran most of it around 5.2 mph with a couple minutes here and there to slow down which also meant that I had to speed up to 5.5-6.0 mph to catch up. So it feels good that I finally have a casual jog where I can catch my breath without going into a walking pace.

Tonight, I felt rather sluggish on the treadmill so I spent some time on a stationary bike. After 30 minutes, I did some leg workouts then back to the treadmill. Still sluggish, I planned to walk for about 30 minutes. After 10 minutes, I started feeling a bit more energetic and started to do some speed walking (4-4.5 mph)... almost completed 2 miles.

Per the Wii, I gained 6.5 pounds since last night. This is probably due to the sweats that I was wearing (too lazy to take them off and also pretty cold). I thought it would only be an extra pound. I guess I'll see if this goes back tomorrow.

Wednesday, January 7, 2015

First Year Home Owner - Home Maintenance (1)

I am still not completely sold on the home owner status versus remaining as a renter. Truthfully, I do not know where people even learn this stuff before. Perhaps the general American upbringing teaches these to the next generation, but I am pretty sure my parents did not do most of these things.

I just learned a new list of things that I have to do:
  • Sealing grout in bathrooms
  • Sealing granite countertops
  • Sealing grout in tiled rooms
  • Sealing wood floors
  • Caulking showers
  • Caulking counters
  • Changing air filter (this one I knew)
  • Clearing water tank
  • Closing external water lines (winter)
  • Cleaning out lint box behind dryer

Of course, I did not think to check all this beforehand so I also had to learn how to clean a bunch of things before all that. For example, sealing helps prevent staining. Well, some grout has also already stained so I had to learn how to clean that.

While cleaning, there is even more things to learn like acetone, caulking, and a bunch of other tools. Life as a renter was definitely much simpler. And this is only the tip of the iceberg because these are just known maintenance work. At some point, there are going to be major repairs because I am sure I am going to miss something, somewhere.

When do I get to realize the financial advantage of being an owner? sigh...


Saturday, January 3, 2015

Life: Blogger Dec 2014 Stats

Google Analytics

Sessions = 2280
Users = 2089
Pageviews = 4818

Google Webmasters

Total Queries = 362
Impressions = 10,161
Clicks = 1621

Google AdSense

Page Views = 588
Clicks = 2


Pageviews Last Month = 3254
All Time Posts = 327
All Time History Visits = 34069

Friday, January 2, 2015

2015 Resolution

"My goal for 2015 is to accomplish the goals of 2014 which I should have done in 2013 because I made a promise in 2012 and planned in 2011."

Quite an inspiring quote (with a touch of sadness) for me this year.

The Bad

  • gained 5 pounds since last year
  • still not good at multi-tasking (particularly exercising while focusing on other things)
  • stopped tracking metrics for my car (too hard to track when people borrow my car and I forget to track those numbers)

The Good

  • I was actually up 10 pounds around June, so lost 5 of those pounds since then
  • First TV, Wii U, Wii U Fit
  • Lots of new board games
  • Blogging still going on
  • More new friends

The Future

  • Plan to run in more 5k races
  • Prepare to complete a 10k race next year or by end of year