The 11 deadly sins of product development Download a free copy of “Building a Hardware Business,” a curated collection of chapters from our IoT library. Editor’s note: this post is an excerpt from “Prototype to Product: A Practical Guide for Getting to Market,” by Alan Cohen, which is included in the curated collection. Thomas Edison famously said that genius is “1% inspiration, 99% perspiration,” and his observation holds true for product development. Developing “genius-level” products certainly requires inspiration, but the bulk of the effort is more like perspiration: work that benefits from insight and cleverness, but is also largely about not screwing up. Most product development efforts fail. It’s been my observation that failures are not usually due to a lack of inspiration (i.e., poor product ideas), but rather from mistakes made during the “perspiration” part. What follows is a brief catalog of the most popular ways to wound or kill product development projects. The fundamental principle of product development “Hey!
Open-sourcing Facebook Infer: Identify bugs before you ship Today, we're open-sourcing Facebook Infer, a static program analyzer that Facebook uses to identify bugs before mobile code is shipped. Static analyzers are automated tools that spot bugs in source code by scanning programs without running them. They complement traditional dynamic testing: Where testing allows individual runs through a piece of software to be checked for correctness, static analysis allows multiple and sometimes even all flows to be checked at once. Facebook Infer uses mathematical logic to do symbolic reasoning about program execution, approximating some of the reasoning a human might do when looking at a program. Each month, hundreds of potential bugs identified by Facebook Infer are fixed by our developers before they are committed to our codebases and deployed to people's phones. Motivation Facebook likes to move fast by shipping software as soon as it’s ready, rather than after a lengthy manual testing process. Novel techniques: Separation logic and bi-abduction
/\ndy: The Failure of Agile I am proud to be one of the 17 founders/authors of the The Agile Manifesto back in 2001. I think it provided a jolt of energy, hope of a better way of doing things, of creating software and making the world work better. It was a pivotal turning point. But in the 14 years since then, we‘ve lost our way. The word “agile” has become sloganized; meaningless at best, jingoist at worst. We have large swaths of people doing “flaccid agile,” a half-hearted attempt at following a few select software development practices, poorly. And worst of all, agile methods themselves have not been agile. How did we get into this mess? The Joy of Rules The basis of an agile approach is to embrace change; to be aware of changes to the product under development, the needs and wishes of the users, the environment, the competition, the market, the technology; all of these can be volatile fountains of change. But most agile adopters simply can‘t do that, for a very good reason. Stuck in a Concrete Rut A Way Forward
Interactive In-Memory SQL with Apache Ignite using Apache Zeppelin Recently I have been working on Apache Ignite interpreter for Apache Zeppelin. In this post I want to demonstrate how you can use Zeppelin to run SQL queries over Ignite distributed in-memory clusters. Apache Zeppelin is a web-based notebook which provides interactive data analysis and visualization capabilities. Apache Ignite is an In-Memory Data Fabric, which has a Distributed In-Memory Data Grid as one of its components. Zeppelin allows to run SQL on top of data distributed within Apache Ignite cluster. Now you need build, install and configure Apache Zeppelin. Open Zeppelin interface in your browser on URL and configure Ignite SQL interpreter in order to use words cache. Then create new note and input the following SQL query: After executing this query you can see result as table or graph. If you want perform additional data processing that doesn't fit into SQL capabilities you can use Scala language for it.
The Twelve-Factor App ObjectiveC2Swift will help you translate your tired Objective C code to Swift Objective C’s time in the limelight is coming to an end. As Apple slowly phases its legacy iOS and OS X coding language out in favor of Swift, developers are transitioning as well. A new web-based tool, ObjectiveC2Swift, will help you port your legacy code to Swift. It’s a simple translator, but a handy one for those that are behind on transitioning to Swift. If you’ve got code that won’t compile, it also won’t translate with ObjectiveC2Swift. It’s already a fun little tool, and the creator, Alex Petuschak, mentioned in a Product Hunt comment that he planned to integrate the tool with Xcode in the future. ➤ ObjectiveC2Swift Read next: The Lyft iOS app is now written entirely in Swift
Building Resilient Services with Go – Tech Talk In this Tech Talk from GopherCon 2015, Blake Caldwell, a former Software Engineer here at Fog Creek who worked on the Kiln team, explains how he used Go to re-write and speed up KilnProxy, our SSH Reverse Proxy. Hear how he was able to re-write the service and reduce clone times by half, whilst making it more reliable and less noisy. Blake writes about Go and software development on his blog. He has open-sourced the profiler mentioned and you can get the slides from the talk on his GitHub. About Fog Creek Tech Talks At Fog Creek, we have weekly Tech Talks from our own staff and invited guests. Content and Timings Introduction (0:00)Background (0:22)About KilnProxy – SSH Reverse Proxy (1:33)Results (3:35)Handling Errors (5:20)Channels (7:17)Handling Panics (8:09)Avoiding Race Conditions (10:00)Implementing Timeouts (11:20)Profiling (13:44)Logging (21:20) Introduction Blake: Hello. Background To give you some background, last year I was working at Fog Creek Software out of New York. Results
12 Days of Open Source | Engineering Blog | Facebook Code | Facebook In the spirit of the holidays, we present "12 Days of Open Source": a 2014 review of stats and fun facts from Facebook's engineering teams. Check back each work day for a new question and answer from now until the 23rd. Happy Holidays! Day 12 It's the last day of "12 Days of Open Source." It's awesome to see all of this work represented in one place, especially as it reminds us of how much the community comes together to make this work possible. Day 11 We worked hard this year to speed up our review process, specifically to get code contributions reviewed and accepted quickly. The average age of pull requests decreased by 3x. Day 10 For those who couldn't attend, we turned out in force at OSCON (the Open Source convention). To understand my rationale, check out the first minutes of my OSCON presentation here. Day 9 Security may not be the first thing that comes to mind when you think open source, but in 2014 we made two contributions involving security. Day 8 Day 7 Day 6 Day 5 Day 4 Day 3 Answer:
PUT vs. POST Actually its nothing to do with REST for PUT and POST. In general how HTTP PUT works and how POST work, is what I want to demonstrate through code. Why REST is considered, usually we get confused while developing REST API, that when to use PUT and when to use POST for update and insert resource. Lets start with the actual definition of these methods (copied The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. The actual function performed by the POST method is determined by the server and is usually dependent on the Request-URI. The action performed by the POST method might not result in a resource that can be identified by a URI. Responses to this method are not cacheable, unless the response includes appropriate Cache-Control or Expires header fields. Lets Go back to our REST example APIs we have
What I look for in frameworks | Schauderhaft In every project the discussion comes up over and over again: should we use framework X? or Y? or no framework at all? Stay away from the new kid on the block.