Monday, July 9, 2018

Google Maps Platform No Longer Free

Very soon, your Google Maps may result in degraded experience if you don't act now.  Google Maps Platform arrives with pay-as-you-go billing.  To ensure your map in high resolution or no interruption, you must pay unless your usages are at Google "free tier" (monthly US$200 free credit).

Starting on July 16, 2018, to access Google Map APIs, you need a Google Cloud Platform billing account, besides a valid API key,  This change was originally set to Jun 11.  To provide more lead time, the effective date now is on July 16, 2018, next Monday!

To learn about the pricing, see https://cloud.google.com/maps-platform/pricing/

If you are new, go https://cloud.google.com/maps-platform/#get-started to get key and.set up a billing account.

If you have already had a key, see Google Guide for Existing Users.


Saturday, July 7, 2018

How to change default currency in PayPal

Log in onto your PayPal account.  At the top, select Wallet.
Then select Details and then wait 1 or 2 seconds for next popup to manage your preferred currencies.


At the popup page, select Manage currencies.


By default, there is a least one currency,  You can add more currencies as wish.
Click the checkbox to select your primary currency and then Make Primary to set default if there are more than one currency to manage.




Sunday, May 31, 2015

WeChat Team Official Account is the Official Spam Account

WeChat Official Account 
Screen Name: WeChat Team
WeChat ID: WeChat

I've recently installed WeChat to my phone and been spammed by WeChat official account (WeChat Team) since then.  WeChat Team will periodically spam you with all the unwanted advertisements and promotions (e.g., concerts, restaurants, celebration parties, coupons and etc.).  It is quite annoying.  The worst is that there is no way for you to get rid of it or remove it from your WeChat contact (perhaps uninstalling WeChat app may do the trick).  "WeChat Team" is the default subscription channel when you first installed it.  In order to install WeChat, your cellphone is required, not the email address.  It is different from the past that I heard.

Personally I would like to remove WeChat from my phone.  To keep in touch with people who live in China, WeChat seem to be a good tool except for those spams by the official "WeChat Team".

As per Contact Us at the WeChat official site, the "WeChat Team" account is used for feedback and suggestions.  Sadly, it is actually an official spam account used by WeChat Official.  I have never got a response from them either.  Sending emails via their support email address is also in vain.

Dealing with spams sent by WeChat Official is even more difficult than emails.  Frustrated!


Sunday, October 20, 2013

Missing Orders - Order Confirmation (FlexPLM)

FlexPLM: v9.1

My previous post mentioned a serious design flaw in OC which causes confusion on cost sheet identification. There is another issue as bad as this design flaw. Missing colorways happens almost every day. All orders are subject to the colorways being placed in the product plan. Thus, missing colorways in OC means missing orders.

For each valid OC, there must be a [product] plan which consists of quantities (Target Volumes), delivery date (NDC), colorways and etc. Each order is organized per row by colorway (see Sample of Plan). Some colorway rows or the whole plan data could be lost without user knowledge.

At first, we thought that it was a human issue due to colorway/size category deletion for the fact that this customized version of FlexPLM doesn't perform any detection including colorway/size category that may be in use. Missing orders haunts the company since moving onto FlexPLM. Similar to the design flaw issue, it requires daily dedication to keep track of OC plans. Recently we've found that one of causes is leaving page including the browser Back and Forward buttons. If the user navigates to some other pages before the plan is saved and exited, and then returns to plan for editing, the issue of losing plan data will occur. By the time comes, the PO specialist tries to issue and approve the PO but finds missing or no orders.

This missing order issue could happen anytime during OC editing or after completion. Today you find the plan look perfectly in the OC but it may vanish in a few hours, next day or even any time in the future. There is no guarantee that the entire plan data exists until PO creation. We still don't know why the plan data will be gone when no one touches it.

Lesson Learned

Be sure your system could handle the situation of users leaving pages without saving data. Your UAT must include this to ensure data integrity. This problem reminds me of my time working for a marketing research company where the applications always allow people leaving pages and then quickly returning to answer the rest of questionnaires.

 
Sample of Plan - This plan is modified for display only; simply expand it to view the plan.
When the plan data is lost, each order (i.e., the colorway row) consists of yellow exclamation mark or the entire plan is even missing or empty. The following plan won't be seen when the problem occurs.

Wednesday, October 16, 2013

A Serious Flaw in Order Confirmation (FlexPLM)

FlexPLM: v9.1

From the sourcing or merchandising perspectives, PO is their ultimate goal to finalize the deal. Although all data are captured by the system (FlexPLM), FlexPLM is unable to issue PO nor to generate packing list and labels. A custom interface was developed to transmit data from FlexPLM to the PO system. Order Confirmation (OC) is responsible to capture the ordered data for PO processing. In other words, OC is a stepping stone from FlexPLM to PO. This OC module is customized for PO needs but there is a design flaw along with other long-standing bugs.

Two major components must be referenced by an OC upon completion:

  • Cost sheet(s) and
  • Product Plan (to specify colorway(s), NDCs, shipping terms, order types, order quantities and etc.) for ordering

A Design Fault Issue

A valid OC must contain at least one or more cost sheets. Each cost sheet is in turn referenced by a cost sheet number. While everyone assumes that the wanted cost sheets are set to the OC, instead the OC only remembers which unwanted cost sheets the user specifies. This design is similar to an email system. The system only remembers what you don't want, instead of what you want. It is not practical and it is a complete fault when this is put in place of ordering.

Let's consider the following situation.

At day one, there are 3 confirmed cost sheets. The user only wants CostSheet2 (CS-123452) to be referenced by the OC. Everything looks perfect in the system.
( Day 1 )
Existing and confirmed
cost sheet
User
Wants
OC
Remembers
System
Displays
NameNumber
CostSheet1CS-123451
CostSheet2CS-123452
CostSheet3CS-123453

On the second day, there are 3 more confirmed cost sheets finalized for the product. Because the system only remembers what users don't want. These 3 newly confirmed cost sheets are uninvited and added into the OC. The OC in turns results in error.
( Day 2 )
Existing and confirmed
cost sheet
User
Wants
OC
Remembers
System
Displays
NameNumber
CostSheet1CS-123451
CostSheet2CS-123452
CostSheet3CS-123453
CostSheet4CS-123454
CostSheet5CS-123455
CostSheet6CS-123456

[Added & edited on October 20, 2013] Why is the OC in Day 2 in error? The error is not from FlexPLM but the interface which picks up the data from FlexPLM to the PO system. The costs specified in the cost sheet could be appliedy to all or certain colorways of the product. If two cost sheets referenced by an OC contain the same colors, the interface will be confused which cost sheet to use. Let's say cost sheet A defined that color black costs $5.5 totally while cost sheet B said that color black is only $4.4.

To fix this, the merchant has to go into the OC and explicitly tells the system to cross out the other 3 cost sheets. Each sourcing office could create and complete 100 to 200+ OCs per day. Initially all OCs were handled by the merchants themselves. Because of unfriendly GUI and learning curve, the company would like their merchants focusing on the business instead of system operations. Two more headcount or positions are introduced in the office to handle OCs only.

As a matter of fact, the GUI itself refreshes this design problem by asking the user which cost sheets they don't need. The operation is similar to an email system where you delete the unwanted emails. The system will assume that the leftover are the emails you want to keep.

Lesson Learned

I personally wouldn't accept this implementation and won't expect to educate users to work around it either. This situation for sure won't be occurred when all cost sheets are defined and completed ahead of time. In reality, the users unlikely complete all cost sheets before ordering. They usually place orders while they are still working on other pending cost sheets. In this situation, it is no way to prevent the above issue from happening with the current system design. This issue greatly disappoints users and introduces more work. It is also too late for the company to realize this problem. The expense of modification is on the company. Thus be sure the behavior of the system matching the real operations. Don't expect to educate users how to work around the issue when the reality disagrees or/and the system is unable to provide the guidance.

Tuesday, August 27, 2013

Reasons Why Users Don't Like FlexPLM

This post is to follow up the discussion in my previous post.

     
  1. FlexPLM is NOT user friendly.

    Steep Learning curve is required on using FlexPLM. Words or phrases on the screen are not self-descriptive. It is not easy to navigate within FlexPLM to locate data. The wizard or the icons are also hard to find on the page. Data presentation of FlexPLM is not organized logically from user perspectives. The Interface is poorly designed.

  2.  
  3. FlexPLM doesn't promote collaboration but frustration.

    Workflow is available on FlexPLM but it is not tied to the actual process flow within the system. Instead, it acts like a complete separate process that requires additional manual steps from users as if they were coming from a different system. Luckily, neglect of any workflow task won't prevent users from working on the products within the system. Unfortunately, it causes some degree of disagreement among departments of how tasks could be done.

  4.  
  5. FlexPLM can't streamline or help optimize the process but heavily increase (or triple) workload and rely on user "supervision."

    • Let's take a notification of mailing out development samples as an example for illustration.

      Without FlexPLM, users simply notify the buyers about airway bill info via a single email.

      With FlexPLM, users have to do the following:

      StepWhy is this step necessary?
      Send an email notification to the buyers via Outlook as usual FlexPLM lacks of notification capability.
      Input the airway bill info into the system via Line Sheet or the product page The business requires to capture this piece of info.
      Consistently search "My Work" to see if the expected workflow task is available for completion. Some workflow tasks prior to this have not been completed yet. Or the tasks cannot be displayed for users for unknown reasons or a bug.

      There are no distinguishment between new tasks and the existing. Finding new tasks among tons of existing outstanding items visually is not easy. Some users are even manually exported data into Excel and manage them daily.

      When the workflow task is finally shown up at "My Work", check the selection box and then click the submit button for completion. It is how the users tell the system of their task completion.
      Be sure to click the Refresh hyperlink at "My Work" again to ensure that the submitted task no longer exists in the outstanding task list.

      For unknown reasons, some workflow items require multiple submissions.

      Additional notes: PTC/ITC said that everything works as designed and it is user fault. As per them, multiple records of completion for the same task showing in the system doesn't confirm the issue. It may be an double-click issue by users.

      This is one of examples. There are plenty out there. All burdens are on end users.

    • Internal data corruption happens all the time. For unknown reason, a NULL value is periodically placed into the data field without user knowledge during "save" or "update", which causes severe data lose or missing orders.

    • In addition, data discrepancy may occur between the pages shown on the screen and the physical print copy from the generated PDF (TechPack). Users feel humiliated when their vendors inform them that they found a few issues from the given PDF. Measurement or grading sheets are usually the victims.

  6.  
  7. FlexPLM can't help reduce cost but increase labor cost to ensure everything won't fall apart.

    Users work very late (even till mid-night) after switching to FlexPLM. The company increases the workforce by hiring more data entry for help-out.

    Losing orders happens from time to time and it has been one of the major issues so far. Learning from a few painful experience of missing orders, most users will print and save a copy of their work for future reference and periodically check against the system till the POs are issued.

Experience with FlexPLM

If you're looking for PLM solution or FlexPLM is on your list for evaluation, my experience with FlexPLM may be your interest.

FlexPLM is developed by PTC headquartered in Massachusetts. There are various FlexPLM packages available for purchase, from fully customization to the simple configuration with a very minimum change. For the past 18 months, I have been dedicating my time to administer FlexPLM for a company which purchased the package with the least customization. Thus, most of features are out of the box (OOTB). The software itself is further customized and serviced by one of PTC's software partners, ITC InfoTech, which houses in India.

Up till now, the company has been using FlexPLM for 2.5+ years but the feedback is negative and no one likes it. The more users use it, the more complaints there will be. This company is in the garment industry. Its sourcing offices are all over the world while its retailer stores are exclusively in the states. They do everything themselves from design to product development including choosing fabric, color, lap dip, sample yardage, development sampling, costing, manufacturing and moving products from warehouse to the retail chains. In order to consolidate everything (except PO) in an one single system for all parties (fabric specialists, designers, technical designs, quality assurance, merchants in headquarters, merchants in sourcing offices, warehouse employees, staff in retail stores and even the management), FlexPLM was chosen to replace their existing legacy systems including their in-house developed merchandising software and the PDM.

PTC's sale speech sounds good but what FlexPLM delivers is another story. The management of the company originally focused on job done, As the increase of the anger from users, they realize the simplicity must be taken into the consideration while they want to remain the same process flow on FlexPLM. Overall, here are the voices from users:

Anger is everywhere in the workspace of every office. After 2.5+ years trying, the company finally gives up and decides not to continue with FlexPLM. The message of discontinuity is firm and even publicly announced to the entire company. They are making no more than 2-year transition plan to be out of FlexPLM. It is noticeably joyful from users' faces as soon as the announcement was made. As a matter of fact, they can't wait for that day to come. Obviously, they would prefer the instant demise of FlexPLM.

FlexPLM may be a perfect fit for most companies in most industries without customization but it certainly does not fully comply with the needs of the company, especially the need of the full life cycle operations from material to product, from product to manufacturing, from manufacturing to dispatching and finally down to the retail stores. The customization is supposed to bridge the gaps but it somehow fails.

We all know that bugs always exist software but FlexPLM is not tested well before production. I personally always wonder how the release could pass the testing if they have or perform proper test cases and suites. The same issues could be re-surfaced in any release. To some extent, the problems are even rooted from the design (I will address this more when I discuss order confirmation in my future post).

The project manager of the company should take some responsibilities. The actual operations executed by each department is somewhat different from the way the system presents. And some of end results also behave somewhat different. To fix all issues, the system keeps being bandaged without root cause analysis. To me, the fix will never be a fix if they keep shoveling the problems under the rug.

Another problem is that the project manager believes that human education can work around the issues instead of finding the fundamental culprits and tailoring the system to guide the end users or simplify the work process. To me, it won't stop the problems if they keep relying on training to teach users what they should or shouldn't do to work around the system issues. Sadly, I just don't see there is any business requirements analysis.

I am not here to judge. You should be the one to decide what to do. I will show you the fact from the system and the end user points of views, and what the company are facing so that you may add them into your substantial criteria for review, evaluation or even customization. I personally hope that they may be somehow useful or even help you make a sound decision.

Please stay tuned if you're interested.

Sunday, July 1, 2012

Why NONE opton is not available on my Apple ID account or iTunes Store

There are tons of posts talking about how to create an Apple ID without a credit card but none of suggestions that I tried work. Finally I gave up trial and error using my iPhone. I went back to my PC using iTune 10.x instead. Here are my findings.

My iTunes Version: iTunes 10.x

Regardless of how you register your account with apple for appleid, "NONE" payment option most likely won't be available if you don't sign up one with a Free App. I don't know why. It took me a few trials so as to figure out, which consumed me a few email addresses to confirm this.

Second, if you initially sign up one Apple ID without "NONE" payment option to begin with, there is no way for you to make "NONE" appear after your Apple ID has been created. Therefore, be sure, you sign up for a new Apple ID with a free app, such as Chrome or go to iTunes Store, click on Free on iTunes and then select one free app to continue. It is how I got my few Apple IDs with NONE payment option.

Quick Links on iTunes

Is this NONE option related to certain countries? I have no idea. I don't bother to find out either. If you don't see the NONE option, "cancel" it and then start over: scroll down your iTunes Store window all the way to the bottom and then click "Change Country" to proceed. For sure, the United States works! From the Google search, besides the US, United Kindom, Hong Kong, Japan, and India also are claimed to have "NONE" option available.

Change Country on itunes

I don't understand why Apple doesn't fix it or it may intent to make it difficult.

Sunday, November 27, 2011

Fail to Login Gmail via Email Client

If you suddenly is unable to log in onto your Gmail account, or your email client keeps prompting you for username and password due to invalid credential or Web Login Required, most likely your account is locked. In most cases, you are still able to log in directly with Gmail Web Login.

In order to unlock your account, use Google accounts' UnlockCaptcha. Everything should be reset in a second.

Reference:

Trouble Login onto Gmail: https://mail.google.com/support/bin/answer.py?answer=78754

Tuesday, August 9, 2011

Stay away from imageshack.us

How many do you use imageshack.us for image storage and sharing? I'd started using it lately and thought it was a good one. It turns out that it is disappointing. It forces unregistered viewers to register with them before they can view the images.

For unknown reason, I have no problem to view the page in the US and I am not required to log in before I view the images either. For some people, especially the ones who are living out of the states, most likely what they see in the page is a frozen frog saying Domain Unregistered. To view, register at bit.ly/imageshack-domain. It looks to me that imageshack.us forces unregistered users to register with them before they display the images.

I don't see the frog so I won't know if my friends didn't tell me. From their PDF files, every image in my page becomes a frozen frog! Therefore, I have to upload the same set of images to photobucket.com and then updated all image links on the pages. It took me a few hours to fix this problem.

If you are using imageshack.us for image storage and sharing, you would better move your photos to some place else unless you can ensure all your audiences can see your pictures. Otherwise, all your images may become frozen frogs that confuses your users.

Updated on Aug 23, 2011
I am currently travelling in Hong Kong. The above finding is 100% confirmed. All pictures stored in imageshack.us will turn to be frogs when the page is accessed outside the USA. All images are viewable only when the viewer has an account with imageshack and the viewer must log onto the account.

Saturday, August 6, 2011

How to Disable Dell Mouse Stick Pointer on Windows 7

I personally find this Dell mouse stick pointer very annoying. It always messes up my typing. Thus I always had it disabled. All of a sudden, today it is enabled. It turns out that Dell Touchpad application no longer exists in my laptop. I don't understand how and why this could happen. It could be related to Windows update. In order to disable it, I have to re-install Dell Touchpad application. After the reboot, Dell Touchpad will show up in Mouse Properties so that I can configure it. The following is the procedure of how to disable this mouse stick pointer.
  • If you don't have Dell Touchpad application installed, go Dell Support site to download and install it. Most of time, a reboot is required after installation.
  • Go Control Panel.
  • Select All Control Panel Items.

    All Control Panel Items

    Or type mouse at the search box and then select Change mouse settings.

    Change mouse settings

  • If you have Dell Touchpad application installed, Dell Touchpad tab will show up. Click on the image inside the Dell Touchpad tab content.

    Dell Touchpad

  • Select Button Settings from Dell Touchpad window.

    Button Settings

  • Select Device Select tab and click Disable radio button of Pointing Stick and then click Apply.

    disable pointing stick
  • The mouse stick pointer will be disabled instantly. Click OK and then exit the Dell Touchpad application.

Note that the above procedure/pictures are captured from my Latitude E6510.

Friday, July 29, 2011

CarMax, 512SellCar.com, copart.com and IQ Auto Buyers Review

CarMax

No emails or phone calls are involved in the selling process. Car owners must visit the office in person for physical inspection and a firm appraisal with an offer will be issued and printed after the inspection. The offer only lasts for 7 days. An extension for a few days is possible but re-visiting the office to obtain a new document is required. The inspection is about 30-40 minutes while extension could be around 15 minutes. If the offer is accepted, CarMax will issue a bank draft that guarantees the fund is ready for collection. The bank draft definitely provides peace of minds to people who leave the states or return to their countries. They can ensure that the money is available and waiting for them to collect when they are out of the states. After the selling process, you have to arrange your own transportation home.

IQ Auto Buyers

IQ Auto Buyers purchase cars nationwide and offers field inspection. But recently they have their policies changed without notifying their customers. They don't offer free inspection in the field until you are willing to drop off your vehicle to their local office. For the details, see this post. Thus, what the process advertised in their site is slightly different from what they promise. They will issue a company check to you if you accept their offer.

copart.com

copart.com originally bought salvaged/totaled vehicles that were still running and then sold parts to car dealers. And now they become a well known online auto auction site. They are also a publicly traded company, NASDAQ:CPRT. They do buy cars directly from owners. Their processing service is very simply and their response is very fast. There is no physical or visual inspection. Everything is based on your description of your car conditions. They take your words for it. Because of this, their offer is ridiculously low. It looks like you are selling them a salvaged car. Towing fee is not included. It means if you accept their offer, you have to pay the fee and they will arrange the service for you to tow your car to their office.

512SellCar.com

It is a brand new online office of Continental Automotive Group (CAG) which manages all online nationwide transactions. 512SellCar.com is less than 6 months old in the market. Every auto dealership belonging to CAG is currently based in Austin, Texas. As soon as you submit a request via their site or talk to them over the phone, they will send you an email to confirm your request accepted along with the sale agent information. The email will also go with the local dealership logo instead of 512SellCar.com. The domain name used in the email address is from some place else (currently motosnap.com). It looks like a spam mail! Then two subsequent follow-up emails will be sent within the next 4 days. The sale agent will contact you in a day or two. A verbal quote is usually given over the phone based on your description and the basic information collected from your VIN number so that you have a rough idea how much your vehicle is worth. If you persuade further, a visual inspection is required. You either visit their local dealership office or meet the sale agent somewhere for appraisal. Unlike CarMax, no written appraisal document is issued unless you ask for. Their offer currently is valid for 2 weeks. If you decide to sell your car to them, the local dealership will write you a company check right away. Unlike CarMax, no sale document is issued in print saying that your car is sold to them. The only proof document is your receipt of the check; it has a brief description of the purchase by them. The sale agent will then give you a ride home if needed. Currently the service provided by 512SellCar.com is as good as CarMax. The process is a lot simpler. The price may beat CarMax

Personal Experience

In some cities or states, certain types/models of vehicles are overstocked or cannot be sold. Thus, if you walk in a local small dealership and they tell you that they have # of vehicles like yours, they are not interested in having your car. They just put their words in a polite way and hint you out. The price for cash or trade-in offered by them is definitely unreasonable and low. You should walk away. I am unfortunate living in those cities or states. I tried to lower my price, nothing helped. AutoTrader.com isn't helpful either. Indeed, it is wasting subscription fee. I conclude that the problem is not the price but if there is someone who is interested in your car. In my case, I put a trade-in price offered by a well-reputable dealership for more than a month in my ads. I didn't receive a single query. Then I changed my price to what I cashed out from a dealership. The same situation remains unchanged. Therefore, if you can't hear any response from your ad for some time, you have to do some research and reach out some other options.

Summary

There is no doubt that it will be awesome if you can cash your car from a private party. But in some occasions, it may be impossible, especially for people who would like to get rid of their vehicle in certain time frame. To them, selling a car to a private party may not be a good option. In addition, nowadays it is very difficult to sell a car unless you own a decent Japanese car that everyone wants.

Depending on where you live, if CarMax is located in your city, it will be your last resort. For sure, they are happy to take your car regardless of its condition. Indeed, they issue a bank draft instead of a company check, which really gives everyone peace of mind. Before doing so, you should try other options first.

512SellCar.com is new. They are as good as CarMax but they may not have their local dealership or office to where you live. Since they just start the Internet service and still provide field inspection, you may consider giving them a call for details.

You may want to talk to IQ Auto Buyers if they have an office in your location. Otherwise, you can simply forget about it because they no longer provide inspection in the field unless you don't mind driving hundreds miles away to their office.

You should forget about selling your car to copart direct if you have a decent car because their price doesn't make any sense.

Good luck to everyone who is trying to sell his car.

Tuesday, July 26, 2011

I really wish there was a good alternative to Craigslist

If there is something better than Craigslist, I would rather not go Craigslist.

In the past, I liked Craigslist but not any more, least to say many spams. Fortunately, I am not an active seller or buyer. I only used it lately. For the past 4 years, I didn't go Craigslist at all. As soon as I used it, I found quite a few of problems with Craigslist and have begun to understand why a lot of people are getting frustrated. I would not recommend Craigslist to everyone if he or she could find a better alternative. If your neighborhood has a community Website, you all should promote your community site and try to use it first to eliminate frauds, especially frustration from Craigslist.

Recently I've tried to post something to Craigslist, their phone verification drove me nuts. Their application is not reliable. And Craigslist support is very poor. Most likely you won't get a solid answer or help from them. The verification may work for some people but some may never get through without a reason. It doesn't support VoIP, which kicks out a lot of honest and legitimate users. With the phone verification, Craigslist may eliminate some spammers from the seller-side but there are plenty from the buyers. All sellers are in great risk while the buyers are somehow protected. I also had to use Google Voice phone number for ad instead of email. Otherwise, my email account would be full of Craigslist spams.

Using Craigslist could make you more frustrated than ever. If you hang around their help-desk discussion forums, you would find that there are a lot of people posting the same issues over and over again such as phone verification, ads not shown, trouble with re-posting and something similar. Those questions could be easily resolved if Craigslist app could have alerted and explained why their posts fail when the users place their ads. Currently, Craigslist does nothing; instead, it lies and tells the users that their posts are successful and asks them to wait for a few minutes for update. Unfortunately, those posts are automatically ghosted or flagged as soon as the ads are posted; thus their ads would never be shown or displayed in the search due to prohibited content, violation, unsupported hidden characters or other issues. According to their forums, it is one of their ways how to eliminate spams. To me, it is wasting time and $$. Those supports are answering the same questions daily again and again. Why do I hire people answering the same questions over and over again while there is a better way to handle the issues? I could be wrong about it and don't see the whole picture. In addition, the languages used by those supports sometimes are very rude and offensive [see one of the thread discussions below]. The worst is that Craigslist forums don't welcome user discussions and discourage users to discuss any Craigslist issues while there are a lot of unresolved issues. If you do any discussion in their forums, you may be flagged with thread hijacking without a valid reason and then possibly reported to the staff. I wonder if the users would care about this when they get frustrated. Why not let them to vent the angers? Indeed I don't understand why user discussions becomes an issue to Craigslist. Or is it just a makeup rule by those supports who are running the show?

Luckily I don't have to deal with those issues but I feel the pain for the people who are still bothered by those issues, plus fraudulent activities are still active on Craigslist. Nowadays there are more and more negative comments on Craigslist than positives. I hope that there will be soon a better site than Craigslist or Craigslist begins to listen to their users.


Here is one of the examples extracted from Craigslist forums. Those guys with channel names <FeatureNotABug_>, <__:)__> and < - > are the supports. The thread was posted and started by a user called < jo27 >

[ Full discussion on Craigslist forum ]

 Post Active not showing in Search < jo27 > 07/26/11 16:12  
      : . . your ad < - > 07/26/11 16:13  
      : . . : . . anybody else not as mean want to assist? < jo27 > 07/26/11 16:15  
      : . . : . . : . . your ad < - > 07/26/11 16:17  
      : . . : . . : . . : . . since this man is disrespectful, anyone else? < jo27 > 07/26/11 16:18  
      : . . : . . : . . : . . : . . so sorry for the troll, we < FeatureNotABug_ > 07/26/11 16:20  
      : . . : . . : . . : . . : . . : . . anyone for real on here besides these 2 clowns? < jo27 > 07/26/11 16:22  
      : . . : . . : . . : . . : . . : . . : . . Ignore, Flag and ignore § < getaliferudeass_ > 07/26/11 16:24  
      : . . : . . : . . : . . : . . : . . : . . : . . So can anyone help me with my post? < jo27 > 07/26/11 16:26  
      : . . : . . : . . : . . : . . : . . : . . : . . : . . Event services is for those < __:)__ > 07/26/11 16:30  

There are plenty of this example found in Craigslist forums. When I read it, I just cannot believe my eyes.

Thursday, June 30, 2011

How to change the Gateway Metric on Windows 7

If there are multiple physical adapters present in the network, Windows 7 will always look at and compare the indices of gateway metric among the physical adapters and then pick the one with the lowest index to use. In order to override the default settings, you need to adjust the index of gateway metric for each physical adapter. The adapter assigned with the lowest index will always take precedence and used by Windows 7 automatically. For instance, if you want to use the wired connection when both wired and wireless are available in your network. You need to assign the lower gateway metric index to your LAN card so that you can ensure that your favorite adapter will be used by Windows 7 whenever it is available. In my previous post, I mentioned how to use route change command to adjust gateway metric index. In this post, I will present you an easy way to do it without going to the command prompt.

  • Open Network Connection from Network and Sharing Center. Or type ncpa.cpl in the search box at your Windows Explorer or Start menu.
  • Select your favorite connection, e.g., Local Area Connection and then right click to select Properties.
  • In the Networking tab, select the Internet protocol version, e.g., Internet Protocol Version 4 (TCP/IPv4).
  • And then click Properties button.
  • In protocol Properties dialog box, click Advanced....
  • Inside the Advanced TCP/IP Settings, at the IP Settings tab, click Add... of the Default gateways.
  • Uncheck the Automatic metic checkbox, and then enter your router IP (e.g. 192.168.1.1) and assign your metric index. Click Add to insert the entry.

    Default Gateway Settings
  • Click all OK's to exit.

The changes will immediately take effect. If you check your route table after changes (using route print command), you'll find a new entry in the Persistent Routes.

===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0      192.168.1.1      20
===========================================================================

Regardless of the IP address obtained automatically or statically, changing gateway metric can be done via either route change command or network connection GUI (ncpa.cpl).

When you use route print to verify your settings, the metric indices usually will double the number you enter.

Use netsh int ip show config will show the exact settings you will find in the network connection properties.

I hope you'll find this information useful to you.

Wednesday, June 29, 2011

Forcing Windows 7 to use wired when available

For unknown reason, Windows 7 prefers using wireless connection over wired. In order to force Windows 7 to use the wired connection when available, you need to adjust the setting of gateway metric among network adapters. A lot of posts found online recommended to do it via via Network Connection (ncpa.cpl) by unchecking Automatic metric checkbox and manually setting Interface metric on each network adapter. Unfortunately, this only updates interface metric, not gateway metric. Thus, it won't have any effect on Windows 7 and the problem persists.

You can type the following command at the command prompt for the detail of your network adapter settings [see example]:

netsh int ip show config

Or type the following for the settings of the route table. In this command, the metric column is only for gateway metric. [see example]

route print

To change gateway metric, there are two options. First is to use route change command at the command prompt. For example,

route change 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 20 if 13

where

  • 0.0.0.0 is the target network destination (IP address) found in route table.

  • mask 0.0.0.0 is the subnet mask associated with the target network destination.

  • 192.168.1.1 is the IP address of the gateway, my router.

  • metric 20 is setting gateway metric to 20. The network interface with a lower metric takes precedence. In this example, I am assigning 20 to my wired network card, which receives the lowest gateway metric. It enforces Windows 7 to use the wired whenever it is available. Also see KB299540.

  • if 13 means to apply the changes only to the network interface index equivalent to 13. In this example, 13 is my Intel(R) 82577LM Gigabit Network Connection that can be found in the Interface List section of route print.

There is no need to log out or reboot. The changes should take effect immediately.

The second option presented in my next post may be the preferable way, especially if you don't want to execute any command. Go and see my next how-to.

References:
The meaning of metric numbers, see KB299540.
How to use Route Command.

Example of netsh int ip show config

Configuration for interface "Wireless Network Connection"
    DHCP enabled:                         Yes
    IP Address:                           192.168.1.2
    Subnet Prefix:                        192.168.1.0/24 (mask 255.255.255.0)
    Default Gateway:                      192.168.1.1
Gateway Metric: 25 InterfaceMetric: 50
DNS servers configured through DHCP: 192.168.1.1 192.168.1.1 ... ... Register with which suffix: Primary only WINS servers configured through DHCP: None Configuration for interface "Local Area Connection" DHCP enabled: No IP Address: 192.168.1.200 Subnet Prefix: 192.168.1.0/24 (mask 255.255.255.0) Default Gateway: 192.168.1.1
Gateway Metric: 256 InterfaceMetric: 20
Statically Configured DNS Servers: 192.168.1.1 ... Register with which suffix: Primary only Statically Configured WINS Servers: None ...

Example of route print

The column of Metric in the section of IPv4 Route Table is gateway metric.

===========================================================================
Interface List
 13...5c 26 0a 23 40 d5 ......Intel(R) 82577LM Gigabit Network Connection
 14...00 24 d7 6c a6 fc ......Intel(R) Centrino(R) Ultimate-N 6300 AGN
 15...00 24 d7 6c a6 fd ......Microsoft Virtual WiFi Miniport Adapter
 10...5c ac 4c fd 7b 5e ......Bluetooth Device (Personal Area Network)
 16...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
 17...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.200 266 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.2 50
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306 127.0.0.1 255.255.255.255 On-link 127.0.0.1 306 127.255.255.255 255.255.255.255 On-link 127.0.0.1 306 192.168.1.0 255.255.255.0 On-link 192.168.1.200 266 192.168.1.0 255.255.255.0 On-link 192.168.1.2 281 192.168.1.2 255.255.255.255 On-link 192.168.1.2 281 ... ... ... ... ...

Monday, June 20, 2011

How to attach CKEditor keyup event

My current version: CKEditor 3.6

  editor.document.on('keyup', function(evt){...});

I am trying to attach a keyup event to CKEditor. Unfortunately, it doesn't fire as soon as the setData() is being called.

It turns out that the editor.document is recreated every time setData() is called and thus all the events attached to the editor.document will be gone forever. Re-attaching the event to the editor.document is necessary. Luckily, setData() supports callback.

  editor.setData('set some data', function(evt) {
    editor.document.on('keyup', myKeyupEvent);
  });

I don't understand why CKEditor won't support keyup event in editor.on. You can't do this:

err editor.on('keyup', function(evt){...});

But for keypress or keydown event, you can do this:

  editor.on('key', function(evt){...});

There isn't much details about the CKEditor event. Their API isn't helpful either. Reading through the event API, I still have no idea when I should be able to use editor.on to attach events and when I should use editor.document.on.

What I understand is that editor.on is good for custom events. You write your own event, hook it up and then fire it up yourself as needed. The events registered by editor.on will not be removed after setData() has been called. It means that there is no need to re-attach the event even though the editor.document is re-created.

For events registered by editor.document.on, they support all existing defined events as long as you provide a event handler for them. The drawback is that the event handler requires registration again after editor.document has been recreated.

Currently, I have no custom events to be defined; thus, I found editor.document.on more useful than editor.on. I can hook as many events I want without restrictions.

Wednesday, June 8, 2011

Posting an Ad to Craigslist now becomes more difficult or frustrated

I haven't posted and purchased anything from or to Craigslist for a very long time. On my mind, Craigslist was a great service for local people to get good deals. Unfortunately, a lot of innocent people got spammed; sadly stories happened one after another. A few years ago Craigslist started implementing posting verification by forcing people who post classified ads to the USA or Canada for phone verification. And each successful verified phone number is good for 90 days. To consumers, it is a good thing; it certainly eliminates a lot of spammers, especially the ones from oversea. However, this control along with others makes a lot legitimate posters (like marketers) extremely inconvenience. A lot of them look for and turn to other alternatives such as backpage.com, ebayclassifieds.com, and etc. Sadly the alternatives traffic is still not as much as Craigslist.

I am not a marketer but sometimes I may have things for sale or giving away, like everyone else. The first service pops to my mind is Craigslist. I was trying to post an ad since yesterday morning without success. None of my phones could be verified.

First, I was trying to use magic jack phone number for verification. It turns out that Craigslist won't accept any VoIP phone. It means I cannot use Magic Jack for verification. Then I entered my cell phone number. Unfortunately, the page kept sayingYou are submitting telephone verification requests too rapidly. To prevent abuse, we require users to wait 5 minutes between requests, use no more than 3 telephone numbers in a 12 hour period, and not use any single phone number more than 3 times in a 12 hour period. Please wait and try again later.” At first, I believed in the error message. But after having waited for a few hours and then tried again, I concluded that something must have gone wrong. Reporting an error to Craigslist is no use. I received the same explanation that I could find in their phone authentication help page. What could I do? So I put this aside for the day and tried again in this morning. The same error message re-appeared. It was more than 12 hours waiting period. I cannot believe that I still received the same error. It implies that their phone verification service is not reliable. It could be why it frustrates a lot of marketers, besides other issues.

Craigslist phone verification process is even more difficult to follow than using a ATM card at an ATM machine when you're trying to remember your passcord. For ATM, at least I could try 3 times physically. For Craigslist phone verification service, the 3 times attempts are very easily to exceed without your knowledge.

You cannot refresh the page or use the same URL to another browser window/tab. If you do, it will count once because the page itself will remember your previous phone number. I am not talking about the browser cache. It is nothing related to it. Your URL is tied to your email address. When you enter a phone number, it will automatically tie it to that phone number as well. It is done in the craigslist backend server, not from the browser. Thus, if you have an issue on this, don't refresh, or cut-and-paste the URL to another browser to try again. You will quickly lose your two counts. Unfortunately, my issue is not related to this.

In order to resolve this issue, I decide to sign up an account with Craigslist. From there, it automatically detected a problem saying “There is already an account associated with this email address.” and offered me a chance to reset my password. I have never signed up an account with Craigslist, so I guess it could be a temporary account for non-registered user when I tried to post an ad. Obviously such a temporary account is required for their phone verification service. I followed the link to request password reset. Then I received an instant email for password reset. I finally have my password reset and registered an account with Craigslist.

Having an account with Craigslist doesn't mean I exempt for phone verification when I post an classified ad. To me, this password reset or the registration process cleared all errors including every single field of my phone number stored in their back-end server. From that onward, I could re-enter my cell phone number for verification to the page. Unfortunately, my request was expecting a text message / SMS from Craigslist but somehow Craigslist failed to deliver. When I went to check the sending code status, it indicated that “the call has been placed.” Call? I was requesting a text message, not a call! So I waited for another 5 or more minutes and then placed a request for a voice message instead of text. My cell phone rang as soon as I hit the "send the code!" button. My ad was finally posted.

This whole verification process with Craigslist negates my impression with them. I hope that Craigslist will improve this process. When the alternatives begin improving their traffic, people may leave Craigslist if this verification process is still a headache. Right now, Craigslist still holds a solid position in the market place.

Monday, June 6, 2011

Passed 70-515

As of today, I am certified for ASP.NET 4.0.

Learning from my previous experience, yesterday I drove to the test center and checked it out first. I don't understand why the same test center keeps moving from place to place! Every time I take an exam with them, they move. This time I ensure I know how to get there so everything was smooth. As usual, I was there an hour ahead and waiting outside for the time came.

There are 51 questions in total for 2.5 hours. I finished them about 1.75 hours. I am happy with my score. I could miss 1 or 2 questions. That's. My score is 970 out of 1000. The passing mark for this test is still at 700.

For some reason, I feel 4.0 is a lot easier than 3.5. But I am surprised to be tested by some jQuery questions. There were at least 4 questions in my test. Frankly, I don't find them related to ASP.NET. To me, it doesn't make any sense to have them in the test. jQuery is not mentioned in MS testing objective. Why am I being tested with jQuery syntax? Luckily I use jQuery and am able to answer them. Otherwise, it could be doomed. Besides MVC 2 and dynamic data stuff, I don't see any new stuff in the test. If you know 3.5 (including SP1) well and put some effort to learn more about MVC 2 and dynamic data, for sure you will be ready for the test.

Good luck to everyone who is preparing or going to take this test!

Thursday, May 19, 2011

WCF and Interface

Sometime ago, I had a few WCF services without using interface. As time goes by, some functionality need to expand. To avoid exposing all the service functionality to a single endpoint, implementing multiple interfaces is necessary so that multiple endpoints can be configured based on interface. Unfortunately, with this change, it broke every client call (JavaScript) in the old code.

In the code, the JavaScript function calls were all used and based on the library stub automatically generated by ASP.NET where the page uses ScriptManager to manage MS AJAX library. Thus the change at the contract name specified in the Web.config will automatically refresh the changes into the library.

Previously, there was no interface involved. The contract attribute of the endpoint defined in Web.config is directly pointing to the name of service itself. For example,

 <system.serviceModel> 
  
  <behaviors>
    <endpointBehaviors>
      <behavior name="Shipment.Order.WebAspNetAjaxBehavior">
      <enableWebScript />
  </behavior>
    ....
  <service name="Shipment.Order">  
     <endpoint address="" 
           behaviorConfiguration="Shipment.Order.WebAspNetAjaxBehavior"
           binding="webHttpBinding" 
           contract="Shipment.Order" />
  </service>  
  ...  
</system.serviceModel>  

Now, with the interface; the declaration of the endpoint contract is the interface instead of the service itself.

  <service name="Shipment.Order">  
     <endpoint address="" 
           behaviorConfiguration="Shipment.Order.WebAspNetAjaxBehavior"
           binding="webHttpBinding" 
           contract="Shipment.IOrder" />
  </service>  

In the page, the original JavaScript would call the service operation like this:

    Shipment.Order.Confirm(myId);

In order to work with the interface approach, the JavaScript has to use the interface to make a call:

    Shipment.IOrder.Confirm(myId);

Since the service has been placed into service sometime ago, the change to use interface is not a good idea. It affects a lot of pages that use this service. Instead of making the existing service to implement an interface, I derived a subclass from it so that the subclass inherits whatever its parent has. Then I simply configure an endpoint for this subclass instead of configuring multiple endpoints for the existing service. As a result, it works like a charm!

If you are having a problem with the interface or keep getting JavaScript error such as “xxx is NULL or not an Object” or “Cannot call method 'xxx' of undefined”. You would better look at the method you use in the JavaScript. It must be changed to use the interface because the JavaScript stub generated by ASP.NET is based on the contract defined in the Web.config. You could change the namespace by declaring [ServiceContract(Namespace = "xxx")] at your interface/class but your contract name won't be changed. You can examine the JavaScript stub by appending "/js" to the end of the service URL to compare the differences.

Wednesday, May 11, 2011

Alias created by cliconfg.exe (32-bit / 64-bit) don't work on 64-bit Windows 7

cliconfg.exe can be found in two locations at a 64-bit system when sql client tools are installed:
- [32-bit] C:\Windows\System32\cliconfg.exe
- [64-bit] C:\Windows\SysWOW64\cliconfg.exe

I wonder if anyone experience this.

Recently, I have moved my development machine to 64-bit windows 7 but I still have one project database running on 32-bit XP; the DB server is SQL 2005.

At my development box, I have SQL 2008 installed. I tried to use both 32-bit and 64-bit cliconfg.exe to create an alias but I cannot connect to that DB server on XP. In the SQL Server Configuration Manager, the alias created by both 32-bit and 64-bit cliconfig.exe are only shown up at "SQL Native Client 10.0 Configuration (32bit)" category.

[Updated on May 15, 2011] As a matter of fact, the entry is correct because the SQL2005 is running on 32-bit XP. Thus, the entry only shows up at 32-bit category. Indeed, this entry can only be used in .NET connection string for connection. Unfortunately, it cannot be used by SQLCMD (by default found at "C:\Program Files\Microsoft SQL Server\100\Tools\Binn") for remote connection. It was what I did last time. It failed.

If I use the non-32-bit client configuration in SQL Server Configuration Manager to create an alias, then the remote connection immediately works.

[Updated on May 15, 2011] Last time, I didn't check with .NET application. I only used SQLCMD -S <alias> for connection. Indeed, this entry only works for SQLCMD but fails for .NET remote connection.

In the registry, the one created by both cliconfg.exe will have an entry at

   HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\ConnectTo

The one created by non-32-bit client configuration in SQL Server Configuration Manager will instead have an entry at the following registry:

   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo

Currently I don't have time to investigate it. But I just wonder why the alias created by either 32-bit or 64-bit cliconfg.exe utility won't work. I thought each version of cliconfg.exe maintains a separate list of alias in the registry. Why are both currently pointing to the same registry?

[Updated: May 15, 2011] The best reason to explain why both two 32-bit and 64-bit cliconfg.exe utilities create the same alias & registry entries is because the SQL server running on XP is 32-bit. The alias created by the non-32-bit client configuration in SQL Server Configuration Manager won't work for .NET but SQLCMD. Only the entry shown up at "SQL Native Client 10.0 Configuration (32bit)" category works well in .NET ConnectionString. Again, the main reason of my case is that the SQL server is running on 32-bit.