iOS AND ANDROID
It’s with great pleasure that we announce that Local Wisdom Labs has officially launched our first mobile game, Wooble Attack!
Read MoreTopics:
Choose a tagThe digital space is constantly evolving. Today’s new invention can be tomorrow’s newest fad and can quickly transition into next week’s old news. In an effort to remain innovative, thoughtful, and creative with our solutions both internally and externally, we love to tap into some of the members on our team who always find the time to become early adopters.
Here are a few benefits of having early adopters on your project team.
its paces, probably in a testing process that most software development projects go through involving pre-alpha, alpha, and beta testing.Please click the link to read the full article on The Necessity of Early Adopters.
In WordPress, Shortcodes are simple functions that can be used globally in the content editor. WordPress has a few default shortcodes and also provides a nice tutorial on how to make your own. By default, however, WordPress does not have a shortcode that displays the website URL. This can be a very useful code to have if you are developing on one server and transferring it to another for production.
Creating one is simple, just add the following lines to your functions.php file:
function website_url_sc() {
return get_bloginfo('url');
}
add_shortcode('url','website_url_sc');
With this shortcode, simple use [url] to display the website URL provided in your admin.
More and more apps are using the Sliding Drawer UI for their apps and there are a few decent example implementations. When researching different implementation I came across this project on Google Code: https://code.google.com/p/drawer-navigation-controller/. This implementation fakes the drawer functionality by taking a screenshot of the current view, loading the “bottom” drawer view, then overlaying the screenshot overtop of the new view, and finally animating the image to slide and anchor to the side of the screen. What really caught my attention about this implementation is that it is completely implemented using a single Category of UINavigationController. This allows the programmer to easily implement drawer functionality by importing the Category .h and adding a few lines of code.
However, the main problem I had with this implementation is that the drawer animation was completely automated and did not smoothly follow the users finger when swiping. Also, I needed a drawer that could open from the top or bottom of the screen. So, I decided to create my own drawer implementation that uses the same screenshot overlay technique, but allows the drawer to open smoothly following the user’s finger, opens from the top and bottom of the screen(not just left or right), and uses delegation to choose which view controllers are displayed when the drawer is moved.
My implementation can be found at: https://github.com/ppierson/Slide-Drawer. My code is also implemented using a single UINavigationController Category as well as a delegate protocol. Below is an example of how to add my implementation to a project and you can also use the example project on GitHub as a reference.
//Import category
#import "UINavigationController+PPSlideDrawer.h"
- (void)viewDidLoad
{
[super viewDidLoad];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
//enable drawer functionality on current view controller
[self.navigationController enableDrawerFunctionalityForCurrentViewController];
//set mask to work in all 4 directions
[self.navigationController setMovementDirectionMask:(DrawerMovementDirectionUp | DrawerMovementDirectionDown | DrawerMovementDirectionLeft | DrawerMovementDirectionRight)];
}
- (void)viewWillAppear:(BOOL)animated{
//Set slide drawer delegate
[self.navigationController setSlideDrawerDelegate:self];
}
#pragma mark - PPSlideDrawerDelegate methods
//Delegate method to return which view to display "below" sliding drawer
- (UIViewController*)navigationController:(UINavigationController*)navigationController viewControllerForDrawerMovementDirection:(DrawerMovementDirection)drawerMovementDirection{
switch (drawerMovementDirection) {
case DrawerMovementDirectionRight:
return [[LeftDrawerViewController alloc] init];
break;
case DrawerMovementDirectionLeft:
return [[RightDrawerViewController alloc] init];
break;
case DrawerMovementDirectionUp:
return [[BottomDrawerViewController alloc] init];
break;
case DrawerMovementDirectionDown:
return [[TopDrawerViewController alloc] init];
break;
default:
break;
}
return nil;
}
//Delegate method, return YES if you want to override the screenshot to overlay
- (BOOL)doesUseAlternateSlideScreenCapture{
return YES;
}
//If doesUseAlternateSlideScreenCapture returns true, this will be called.
//Returns custom UI image to use when sliding the drawer
- (UIImage*)alternateSlideScreenCaptureWithOriginalScreenCapture:(UIImage*)originalScreenCapture{
return originalScreenCapture;
}
Screenshots:
Being a techie, I get called upon by family members to fix their computers all the time. Today I was called in to clean up this machine that has a nasty virus, and it won’t let me even boot into safe mode. I’ve cleaned up viruses like these in the past by disconnecting the hard drive and bringing it into my own machine to scan/remove the viruses that way. Unfortunately once in the past, the virus from the other hard drive then infected my own machine :( Needless to say, I’ve learned my lesson and stopped doing that.
Most of the time, I can get away with running the Microsoft Safety Scanner, but since I can’t even get to the desktop, it’s not an option. So today I researched a bootable Antivirus CD to see if that was an option and found a great site with 26 of them: http://www.raymond.cc/blog/13-antivirus-rescue-cds-software-compared-in-search-for-the-best-rescue-disk/
I settled on trying the AVG rescue CD and it’s finding a lot of problems on this drive! The way it works, is you download the ISO and burn to a CD (they have USB version also). Once you boot to that CD on the infected machine, plug in your ethernet cable and run the “Network” function to get onto the internet. Go to the “Update” function and get the newest antivirus files which will automatically install. Lastly scan your volume/hard drive and wait. The CD will load the whole program in RAM, and with the updates, you’ll have the newest definitions to scan with. It really helps you get out of jam with a nasty virus without worrying about infecting another machine or if you can’t even get to your antivirus on the desktop. Spread the word on this, I know a lot of folks could use it!
I recently ran into a small issue when trying to programmatically set a margin to a FrameLayout.
I would have expected this to have worked:
someFrameLayout = (FrameLayout) findViewById(R.id.some_frame_layout); MarginLayoutParams marginParams = new MarginLayoutParams(someFrameLayout.getLayoutParams()); marginParams.setMargins(newLeftMargin, newTopMargin, newRightMargin, newBottomMargin); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(marginParams); someFrameLayout.setLayoutParams(layoutParams);
But for some reason, nothing happened. I did a little research online and I ended up finding the (really odd) fix. I’m hoping that this is a bug and not intentional, but apparently there needs to be some form of gravity set to be able to set a margin in a FrameLayout.
You’re going to need to add one more line of code to the previous example to get it working:
someFrameLayout = (FrameLayout) findViewById(R.id.some_frame_layout); MarginLayoutParams marginParams = new MarginLayoutParams(someFrameLayout.getLayoutParams()); marginParams.setMargins(newLeftMargin, newTopMargin, newRightMargin, newBottomMargin); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(marginParams); layoutParams.gravity = Gravity.NO_GRAVITY; //This is the new line someFrameLayout.setLayoutParams(layoutParams);
I’ve found the best results when I’m applying the gravity in the direction that the margin is coming from, but usually NO_GRAVITY will work just fine.
It looks like they also fixed this issue for newer devices. I’m not sure which version it was fixed as I only tested it on a 4.2 device (which didn’t need this fix), and a 2.3.6 device (which needed this fix).
E-$ and CBubs came through today…Great to see you guys.

Developing an E-Commerce site can be a hassle, and given the demand for online stores it’s no wonder that so many easy-bake-commerce services are cropping up. Shopify, Bigcommerce, and Volusion are the big three, with Magento filling the gap between theming a pre-made online store and rolling your own entirely.
When you need to get an online store up and running quickly these E-commerce meets WordPress solutions are a no-brainer. The real choice is which one.
Tread lightly ladies and gentlemen.
A cursory glance around the web would have you believe all these services offer the same functionality. Numerous reviews will tell you the same thing; many point to Bigcommerce as the one to beat, edging out Shopify in terms of functionality and customizability. This is where I disagree. Bigcommerce indeed has some functionality out of the box that Shopify has been lacking for some time. A field for a product’s cost of goods sold, and an ability to create your own custom fields are two things that have been feature requests on the Shopify forums for over a year now, and they come standard with Bigcommerce.
On the other hand, Bigcommerce, despite the praise I’ve seen for it’s extensibility and customizability, I’ve found sorely lacking in both departments. More than lacking, it’s downright frustrating trying to create something outside of the prepackaged themes.
Here’s how Bigcommerce works: Now, keep in mind, this alone took long enough to figure out as the online documentation is nearly nonexistent, and support dries up outside of their sales team, and even when you get them on the phone or in chat, they refuse to offer any insight as to how to actually use their service aside from consulting one of their “expert” designers who’ll make your site for you for a hefty fee (wow, gee, great, no thanks). But I digress, here’s how Bigcommerce works: You have a bunch of “Layout” files in your theme. Then you have a folder of “Panels” and a folder of “Snippets”. Whatever all that means. Well, here’s what that means. Your layout files generally look the same. A call to your “Header” panel, then a call to that layout’s page-specific panels, then a call to your “Footer” panel. In the panels and snippets (smaller, typically looped files with item specific data) you have your meat and potatoes HTML, and calls to some “global variables” e.g. your product data.
Here’s where it gets annoying. Bigcommerce dictates, where, when, and what from your product data you have access to, panel by panel and snippet by snippet, and what they give you access to seems to be exactly and only what they use in their default template. Moreover they take the data you want and wrap it in random HTML they assume you’ll need in almost every situation. Why? I cannot say except that it probably made it easier for them to develop their service.
Let me walk you through my process of messing around in Bigcommerce.
So, I’m in a Snippet, trying to make a slider on a specific products page for similar products… Simple enough, right? …Okay so, how do I do that? Uh oh. Oh wait. There’s a related list I can add other products to in a products control panel. I can work with that. You must be able to access that somewhere within the theme. Okay, let’s find the panel for that. I guess that would be “SideProductsRelated.html“, what does that “Side” mean? Oh, well. And great — There’s a call to %%SNIPPET_SideProductsRelated%%… SideProductsRelated, SideRelatedProducts? Wat. Moving on. This snippet actually seems to be just what I need. It’s got %%GLOBAL_ProductLink%%, %%GLOBAL_ProductName%%, %%GLOBAL_ProductPrice%%, things I’ve seen from the main products page panel. (It looks like someone threw up percent signs all over my HTML, by the way) Maybe I have all access to all the variables for each related product in this “related product” snippet that I did in that product’s main panel? GREAT! (Spoilers: I don’t)
Design calls for a <ul> of <a>s wrapping an <img> thumb for the product, and some s holding the name, retail, and sale prices. Easy-peasy. Name? No problem. Price? No problem. Oh wait problem. %%GLOBAL_ProductPrice%% which just spits out the price with a dollar sign on a ProductDetails panel, is giving me both the retail price wrapped in strike tags, as well as the product price in the same string here in the SideProductsRelated snippet… But I don’t want the retail price… I guess I can hide that with CSS. Moving on again… Now I need the thumbnail and I’m done. I know I can get that. Oh wait. They decided to wrap every thumbnail in anchor tags to the product. Because surely no one could ever need an image without a link, right? Right?? Too bad that busts up my whole <a> as a container idea. Can’t put an anchor in an anchor now can I? I guess I should change my design… Or maybe I should just change my E-commerce software.
Granted I haven’t played around with Shopify as much as Bigcommerce but what little I saw of it was a dream. With Laravel blade style templating and access to all of your product data at all times. Simplicity and flexibility, plus great documentation to back it all up.
Bigcommerce may be big, may be a more mature product, but it may be showing its age. No product’s perfect, but with Shopify the focus seems to be at least as much on the developers as it is the sellers. Bigcommerce seems to be all about selling everybody the same store and getting you out the door.
When I code a website, I like to use as little linked files as possible to reduce the amount of calls made to the server. With pretty much every website, browser-specific CSS styles are needed to adjust for the differences between the way, for example, Internet Explorer and Firefox may output code. Rather than using multiple CSS files, I prefer to use CSS hacks within the same file. There are two ways you can specify these hacks – through selectors or through attributes in a shared selector.
/* IE6 and below */
* html #uno { color: red }
/* IE7 */
*:first-child+html #dos { color: red }
/* IE7, FirefoxF, Saf, Opera */
html>body #tres { color: red }
/* IE8, FirefoxF, Saf, Opera (Everything but IE 6,7) */
html>/**/body #cuatro { color: red }
/* Opera 9.27 and below, Safari 2 */
html:first-child #cinco { color: red }
/* Safari 2-3 */
html[xmlns*=""] body:last-child #seis { color: red }
/* Safari 3+, Chrome 1+, Opera9+, FirefoxF3.5+ */
body:nth-of-type(1) #siete { color: red }
body:first-of-type #ocho { color: red }
/* Safari 3+, Chrome 1+ */
@media screen and (-webkit-min-device-pixel-ratio:0) {
#diez { color: red }
}
/* iPhone / mobile webkit */
@media screen and (max-device-width: 480px) {
#veintiseis { color: red }
}
/* Safari 2 - 3.1 */
html[xmlns*=""]:root #trece { color: red }
/* Safari 2 - 3.1, Opera 9.25 */
*|html[xmlns*=""] #catorce { color: red }
/* Everything but IE6-8 */
:root *> #quince { color: red }
/* IE7 */
*+html #dieciocho { color: red }
/* Firefox only */
#veinticuatro, x:-moz-any-link { color: red }
#veinticinco, x:-moz-any-link, x:default { color: red }
These are my most-used hacks since Internet Explorer tends o read things much more differently than other browsers.
/* IE6 only */
#once { _color: blue }
/* IE6, IE7 */
#doce { *color: blue; /* or #color: blue */ }
/* Everything but IE6 */
#diecisiete { color/**/: blue }
/* IE6, IE7, IE8 */
#diecinueve { color: blue\9; }
/* IE7, IE8 */
#veinte { color/*\**/: blue\9; }
/* IE6, IE7 -- use this instead of !important */
#veintesiete { color: blue !ie; }
For a more in depth look at these hacks, check out BrowserHacks.com.
Quantum theory says, “the mere act of observing an experiment changes its outcome.” What that tells me; and what I’ve found in all my experience working with great leaders, is that successful outcomes come from a dance between both strategy and tactics. Especially for first-time projects. That is, you don’t spend all your time on strategy, you also don’t spend all your time on tactics. Instead, you spend the right amount of time going back and forth between them.
This might seem “duh”, but most business insights are that way.
Let me explain the rationale.
Strategy is a goal and a plan to get there. Tactics are the individual actions necessary fulfill the plan and reach the goal.
If you put all your effort on strategy, you might find yourself wrestling a big hairy audacious goal, which can be overwhelming. You’ve spent the a week or 2 creating a large strategy presentation deck and now the only natural course is to get buy in from your management and peers. After which you’re in an iterative mode, revising your strategy deck and re-pitching the strategy.
What you’ve also lost is the insight that you get from working on tactics. these learnings can give you insight to switch the strategy for the better. It’s important to keep your plans open to such “ah-ha” moments and not stifle them because they go off “script”.
On the other hand, if you spend all your days on tactics without a strategy, you’ll just be doing things without a clear vision of where you want to be or how you’ll get there. People around or under your management won’t be able to help you because they don’t know where you are going with it.
Without a destination you can find yourself going off tangent and not working towards the big picture. It also becomes difficult to truthfully justify your results when you don’t know where you are going.
To sum it up, don’t spend too much of your time in one place, instead dedicate time going back and forth: strategy, tactics, strategy, tactics, and so on. Set the pace for your intervals based on your specific situation. The intervals don’t have to be equal or regimented.
I’ve observed many leaders take this approach and it helps them:
Hope this helps, thank you for reading. I’ll look forward to hearing your thoughts in the comments, likes, and shares.
I recently ran into a problem with UI scaling issues in one of our projects running on an HTC One device. We were alerted to this problem by one of our users through feedback. The code that handled scaling was pretty old and did not contain a case to scale for devices with an XXHigh screen density. Because of this, certain UI components were scaled to that of a normal screen of Medium density by default.
To determine if this was in fact the cause of the problem, I first tried to replicate the user’s experience in the android emulator. I created a new Device Definition and Android Virtual Device to match the HTC One Specs and launched the app, but I was unable to replicate the user’s problem. After some digging through code, I discovered that the emulator was returning DisplayMetrics.DENSITY_XHIGH when accessing the device’s Display Metrics from code instead of DisplayMetrics.DENSITY_XXHIGH. Figuring this was a problem with the android emulator, Brandon found a post on StackOverflow which explained the problem as well as a simple solution to force the emulator to return DisplayMetrics.DENSITY_XXHIGH: Any suggestions on getting xxhdpi working in the android emulator?
After following the instructions outlined in the post, the emulator returned the screen density correctly allowing me to replicate and eventually solve the user’s problem.
Solution from StackOverflow:
In the Android SDK Tools version 21.1, the xxhdpi screen resolution for the emulator display is not yet supported. However, you could do a manual override of the LCD properties of the emulator. This will ensure that the correct resources are being dispatched for the Xperia™ Z emulator. To do so, please execute the following in your command line after the Xperia™ Z emulator has completed the boot sequence: adb shell setprop qemu.sf.lcd_density 480 adb shell stop adb shell start The emulator will then restart. After it has rebooted the emulator should use the correct screen density and UI scaling. We recommend you to execute these commends using a batch file or a shell script if you are using these settings often.