Logo

Who is talking?

Archive

New Research Shows Dramatic Impact of Style and Form on Code Maintainability

over 3 years ago | Christian Lilley: UI Guy

Academic researchers are catching up to what coder intuition inferred long ago: that the formatting of our code has a huge demonstrable effect on the productivity of the people who have to maintain it after us. that using surprising or ‘clever’ notation (where a clearer syntax would suit) has an even bigger effect. And don’t […]

New Research Shows Dramatic Impact of Style and Form on Code Maintainability

over 3 years ago | Christian Lilley: UI Guy

Academic researchers are catching up to what coder intuition inferred long ago: that the formatting of our code has a huge demonstrable effect on the productivity of the people who have to maintain it after us. that using surprising or ‘clever’ notation (where a clearer syntax would suit) has an even bigger effect. And don’t […]

More Sublime Hotkeys: Custom Package for Use with Angular

over 3 years ago | Christian Lilley: UI Guy

The Angular-UI project have produced an excellent package that provides auto-completion and lookup for Angular directives/controllers/services/filters/etc., in both Sublime 2 and 3. Go get it, install, then check out these crucial hotkeys: Index My Angular Project: ⌘-CTRL-L Once you’ve done this, Angular should recognize all of your Angular components. If your project is already indexed, this hotkey […]

More Sublime Hotkeys: Custom Package for Use with Angular

over 3 years ago | Christian Lilley: UI Guy

The Angular-UI project have produced an excellent package that provides auto-completion and lookup for Angular directives/controllers/services/filters/etc., in both Sublime 2 and 3. Go get it, install, then check out these crucial hotkeys: Index My Angular Project: ⌘-CTRL-L Once you’ve done this, Angular should recognize all of your Angular components. If your project is already indexed, this hotkey […]

Lean Hardware

over 3 years ago | Sven Kräuter: makingthingshappen blog.

If you ask me what lean hardware development is and you have a background in software or the startup economy the explenation is short: lean startup applied to physical product development. The more interesting conversation starts if you do not have a software background. Developing software products the weapon of choice to minimize risk & waste and at the same time maximize chances of success & return of invest these days is lean entrepreneurship: agile software development tightly glued to lean startup product development. So what does this mean for the development process of physical goods? Can it be applied to my average internet of things project too? You might have guessed - the answer is: yes! I’ll elaborate it using as little buzzwords as possible so you can concentrate on the advantages of the concept of lean hardware itself. The mood lamp. <!-- more --> What you see here is the hardware manifestation of the starting point of my approach of developing web apps: a minimum viable product. It is a prototype that represents the minimum set of features to be viable to its users by delivering a certain value. It’s also viable to its producers to validate the proposition of the value they had in mind to be delivered to their customers. Question is: What Is It? It’s the mood light - using the rat pack internet of things framework for rapid iot prototyping and a sentiment analysis web api to mix colors depending on the percentage of positive, neutral and negative tweets that relate to a given hashtag: red for negative, blue for neutral and green for positive moods. Rather minimal although already proposing a certain value: delight the attendees of an event for the time of their visit by displaying the mood of the event’s twitter timeline intuitively. Mood Lamp User Lab Spring 2012 the fabulous Digiwomen asked if I could build something physical that’s somehow related to social media to kick off the Social Media Week with a blast. So I started that minimal to get the product in contact with real users early and to weave in their feedback and more important their reaction to shape the face of the product. This technique is called validated learning or rapid prototyping. Back to our value proposition: delighting the attendees of an event for the time of their visit. The first test drives of this hypothesis took place at selected local events: the picture above shows a hacktable and I also took the prototype with me to a CoCreact! Workshop where I actually sketched making things happen’s value proposition, which is another story ;-). The first reaction of users to a product can be bitter medicine: you spent half a year developing something you thought they’d love and then it turns out they don’t exactly do so. Sweet time wasted. But wait - I did not spend such a ridiculous amount of time before confronting myself with a first feedback, did I? First user feedback & the first reactions too are always a surprise. Sometimes rather small suprises. Sometimes they are of epic dimension. In our case the first reactions are solid fun. Turns out confronting the value proposition with The Reality™ proved it wrong. The reactions showed people were interested in this object - but delight was yet to be added. The rate of change of the colors made it more appealing for a chilled, snoozy room like setting. Which is cool unless you’re briefed to open an event with a big bang of attention. In this situation you can either persevere - stay on course - or pivot - change the direction you’re moving. Basically the element of sentiment represenation proved itself quite handy. Persevere. But the way I represented it needed a little pivot. Or perhaps even a huge one ;-). Sometimes you have to pivot hard: hacked Vinyl Killer Quite out of the blue I started collaborating with my partner in crime Jeremy who told me about this toy his kids played with - a little plastic VW bulli that drives around a record using an integrated needle and speakers to actually play the vinyl it moves on. “What’s it called?” “It’s a Vinyl Killer”. You could tell it by the look on my face: we found our new direction: a Vinyl Killer playing a record in different speeds according to the mood of an event’s twitter stream was the way to go. Missing Link I prototyped the missing links: regulating the voltage of the toy via our online Arduino devices and adjusting the software to ditch neutral moods - how boring anyways. The first users’ reactions were more than promising. A quick check against the initial value proposition “Delighting the attendees of an event for the time of their visit” made me finally say: value proposition validated! It’s proved itself fun, easy to understand and just the show act the event organizers had in mind for its starting event. Minimum Viable Product ready for action. You can have a look at this video from the event to see how it went :-). On the bottom line please keep in mind: when developing basically anything - the lean entrepreneurship (aka lean startup) approach makes you flexible enough to respond to user feedback & more important the behaviour of people using your product. Be it software, hardware or conceptual / strategic work: moving fast in slow steps reduces risks and maximizes your chances of success by making you - lean actually.

RubyKaigi: Making a Japanese Conference Accessible to the World

over 3 years ago | Pat Shaughnessy: Pat Shaughnessy

Note: I co-wrote this article with Chris Salzberg, an Canadian Rubyist living in Japan who attended RubyKaigi. For the first time, RubyKaigi offered simultaneous translation from Japanese to English

Sitecore 7: The Power Packed

over 3 years ago | Sumit Bajaj: Sumit Bajaj's Blogs

Sitecore 7 is new release of Sitecore content management system. It came up with so many exciting features that when someone will go through, definitely will say Wow!!. The industry's first fully integrated search based architecture.Out of so many power-packed features, here is the list of few.Search Boosting: It allows content to be pushed higher in the search. Rules are provided which can be easily created in sitecore depending on business requrements. For example: If we have 100 featured results to be displayed on page, then by boosting your items can up-rank it on top.Dynamic Data: The nice change in Data source field. It allows to write query based data source which make it fully dynamic. Criteria can be written in Build Query dialog box.Search Tagging: Inbuilt tagging mechanism pulls the content in search which is tagged. It is used for fetching more accurate data. No coding, its just add tags on item and you are done.Big Data: There is no limit on the amount of content it can store. Good thing is that high volume of data is not impacting the performance in any way.Pluggable Search: Everyone who worked on Sitecore has used Lucene/Solr but Sitecore 7 provides flexibility to plug search of your choice. User Interface is fully integrated with Search, LINQ usage and latest Microsoft.Net framework support and so many features to explore.

Meet Fifteen Ruby Core Committers

over 3 years ago | Pat Shaughnessy: Pat Shaughnessy

We all know Yukihiro Matsumoto invented Ruby, but how many of the other people behind Ruby can you name? Judging from this photo taken just a few weeks ago at RubyKaigi 2013, the Ruby 2.0 release was a real team effort, with commits both from the people on stage in Tokyo and hundreds of other open source developers located around the world.

Uncommon lessons in marketing

over 3 years ago | Amit Anand: UXcorner

One of the largest media and entertainment industries globally is Bollywood, a helm of modern classic and drama depiction of the Indian subcontinent, this industry has been in existence for over a century now! In the recent past, some of the best movies which have fetched a good RoI have not been the best grocers […]

Uncommon lessons in marketing

over 3 years ago | Amit Anand: UXcorner

One of the largest media and entertainment industries globally is Bollywood, a helm of modern classic and drama depiction of the Indian subcontinent, this industry has been in existence for over a century now! In the recent past, some of the best movies which have fetched a good RoI have not been the best grocers […]

NY Diaries – 1

over 3 years ago | Amit Anand: UXcorner

A recent (and my first trip to NY) reinforced principles of good design. This is a city which thrives on art, multifaceted culture and design amongst all chaos. Little nuggets of design in every corner make this city more interesting than other bust business concentrates of the world. One of the oldest inhabitants being a […]

NY Diaries – 1

over 3 years ago | Amit Anand: UXcorner

A recent (and my first trip to NY) reinforced principles of good design. This is a city which thrives on art, multifaceted culture and design amongst all chaos. Little nuggets of design in every corner make this city more interesting than other bust business concentrates of the world. One of the oldest inhabitants being a […]

Importing existing blog data under New blog

over 3 years ago | Sumit Bajaj: Sumit Bajaj's Blogs

Welcome to the topic 'Importing existing blog's data under new blog'. Generally people write new post in existing blog but few people write blogs in category. One kind of posts under one blog and other kind of posts under other blog. For example: java-script related posts under java-script blog, ruby related issues under ruby blogs.Sometime when there is need to generate feed for blogs it gets difficult to accumulate all blogs under one feed when you have categories the blogs.Those who have all posts under one blog, feeds get generated easily.Let's see how different blogs can be grouped together under one blog. These steps are written for www.blogger.com, similar kind of steps can be used for other kind of blogging sites.1. Open blogger.com and click on the blog which you want to move to other (main) blog2. Click on Settings tab on left3. Click on Other tab under Settings4. Click on 'Export blog' which is shown on top right panel5. Clicking on it will download the xml file, download it6. Go back to main blog in which you want to import the blog7. Follow the steps from 1-3 and click on 'Import blog'8. Select the xml file which is downloaded and click on 'Import blog' button9. Select the settings as you want and blog will be imported in main blogScreenshot1 (Settings for existing blog) :Importing blogScreenshot2 (Get Imported blog and import in main blog) : After importing when you will open the mail blog, you will find the imported blog is also coming in Blog Archive section. Click on that blog and verify if it is imported successfully. All the best and keep blogging !!

BDD using Cucumber-JVM

over 3 years ago | Adhir Aima: tech blogs

I personally had a tough time finding the correct list of resources, to get started with Cucumber-JVM. So, that's the sole purpose of creating this blog. It might be an added resource on the internet to help out anyone who wants to implement Behavior Driven Development and radically improve stability of their application.A little breif about behavior driven development. It is not exactly the latest buzzword in town, however since I have used it in a lot of my previous projects, all I would like to say is that it is pretty much a very easy way to ensure that your workflows are not broken by subsequent releases. I have learnt to rely upon these tests (provided they are written well and foolproof) and so have a lot of organizations. What i have realized over time is that automate everything that you can, especially the tests and you will reach to a level of continuous delivery with your product/application. Now is that not worth the effort? So here is the hands on part.One of the first things you would need is of-course an IDE. I prefer eclipse only because I have been using it a long time. You can write the entire set of tests using command line tools like VI also. The only thing that matters is that we configure and define paths properly to execute the tests.The next thing you would need is the supporting jars. I assume that you would have a JDK installed and in your system/user classpath/path in order to start eclipse up, so the rest of the jars that are needed are as follows.Here is the basic list of Jars you would need to setup your project:-cucumber-core-1.1.3.jarcucumber-html-0.2.3.jarcucumber-java-1.1.3.jarcucumber-junit-1.1.3.jarcucumber-picocontainer-1.1.3.jargherkin-2.12.0.jarjunit-4.11.jarselenium-server-standalone-2.32.0.jar You can select your specific versions from maven repository as well.With all the stuff needed you can start by creating a Java Project in eclipse. Once the project is created import all the jars downloaded into the projects build path and classpath (just copy all the jars in the lib directory at the project root, if not there then create one and modify the .classpath file of the project).Start with creating the run-time interface or entry point for the test by defining a class, you can name it whatever you want, however for the sake of simplicity we will call it "RunCukesTest" in a test.java package in the source folder. We will mark it with the annotation @RunWith(Cucumber.class), it is a JUnit defined annotation that signals the dependencies to start when we run this class as a test. Here is what the class looks like.package test.java;import org.junit.runner.RunWith;import cucumber.api.junit.Cucumber;@RunWith(Cucumber.class)public class RunCukesTest {}There are options that you can define using the @Cucumber.Options  tag at the class level e.g.@Cucumber.Options(format="html:target/report", features="src/test/resources/" tags="@myTag")format options specifies the format of the report i.e. html and the path relative to the project root where it should be saved to.features define the path to the feature files, we can specify the complete relative path of a single feature file also if we only want to run it.tags define the specific scenarios that you want to execute in the current run, so all the scenarios marked with @myTag will be run in the current test runThere are more options that can be configured but these are good to begin with, you can find the entire detail here.You can right-click and run this file as a JUnit test. It will result in an error right now because you have no features defined or the required package declared.The next step is to define a package under the source folder, call it test.resources. This will contain all your feature files. Features is a cool way of writing tests in plain English. The idea is that any one can write a feature, of-course it is to the developer to write the corresponding implementations.The feature that you will write is a simple gmail login and open the mailbox.Here is the feature file:- Feature: GmailScenario: open a mail to read in gmailGiven I Login to gmail with "<username>" and "<password>"When I click on the sign in buttonThen I can see my mailboxSave this file as GmailLogin.feature under the package test.resourcesNow you will write the implementation step definitions of features. This will contain code that matches a regular expression with the annotation associated to the methods in the step definition file. For the above feature file, here is the step definition:-package test.java;import org.junit.Assert;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import cucumber.api.java.Before;import cucumber.api.java.en.Given;import cucumber.api.java.en.Then;import cucumber.api.java.en.When;public class GmailStepDefs {    WebDriver driver;    @Before    public void start() {        driver = DriverHelper.getDriverInstance(DriverHelper.FIREFOX_DRIVER);    }    @Given("^I Login to gmail with \"([^\"]*)\" and \"([^\"]*)\"$")    public void I_login_to_gmail(String username, String password)            throws Exception {        driver.get("http://mail.google.com");        WebElement userid = driver.findElement(By.id("Email"));        WebElement passwd = driver.findElement(By.id("Passwd"));        userid.sendKeys(username);        passwd.sendKeys(password);    }    @When("^I click on the sign in button$")    public void I_click_on_signIn() throws Exception {        WebElement signIn = driver.findElement(By.id("signIn"));        signIn.click();    }    @Then("^I can see my mailbox$")    public void I_can_see_my_mailBox() throws Exception {        Thread.sleep(10000);        WebElement composeButton = driver.findElement(By                .xpath("//div[contains(text(), 'COMPOSE')"));        Assert.assertEquals(true, null != composeButton);    }   @After    public void end(){       driver.quit();    }} Save this file under the test.java package. There is a driver helper, which is a factory class which I have used to create driver instances, only because the IE Driver is a little problematic to work with and we have to ensue for the stability f the tests that we are always working with a single instance. Here is the code for it:-package test.java;import java.util.concurrent.TimeUnit;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.ie.InternetExplorerDriver;import org.openqa.selenium.remote.DesiredCapabilities;public class DriverHelper {        public static final String INTERNET_EXPLORER_DRIVER = "IE";    public static final String FIREFOX_DRIVER = "FF";    public static final String CHROME_DRIVER = "GC";    public static WebDriver driver;        public static synchronized WebDriver getDriverInstance(String driverType) {        if (driver == null){            if (driverType.equalsIgnoreCase(INTERNET_EXPLORER_DRIVER)) {                System.setProperty("webdriver.ie.driver",                        "E:\\workspace\\TestCucumber\\lib\\IEDriverServer-32bit.exe");                DesiredCapabilities capabilities = DesiredCapabilities                        .internetExplorer();                capabilities                        .setCapability(                                InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,                                true);                capabilities.setCapability("ignoreProtectedModeSettings", true);                driver = new InternetExplorerDriver(capabilities);                driver.manage().timeouts()                        .pageLoadTimeout(180, TimeUnit.SECONDS);                return driver;            } else if (driverType.equalsIgnoreCase(FIREFOX_DRIVER)){                return new FirefoxDriver();            } else if (driverType.equalsIgnoreCase(CHROME_DRIVER)) {                return new ChromeDriver();            }        }        return driver;    }}As you can see that there is a lot of code specifically for the creation of the IE driver instance. Now go back to the RunCukesTest class right-click, select run as Junit Test and enjoy the show. You will need to have the IEDriver 32-bit  or 64-bit depending on your OS to be present in the class path. These can be downloaded here.Please feel free to contact if you need some more help or sample code for the blog here.

Scalability and Availability using Proxies

over 3 years ago | Adhir Aima: tech blogs

The first thing that comes to mind upon hearing the word proxy is some sort of distribution facade. That's more or less what I will be writing in the blog post with a bit more here and there. When I was in college the word proxy meant to call out someone else' attendance. So, If a student A is not present in the class, during the roll call ,a student B will reply in a 'Present' when A's roll number is called. This is the essence of proxies, they are a singular interface for all incoming requests in a cluster/multi-server environment. They give the appearance that you are every-time requesting a single server URL like www.xyz.com while it is actually the proxy that you are contacting. And then the proxy based on the distribution algorithm that it comes programmed with, pushes the request to any of the servers present behind it. This distribution mechanism is out of scope of this blog and I will hopefully cover it in a future blog.Proxies are very basic level of scalability and availability. You can have a proxy upfront with two servers running in cluster. If you feel the need to scale-up, then add more servers to the system to make it scale up to the growing traffic demands. Also the proxy will make the system more available. So, one of your servers' goes down (read crashes), the proxy will direct all the incoming traffic to the other available servers in the cluster automatically. So, essentially your application/site is up and you do not lose business. There are two ways in which proxies are created in a system a forward proxy or just a proxy and reverse proxy. A forward proxy is used generally to segregate an internal network from the internet. You can control/filter content going in and out of the network. So in this case the application is more of securing the internal network against unintended use, attack or access. And the internal users are protected against any mal-ware or problem causing content online.The Reverse proxy is what is generally used as a availability and scalability medium. The entire set of servers sitting behind a proxy and the requests are directed to each one of them depending upon the traffic that they are currently handling. It's a technique for scaling out more than scaling up, but it does have the desired effect nevertheless. Using this mechanism you can achieve more than just handling fail-overs or load distribution. The proxies can also be used as a caching mechanism to cache a lot of non-varying data being presented to the requesting clients. Which when done properly on a global scale can really boost up the application performance, or at-least give a mirage of faster response times. It can also be used to handle regionalization, which is some thing that most of the content delivery network products do, but on a much larger scale and they use HTTP caching mechanism to achieve this. Again that is some thing out of the scope of this article.This proxy mechanism (read load balancing) can be set at the database levels too, which done in the desired way helps in achieving availability and scalability both. You can set up the data base as master-slave, multi master-slave, multi-master-multi-slave or buddy replication modes to get the maximum throughput and least load.

Coming This Fall: “Ruby Under a Microscope” Updated and in Print

over 3 years ago | Pat Shaughnessy: Pat Shaughnessy

With almost 200 diagrams, my 2012 eBookis an illustrated guide to Ruby internals

Ruby, Python, Java, C and Programmer Happiness

over 3 years ago | Pat Shaughnessy: Pat Shaughnessy

  “Ruby is designed to make programmers happy.” - Yukihiro “Matz” Matsumoto Not everyone might agree, but as a Rubyist I think Matz achieved his design goal. There’s something intangible about Ruby’s syntax that makes it fun,