Friday, December 09, 2016

Conducting User Interviews - Resources

https://community.uservoice.com/blog/customer-interview-questions/

http://labs.openviewpartners.com/conducting-customer-interviews/?mc_cid=f43bec58c9&mc_eid=6ce1eb31c3#.WEsEa3eZM0o

https://www.youtube.com/watch?v=etSL8hvgU5A&mc_cid=f43bec58c9&mc_eid=6ce1eb31c3




Thursday, November 17, 2016

Apple Airport Extreme + Comcast (XFinity) Setup

After struggling a bit, this is now setup correctly.  Advanced Comcast support helped with fine tuning the setup. However, I spent a lot of fruitless hours with two first line Comcast support personnel who were following some scripts and did not have a full understanding. The third one I spoke to was smart enough to transfer me over to the advanced support. The advanced support person (Ameira) was very knowledgeable and provided excellent help.

I have  
1. Apple Airport Extreme (flat round rectangle shape - don't know which gen).

2. Xfinity Modem with WiFi - vertical one.

3. Vonage modem for landline

4. Network printer

Xfinity Modem Setup
1. Set Xfinity Model in Bridge Mode (not DHCP). This also disables its WiFi thus avoiding a duplicate WiFi network in case you don't want to use the WiFi network that comes with Xfinity modem.

You can either have the Comcast rep turn on Bridge mode remotely or connect locally to the router on the address 10.0.0.1 (default username / password is admin / password)

2. Connect Apple Extreme using Ethernet cable to the Xfinity modem in network jack #1. Not sure if #1 is critical but thats what Comcast support recommended.

Now, VERY IMPORTANT, don't use any of the other network ports on the Xfinity modem. Remember, its in Bridge mode and its not acting as a router anymore.

I had to figure this out myself because I had connected my Macbook using a wire directly to the modem to get access to the internet for troubleshooting not realizing that this was causing the Airport Extreme to not establish an Internet connection using the Bridged modem.

Airport Extreme Setup
1. Using Airport Utility on your Mac, connect to the Airport Extreme.

2. On the 'Internet' tab, set to DHCP. No need to fill in any of the other fields.

3. IMPORTANT -> On the 'Network' tab set to "DHCP and NAT". I had to change the NAT address range to use the 192.168. prefix instead of 10.0. Not sure of the reason for this.

4. Create your WiFi network.

After enabling both 2.4 and 5 GHZ and measuring download speeds, I found that when both are enabled 5 GHZ works faster. However, 2.4 GHZ only (i.e. disable 5 GHZ) works fastest - faster than 5 GHZ. So my setup is 2.4 GHZ enabled, 5 GHZ disabled.

5. Connect Vonage, Printer by ethernet cables to Airport Extreme.

Finally
Power cycle the Xfinity Modem, then power cycle the Airport Extreme.

Sunday, September 18, 2016

Eclipse Neon (4.6) - RCP Launch Error

Creating even a vanilla RCP using out of the box templates, results in the error

Missing Constraint: Require-Capability: osgi.extender; filter="(&(osgi.extender=osgi.component)(version>=1.2)(!(version>=2.0)))"

This can be fixed by the Comment 14 (Dirk Fauth) in this bug -
https://bugs.eclipse.org/bugs/show_bug.cgi?id=481449

 In the Runtime Configuration, required plugins, I had to manually add the plugin to resolve the error -

org.eclipse.equinox.ds_1.4xyzzzz





Tuesday, May 12, 2015

Google API Client Library with OAuth for Java

Google Java APIs download - https://developers.google.com/api-client-library/java/google-api-java-client/download

Get this instead of just OAuth libraries. API Client library includes OAuth libraries.


Thursday, February 19, 2015

"selector not recognized" - Including Static Libraries

If your Xcode project includes static libraries which further access category methods, you could run into the issue of "selector not recognized" for a custom category method.

The key is to add the -ObjC flag to "Other Linker Flags".

For more details, Apple has a nice Technical Note on this -

https://developer.apple.com/library/mac/qa/qa1490/_index.html

Sunday, October 19, 2014

Email Clustering in EĎ€velope

I’ve created an app that uses clustering techniques to group emails. This is not broad groupings like Social, Updates,… that Gmail does but at a more granular level (basically message threading).

Instead of just threading emails by a Conversation or by an exact Subject match that most emails clients (incl Gmail) do, the app looks for ‘similar’ / ‘related’ emails and groups (threads) them together. 

It uses various attributes on emails such as keywords, sender, time,… and finds clusters. A message may be part of two different clusters or could change cluster membership depending on a better match found. 

This has the effect of compacting the Inbox for viewing. Also, clusters can be acted upon as a single entity letting you move, delete, archive entire clusters. 

All of this clustering logic happens on the device, there is no server component. 

Clustering pagebit.ly/envelope-clustering

Friday, September 13, 2013

Updating iDevice from a downloaded build

To pick a downloaded build and update the iDevice instead of restoring it, click on "Update" in iTunes  with "Alt /Option" pressed. This will pop up a file selection dialog that lets you pick the build.


Monday, January 21, 2013

NSMetadataQuery, NSSortDescriptor & iCloud

It looks like one cannot use NSSortDescriptor on NSMetadataQuery when querying for files from iCloud on iOS. Wanted to sort on the modified date and tried using the sort descriptor but the descriptor does not seem to affect the results. Cannot find any documentation on whether it is supposed to work or not. Finally, I had to manually sort the resultant array using [NSArray sortXyz..], which works fine.


Sunday, December 30, 2012

Measure Wi-Fi Strength from OS X

To get raw Wi-Fi strength numbers including noise measurements, OS X provides an in built tool with Lion.

1. Go To - /System/Library/CoreServices/ [From Finder Go->Go To Folder-]
2. Run Wi-Fi diagnostics

If you have a laptop, walk around the house and see the values change or move the router (adjust its location) for optimum strength in your frequently used locations.


Monday, December 17, 2012

Hard Resetting Samsung Galaxy Player

If you have forgotten your passcode lock and want to simply reset the device here are instructions

1. Power Down the device
2. Hold Power and Volume UP buttons at the same time
3. Once you see the Samsung logo, let go of the Power button but continue holding the Volume UP button
4. Soon device goes into a screen that gives you the option to restore factory settings
5. On the factory reset screen, I had to select the reset option twice because the first time around it asked for my password, which ofcourse was wrong. Selecting Reset again wiped the device.
6. Reboot device after wipe is complete

Android version was Gingerbread


Wednesday, June 20, 2012

XCode and Folder Resources

The latest version of Xcode 4.3 has a serious bug that frustrated me quite a bit recently. If your project has Folder resources in it and these have sub folders with same names in the folder hierarchy, app compiles / builds fine but fails to submit with a completely unrelated error.

Finally had to download an old version 4.2, compile and submit using that. 

Monday, March 12, 2012

REST Client for Firefox

Found this recently and think this is a great plugin to test web services before writing code. Quite flexible with letting you create requests and I've used it against different services already.

https://addons.mozilla.org/en-US/firefox/addon/restclient/

Typepad Recent Blogs API

Simple non-authenticated call to get Recent blog posts as JSON -

http://api.typepad.com/blogs/{BLOG_ID}/post-assets/@published/@recent.json?max-results={N}

{BLOG_ID} - The unique identifier for the blog. You can get this by loading the blog in the web browser and looking at the source code. The id is part of the RSS HTML element.

{N} - Number of results to return

@recent.json can be changed to @recent.js to get the JSON data wrapped in a Javascript callback(...) function

For more details on their API - http://www.typepad.com/services/apidocs

Sunday, March 27, 2011

XCode Certificate and Provisioning Error

Note to self and anyone else that runs into this -

Today XCode 4 refused to build a project that used to build just fine till the last time I had opened it. A cryptic "Cannot find [pretty long string] profile".

After a bit of investigation, it turned out that my Developer certificate from Apple Developer Program had expired. Renewing and downloading the new certificate still did not solve the problem.

Keychain still had my old expired certificates in addition to the new ones. I was assuming that the new ones would start getting used but the existence of the old ones was causing XCode to still use them.

Finally, deleting all the expired certificates solved the issue.

Wednesday, February 23, 2011

WiFi Files


THIS PAGE HAS MOVED TO Files n Folders


The content below is maintained for legacy purposes only. 





WiFi Files is a utility app that lets you transfer files, images, videos from your personal computer to and from your mobile device over WiFi.


The app runs on iPhone, iPod Touch and iPad.

Features
DOWNLOAD & UPLOAD
* Browse folders and download files from both Mac and Windows machines to your device
* Upload files, photos & videos from your iDevice to your Mac or Windows machine

ZIP FILES
* Unzip saved compressed files on your device
* Create zip files from folders on your device

DO MORE WITH SAVED FILES
* Save files from other apps. Example, you can save attachments from Mail in the app for later access, save zip files from attachments and then unzip them.
* Organize saved files into folders via drag n drop
* Email saved files as attachments
* Sort file lists alphabetically and by modification date
* Add downloaded images and videos to the Photos app on your device
* Video AirPlay support

* Allows opening of different file types in other apps that support the file format


INTERNET FILES
* Browse the internet and save files from the web
* Save webpages as HTML or as PDF
* Capture and save web screenshots


Troubleshooting
  • Username/Password issues: The username is case-sensitive and cannot contain a space. The newer version (April 2, 2012) desktop app checks for this issue but older versions and the iOS app does not validate this. Will be fixed in a future release of the iOS app.
  • Ensure that the HTTP Service on the desktop app shows the status of "Started". If not, the iOS app cannot connect. 
  • The desktop app requires the port 48080 to be available to start the HTTP service. 
  • Try "Restarting Services". Sometimes if the desktop app is running for a long time, the IP address expires and must be renewed. The newer version of the desktop app (April 2, 2012) solves this issue. 
  • Check that you have entered the IP address correctly on iOS devices.

Saturday, January 08, 2011

UnixCrypt produces same values for different passwords

This is interesting. Learnt something new today.

I've been using the UnixCrypt class from Jetty and if the first eight characters of the password to be encrypted are the same for two passwords, the resulting encrypted (hashed) value is the same.

I was trying to reproduce an error message in my program by providing the wrong password and creating the wrong password by simply modifying the last character of the password. However, inspite of supplying the wrong password, the system was successfully authenticating.

The problem was that two different passwords like John1234$ and John1234b#, were producing the same value from UnixCrypt which was leading the system to think that it was the correct password. BTW, notice that one could potentially call these passwords quite strong given they have an Uppercase, lowercase, numbers, a special character and are greater than 8 characters.

The only way to get different values is to use completely different salts. But even there is a catch. Salts like '12abc$1' and '12gfd#2345' though completely different, produce the same value.

I've been using the class as part of a program that saves passwords and was using a salt of format - "constant + random". This was resulting in same value even though the salt was technically different. Here is a test program and the resulting output - (some boilerplate code omitted for brevity)

Code

String password = "John1234$";

String salt = "12abc$1";

String val = UnixCrypt.crypt(password,salt);

System.out.println("(" + password + "," + salt + ")" + " = " + val);

password = "John1234b#";

salt = "12gfd#2345";

val = UnixCrypt.crypt(password, salt);

System.out.println("(" + password + "," + salt + ")" + " = " + val);


Output

(John1234$,12abc$1) = 12FH7.yEd/XWI

(John1234b#,12gfd#2345) = 12FH7.yEd/XWI


Why is this happening even when the salts are completely different? The problem is again the prefix. Looks like if the first two characters of the salt are same, the same value is produced. Simply altering the second character of the salts, '12abc$1' and '13gfd#2345' , results in different values.

New Output with second character of the salt changed -

(John1234$,12abc$1) = 12FH7.yEd/XWI

(John1234b#,13gfd#2345) = 13uN.eBnCs5io



Ideally, the salts should be dynamically generated. However, even if that is done, likelihood of a collision is quite high due to the small size of the salt prefix.

At this point the only certain way around that I can think of is to ensure that two passwords don't have the same first 8 characters.

When I get time it will be good to look into why this is happening. A little bit of browsing around the web told me that this might have something to do with the MD5 hashing algo but that is an exploration for another day.

Thursday, January 06, 2011

How about a Java app store?

Thought Process


The Apple Mac store is a very interesting development. Apple is trying to bring the iPhone like experience to the Mac - the traditional "desktop".


One of my iOS apps has a desktop component and it got me thinking that if I had to make the desktop component available in the Mac App store it would need to be re-coded in Objective C and Cocoa and then again in .NET for Windows. Based on the downloads, my audience for the desktop app is about evenly split between the two platforms - OSX and Windows. That makes it impossible for me to ignore either of the platforms.


Right now the app is an Eclipse-based RCP app, which solves my issue of coding for multiple platforms - OSX and Windows. I write the code once and just create two native builds. Being a stripped down RCP app with minimal plugins and inspite of being a Java app, I think it performs quite well on the desktop.


My next thought was that it would have been great if there was an consumer focussed "App-store" for Java apps that brought the same experience the iOS devices bring to mobile. Java does take the pain out of coding the app logic twice. While there are some compatibility issues, it cannot be as bad as writing code twice and trying to ensure coherency in the logic between two lines of code.


What is required?


A thin operating layer on the desktop that simply provided access to the lower filesystem, provided a security sandbox and allowed for extensions.


Here are some of the characteristics that I can think of -

  • An "App Store" app to find apps natively from within the desktop and do a one-click install.
  • Standard features in App Stores - ability to rate and review, feature, popular, ….
  • Ability to view all running apps, switch between them, kill them, …
  • Support for different kinds of apps types - widgets, full-blown apps, …
  • Preferably a unified app store instead of the user having to search multiple sources (i.e. preferably the iPhone experience vs Android experience)
  • Integrated eCommerce to sell apps and their features - An idea would be to integrate the plugin store with providers like PayPal, who have already solved this issue. Making a user go to multiple sites to make payments would not be a good experience. This is something Apple does well with iTunes - they make it easy to buy and install something immediately. Amazon does this well for various sellers on the web.
  • Other good features would be - in-App purchasing APIs, recurring payments, app sandboxing.
  • Developer guidelines with a focus on user experience and good looking apps.


How to set this up?


Make it Eclipse-based or Eclipse-like or OSGI-based

Eclipse already has a few good things going for it

- A solid plugin model. Plugins would be similar to Apps

- A fairly decent update mechanism

- There is already an Eclipse Marketplace. However, it is too IDE and developer focussed (it prompts to login with my "Bugzilla" ID :))


However, other than the IDE, Eclipse does not have a killer app that users will want to download and install on their desktops. The IDE is certainly not a killer app for consumers. Thus, Eclipse will need a killer app that will put the App control layer and marketplace apps on a users desktop.


Use JRE to distribute this Eclipse-based control layer and marketplace app

Integrate this operating app and the marketplace store app inside the JRE itself. With every download of JRE, users also get the ability to extend their JRE experience with plugins. However, the UI component will need to be SWT-based and not Swing based. Eclipse, in my opinion owes a lot of its success to SWT and JFace. There were free IDEs before Eclipse but reason I (and probably a lot of people) switched to it was due to its native look n feel and performance.


Who could make this happen?

Probably Oracle in cooperation with other Java supporters such as IBM, Google, Eclipse ...


In Summary


- Great to have a Java-based consumer focussed app store platform

- Borrow features from mobile devices such as sandboxing, integrated eCommerce.

- Eclipse-like plugin model except absolutely no IDE components

- Integrated with the JRE download


iPhone not connecting to macOS from Xcode

 After trying everything standard (re-pair, restart, reconnects), it turned out that VPN was enabled on my Mac.  Turn Off VPN to let Xcode f...