Skip to content

Software Development Blogs: Programming, Software Testing, Agile Project Management

Methods & Tools

Subscribe to Methods & Tools
if you are not afraid to read more than one page to be a smarter software developer, software tester or project manager!

Feed aggregator

Announcing Open Source of .NET Core Framework, .NET Core Distribution for Linux/OSX, and Free Visual Studio Community Edition

ScottGu's Blog - Scott Guthrie - Wed, 11/12/2014 - 16:45

This week we are holding our Connect() developer event in New York City.  This is an event that is being streamed online for free, and it covers some of the great new capabilities coming with the Visual Studio 2015 and .NET 5 releases.  You can watch the event live as well as on-demand here.

I just finished giving the opening keynote of the event during which I made several big announcements:

Announcing the Open Sourcing of the .NET Core Runtime and Libraries

Over the last several years we have integrated more and more open source technology into our .NET, Visual Studio, and Azure offerings.  We have also begun to open source more of our own code and technology as well.

Earlier this year, at the Build 2014 conference, I announced the creation of the .NET Foundation – which is an independent organization designed to foster the development and collaboration of open source technologies for .NET.  We have now open sourced ASP.NET, EF, Web API, NuGet and the "Roslyn" C# and VB compilers under it. 

It has been great to see the energy and innovation in these technologies since we made the open source announcements. We continue to have dedicated Microsoft teams working on each of them (several of the teams have more developers than ever before).  The open source process is now enabling the teams to collaborate even more with other developers in the community, and every single one of the above projects have now accepted code contributions from developers outside Microsoft.  The combination is enabling an even richer flow of ideas, and even better products.

Open Sourcing the .NET Core Runtime and Libraries

Today I’m excited to announce that we are going even further, and will be open sourcing the .NET Core Runtime.  This will include everything needed to execute .NET code – including the CLR, Just-In-Time Compiler (JIT), Garbage Collector (GC), and core .NET base class libraries.

We are releasing the source under the MIT open source license and are also issuing an explicit patent promise to clarify users patent rights to .NET.  This morning, we published the public repository on GitHub where the project will be hosted: https://github.com/dotnet/corefx

Today’s source release includes many of the newer core .NET framework libraries (ImmutableCollections, SIMD, XML and MetadataReader).  These libraries are fully open, and are ready to accept contributions.  Over the next several weeks and months we will continue to transfer source (including the Core CLR which is not there right now but in the process of being moved) into the repository and likewise make it open for contributions.

What does this open sourcing mean?

Today’s open source announcement means that developers will have a fully supported, fully open source, fully cross platform .NET stack for creating server and cloud applications – including everything from the C#/VB compilers, to the CLR runtime, to the core .NET base class libraries, to the higher-level .NET Web, Data and API frameworks.

It is an exciting day for .NET, and the new open source process will allow the .NET teams in Microsoft to collaborate even more deeply with other developers around the world.  The result is going to be even better products for everyone. Announcing .NET Core Framework on Linux and OSX

Last month at a Cloud Event we held in San Francisco, Satya Nadella – our CEO – showed a slide like this one where he talked about how Microsoft loves Linux:

image

We’ve worked hard with Azure to make it a first-class cloud platform for Linux based applications, and shared how more than 20% of all VMs running on Azure are Linux based.  In fact, we now have 5 different Linux distributions officially supported for use on Azure – with full integration within our management portal and command-line extensibility.

Bringing Core .NET to Linux and OS X

Today I’m excited to announce the .NET side of our Linux support.  In addition to making the .NET server stack open-source, we are also going to release an official distribution of the .NET Core for Linux, as well as an official distribution of .NET Core for the Mac operation system as well.

This will enable you to build .NET server and cloud applications and run them on both Windows Server and Linux.  It is going to enable every developer – regardless of what operating system they use to develop or target – to use .NET. And to do so on a fully open source runtime.

We will be working closely with the Mono community as we complete our Linux port.  The Mono community have done a great job advancing .NET and Linux over the last decade.  Releasing the .NET Core source under an open source license is going to enable us to collaborate together much more closely going forward.  There are many Linux enhancements Mono has built that we would like to use, and likewise there are improvements Mono will be able to benefit from by being able to use the .NET source code.  Today’s set of announcements are a big win for everyone. Announcing Visual Studio Community Edition

I’m also excited to announce that we are launching a new free edition of Visual Studio today that will empower even more developers to build great apps and solutions.

The new Visual Studio Community 2013 edition is a full-featured IDE.  It supports multiple project types in one solution file in a single IDE, and has all of the productivity features and IDE extensibility capabilities (meaning you can use Xamarin, ReSharper, VsVim, and any other VSIX extension) that developers love in Visual Studio.

It is now available completely free for:

  • Any individual developer working on a commercial or non-commercial project
  • Any developer contributing to an open source project
  • Anyone in an academic research or course setting (e.g. students, teachers, classroom, online course)
  • Any non-enterprise organization with 5 or fewer developers working on a commercial/non-commercial project together

We are making it available for download starting today, and developers can download and start using it immediately.  There is no program you need to join to use it – simply visit www.visualstudio.com, click the download button, and you are good to go. 

It is going to enable even more developers to take advantage of Visual Studio and build even better applications.  We are looking forward to seeing what you build with it. Summary

It has never been a better time to be a software developer.  Software is what enables organizations to succeed in today’s digital environment.  It is what enables businesses to connect better with customers, to deliver amazing new experiences, to drive new revenue streams, and to run operations more efficiently.

Using the cloud, every software developer on the planet can now create and build solutions that can reach millions of users, with no upfront costs, powered by a cloud infrastructure that delivers completely global reach.  The impact an individual developer can now have has never been greater than it is today.

Our goal at Microsoft is to provide developers with the platform and tools that will make them incredibly successful.  It is a mission we have had since the very beginning of the company.  Today’s .NET open source, cross platform, and Visual Studio Community edition announcements will enable the development technology we build to be leveraged by an even wider range of developers.  We are really excited to see some of the new apps and solutions that are built with it.

In addition to the above announcements, we are also announcing and demoing tons of new features and services for the first time at our Connect() event streamed from New York.  You can watch the online presentations here.  Also read Soma’s blog post for a summary of some of the new VS 2015 and .NET 5 capabilities we announced this week.

Hope this helps,

Scott

P.S. In addition to blogging, I am also now using Twitter for quick updates and to share links. Follow me at: @scottgu omni

Categories: Architecture, Programming

7 Articles On Risk Management in Software Development

From the Editor of Methods & Tools - Wed, 11/12/2014 - 16:20
While starting a new software development project creates some enthusiasm, the engineer part of the software developer and project manager will also see this event as a set of possible risks. These risks encompass many domains: business, project team, software architecture, technology… Besides being aware of the possible impediments to the project success, risk management is also used to make choices in the product and technology roadmaps and manage priorities when resources are limited. Here is a list of interesting articles that discusses approaches to risk in software development. Risk Management ...

Online training now available via Parleys

Coding the Architecture - Simon Brown - Wed, 11/12/2014 - 13:43

As announced during the opening keynote at Devoxx Belgium this morning, I'm delighted to say that Software Architecture for Developers is now available as an online/video training course via Parleys.

Parleys

Parleys

The online course includes the same content as the regular on-site 2-day version, with the exception of the hands-on software design and sketching exercises. From the course overview page...

A lightweight approach to software architecture is pivotal to successfully delivering software, and it can complement agile approaches rather than compete against them. After all, a good architecture enables agility and this doesn't happen by magic. "Software Architecture for Developers" is a practical and pragmatic guide to lightweight software architecture. You'll learn:


  • The essence of software architecture.
  • Why the software architecture role should include coding, coaching and collaboration.
  • The things that you *really* need to think about before coding.
  • How to visualise your software architecture using simple sketches.
  • A lightweight approach to documenting your software.
  • Why there is *no* conflict between agile and architecture.
  • What "just enough" up front design means.
  • How to identify risks with risk-storming.

I'm excited to be working with Parleys on this and I think they have an amazing platform for delivering online training. If you're thinking about creating an online course, I recommend taking a look at Parleys. The tooling behind the scenes used to put the course together is incredible. Many thanks to Carlo Waelens and the Parleys team for everything over the past few months - I hope this is the start of something big for you.

Categories: Architecture

Tactics for Combating the Downside of Hyper-connectivity

The genie of hyper-connectivity is not going to go back in the bottle, and moving to a mountain deep in the woods is not a career enhancing solution (unless you are writing a novel).

The genie of hyper-connectivity is not going to go back in the bottle, and moving to a mountain deep in the woods is not a career enhancing solution (unless you are writing a novel).

All the activity that is generated in a hyper-connected world can lead to the illusion of progress, to an illusion of importance and to force ineffective multitasking. Trying to put the genie totally back in the bottle would be difficult at best, since hyper-connectivity can be useful in the right circumstances. Measured steps can be used temper the some of the more problematic attributes of hyper-connectivity.

  1. Electronics free meetings. Specify some meetings as laptop and cell phone closed. Remove the potential distraction of the texting, email and other work by using the nuclear option. Recently I participated in a meeting that had a diverse set of participants most with different cultures and first languages. All of the participants were asked to close their laptops. Participation in the group increased even though one or two “members” were very reticent. While there were exceptions for long meetings, such as more frequent break to check in with the electronic masters or allowing the person with a kid at home sick to have an exemption, cutting the cord in meetings seems to have merits. In response to the article Hyper-connectivity and The Illusion of Progress, Chris noted:

I’ve been saying (and promoting) this for years as well. In a previous role, with Software Configuration Management, Build & Release, and QA Engineers reporting to me, I mandated that our weekly, short, team meetings were spend untethered to smart phones and laptops, except for the person charged with taking team notes. Very effective!

  1. Twenty minute sprints. Turn off the connections (think airplane mode) for twenty minutes. At the end of the twenty minute period turn them back on, open Outlook and read/respond for 5 – 10 minutes then repeat. I will admit that I am a connectivity addict, but this has become one of my favorite techniques to reduce connectivity distractions. I have settled on the twenty-minute rule because the time frame is long enough that I can get real work done and short enough not induce panic from being cut off. Note, I have modified the rule to allow going to the internet to look up a fact or to find a synonym (if I am not in my office with a paper thesaurus). The sprint technique has been used at more macro level in some organizations with days without email or meetings.
  2. Don’t reply to emails after hours. Compartmentalize your work and home lives when possible. Some companies such as the Volkswagen, Puma and BMW have tried this technique in an attempt to reduce the burnout hyper-connectivity can generate. I have not found any data to suggest the technique has been effective and obviously there are a few issues that are critical enough to require a response (FYI . . . I suggest picking up the phone and calling someone in those circumstances). This technique help create separation between home and work life and slow down the the expectation of immediate actions and responses.  .
  3. The Two-Email Rule. If a discussion or issue spans two emails or text messages, call the person or persons involved in the discussion and talk. I personally have begun to try to implement this rule and have found it very effective in reducing text or emails being volleyed back and forth without resolving anything. When emails are being volleyed back and forth it seems like the progress is measured by passing the issue on rather than resolving it. The biggest issue I have found is that in some circumstances people are using the volley technique to avoid having difficult conversations.

The genie of hyper-connectivity is not going to go back in the bottle, and moving to a mountain deep in the woods is not a career enhancing solution (unless you are writing a novel). There are a number of techniques that can create an oasis in the communication storm. You can practice some of these  techniques individually and change your own behavior.  When you are working on a team, change will require a vision of the future and leadership to make even incremental changes to how work is done by the team.


Categories: Process Management

Episode 214: Grant Ingersoll on his book, Taming Text

Grant Ingersoll, founder and CTO of LucidWorks, talks with Tobias Kaatz about his book Taming Text: How to Find, Organize, and Manipulate It. They begin by discussing popular existing systems for the automated understanding of contextual information. One such system, IBM Watson, drew attention for its victory in the “Jeopardy” game show. They proceed to […]
Categories: Programming

My Offer to Book Resellers

NOOP.NL - Jurgen Appelo - Tue, 11/11/2014 - 18:48
cover-mockup 2

There are two great aspects to people complaining about the shipping fees of my book:

It shows that readers care. They want the book! Even the 15,000 people who already downloaded the free PDF. Within three days, I sold XXX copies of the #Workout book from the Management 3.0 web shop. Imagine how much more people we can reach when we slash distribution costs?

Already several people asked me if they can resell the book locally, which will cut shipping fees dramatically. The answer is: Yes, please! The less I have to do, the better. My goal is to be a writer, not a distributor.

The post My Offer to Book Resellers appeared first on NOOP.NL.

Categories: Project Management

Sponsored Post: Apple, Asana, Hypertable, Sprout Social, Scalyr, FoundationDB, AiScaler, Aerospike, AppDynamics, ManageEngine, Site24x7

Who's Hiring?
  • Apple has multiple openings. Changing the world is all in a day's work at Apple. Imagine what you could do here. 
    • Sr. Software Developer. We are looking for a solid senior-level Java/C programmer who will be working on security software development. This software will provide the data protection, integrity, and service authentication services for iOS devices. Please apply here.
    • DevOps Software Engineer - Apple Pay, iOS Systems.  The iOS Systems team is looking for an outstanding DevOps software engineer to help make our rapidly growing platform manageable, scalable, and reliable using state of the art technologies and cutting edge system automation. Come join the team to strategize, architect, and build infrastructure to help our systems perform and scale. Please apply here
    • Sr. Software Engineer-iOS Systems. Do you love building highly scalable, distributed web applications? Does the idea of performance tuning Java applications make your heart leap? Would you like to work in a fast-paced environment where your technical abilities will be challenged on a day to day basis? Do you want your work to make a difference in the lives of millions of people? Please apply here.
    • Apple Pay - Site Reliability Engineer. You already know this… every issue counts. A single ticket can be the key to discovering an issue impacting thousands of people. And now that you’ve found it, you can’t wait to fix it. You also know that owning the quality of an application is about separating the signal from the noise. Finding that signal is what motives you. Now that you’ve found it, you’re next step is to role up the sleeves and start coding. As a member of the Apple Pay SRE team, you’re expected to not just find the issues, but to write code and fix them. Please apply here.
    • Senior Software Engineer -iOS Systems. This role demands the best and brightest engineers. The ideal candidate will be well rounded and offer a diverse skill set that aligns with key qualifications. Practical experience integrating with a diverse set of third-party APIs will also serve to distinguish you from other candidates. This is a highly cross functional role, and the typical team member's day to day responsibilities on the Carrier Services team. Please apply here

  • As a production-focused infrastructure engineer at Asana, you’ll be the  person who takes the lead on setting and achieving our stability and uptime  goals, architecting the production stack, defining the on-call experience, the  build process, cluster management, monitoring and alerting. Please apply  here.

  • Platform Software Engineer, Sprout Social, builds world-class social media management software designed and built for performance, scale, reliability and product agility. We pick the right tool for the job while being pragmatic and scrappy. Services are built in Python and Java using technologies like Cassandra and Hadoop, HBase and Redis, Storm and Finagle. At the moment we’re staring down a rapidly growing 20TB Hadoop cluster and about the same amount stored in MySQL and Cassandra. We have a lot of data and we want people hungry to work at scale. Apply here.

  • UI EngineerAppDynamics, founded in 2008 and lead by proven innovators, is looking for a passionate UI Engineer to design, architect, and develop our their user interface using the latest web and mobile technologies. Make the impossible possible and the hard easy. Apply here.

  • Software Engineer - Infrastructure & Big DataAppDynamics, leader in next generation solutions for managing modern, distributed, and extremely complex applications residing in both the cloud and the data center, is looking for a Software Engineers (All-Levels) to design and develop scalable software written in Java and MySQL for backend component of software that manages application architectures. Apply here.
Fun and Informative Events
  • Sign Up for New Aerospike Training Courses.  Aerospike now offers two certified training courses; Aerospike for Developers and Aerospike for Administrators & Operators, to help you get the most out of your deployment.  Find a training course near you. http://www.aerospike.com/aerospike-training/
Cool Products and Services
  • Hypertable Inc. Announces New UpTime Support Subscription Packages. The developer of Hypertable, an open-source, high-performance, massively scalable database, announces three new UpTime support subscription packages – Premium 24/7, Enterprise 24/7 and Basic. 24/7/365 support packages start at just $1995 per month for a ten node cluster -- $49.95 per machine, per month thereafter. For more information visit us on the Web at http://www.hypertable.com/. Connect with Hypertable: @hypertable--Blog.

  • FoundationDB launches SQL Layer. SQL Layer is an ANSI SQL engine that stores its data in the FoundationDB Key-Value Store, inheriting its exceptional properties like automatic fault tolerance and scalability. It is best suited for operational (OLTP) applications with high concurrency. Users of the Key Value store will have free access to SQL Layer. SQL Layer is also open source, you can get started with it on GitHub as well.

  • Diagnose server issues from a single tab. The Scalyr log management tool replaces all your monitoring and analysis services with one, so you can pinpoint and resolve issues without juggling multiple tools and tabs. It's a universal tool for visibility into your production systems. Log aggregation, server metrics, monitoring, alerting, dashboards, and more. Not just “hosted grep” or “hosted graphs,” but enterprise-grade functionality with sane pricing and insane performance. Trusted by in-the-know companies like Codecademy – try it free!

  • aiScaler, aiProtect, aiMobile Application Delivery Controller with integrated Dynamic Site Acceleration, Denial of Service Protection and Mobile Content Management. Cloud deployable. Free instant trial, no sign-up required.  http://aiscaler.com/

  • ManageEngine Applications Manager : Monitor physical, virtual and Cloud Applications.

  • www.site24x7.com : Monitor End User Experience from a global monitoring network.

If any of these items interest you there's a full description of each sponsor below. Please click to read more...

Categories: Architecture

Veterans Day

Herding Cats - Glen Alleman - Tue, 11/11/2014 - 17:04

Veterans-day-2009

Categories: Project Management

BA Advice Column

Software Requirements Blog - Seilevel.com - Tue, 11/11/2014 - 17:00
Have a knotty problem at work? Need help navigating the treacherous waters of a crazy project? Just ask Betty the Business Analyst! She’s here to drop some wisdom on you for the asking. ——————– Dear Betty, I was sitting in a meeting today when my stakeholder started swearing quietly, in French. What should I have […]
Categories: Requirements

How Leaders are Building Digital Skills

Cloud, mobile, social, and big data are changing the game of business.

But to play the game well, leaders need to grow new skills.

In order to create new customer experiences and market-leading operational capabilities, leaders need to invest in digital skills.

Our Cloud-First, Mobile-First world provides unprecedented possibilities in terms of connectivity and compute resources for changing customer experiences, transforming the workforce, and transforming operations, and creating new business models.   Companies every day are building amazing solutions that integrate Cloud, Mobile, Social, and Big Data capabilities as well as what the Internet of Things brings to the table.   But to take advantage of these capabilities, you need leaders that grow and invest in a digital platform and in digital skills.

In the book, Leading Digital: Turning Technology into Business Transformation, George Westerman, Didier Bonnet, and Andrew McAfee, share how top leaders grow their digital skills.

Creating Great Customer Experiences Requires New Skills and New Ways of Working

Whether you want to reimagine your customer experience, or reimagine your operations, it takes new skills, and new ways of working.   Companies that don’t have the right digital skills struggle.   Worse, everybody is competing for the same skills, including social media analysts, mobile marketers, cloud architects, and data scientists.

Via Leading Digital:

“Creating great customer experiences or market-leading operational capabilities is more than technology challenge.  It's also an organizational challenge requiring new skills and new ways of working.  Yet, 77 percent of companies in our first year of research cited missing digital skills as a major hurdle to their digital transformation success. To compound the problem, most companies are chasing after similar skills--social media analysts, mobile marketers, cloud architects, or data scientists, to name a few.”

How Digital Masters are Building Skills

If you want to help your company become a Digital Master, or, if you want to be a high-performing leader, you need to invest in digital skills.  

Via Leading Digital:

“So what are Digital Masters doing differently when it comes to skills? First, they are investing.  Of the Digital Masters we surveyed, 82 percent are building the digital skills they need to support transformation efforts.  Only 40 perce3nt of nonmasters are doing so.

Second, Digital Masters are accelerating and creating  a gap.  Our survey research shows that the masters had greater digital skills than nonmasters, reporting 31 percent higher social media skills, 38 percent higher mobile skills, and 19 percent higher analytics skills.

But Digital Masters did not start with higher skills.  Burberry did not become excellent at digital marketing. and channels overnight.  CEO Ahrendts hired a new, dynamic marketing team whose members mirrored the behaviors of the millennial customer.  Nor did Caesars excel at delivering personalized customer experience solely because its CEO, Gary Loveman, has a PhD in economics from MIT. Caesars' executives actively incorporated quantitative skills into the marketing area.  In these companies, like other Digital Masters, top executives worked hard to build the digital skills they needed.”

The Line Between Technical Skills and Leadership Skills is Blurring Fast

The gap is huge but the lines blur fast.  There is a huge demand for people that are both business savvy and technology savvy.

Via Leading Digital:

“The skills difference extends beyond technology.  Digital Masters report 36 percent higher skills in digital leadership than nonmasters. Digital transformation requires changes to processes and thinking--changes that span your internal organizational silos.  'The clear delineation between technical skills and leadership skills in blurring fast.

The impact of digital technologies is now felt not only in the IT and technical departments, but also across the entire organization.  Digital transformation's need for cross-functional collaboration creates a huge demand for hybrid digital skills-- technical people who need to be more business savvy and businesspeople who need to be more technology savvy.  A retail executive explained: 'We are trying for the first time to work across the company.  That implies going through a new level of complexity in the organization, and requires people to manage and network differently.  That, I think, is the most important skills that needs to be developed.'”

Successful Leaders Will Have Business and Technical Skills

True hybrid professionals will be the leaders of tomorrow.

Via Leading Digital:

“The need for new skills can also result from the need to bridge the communication gap between digital and business competences.  One executive said, 'I need a charismatic quant--somebody who's an influencer and can carry his weight in a senior meeting, but at the same time, someone who can roll up his sleeves and look at data tables and build models and enjoy it.'

These bridging roles may soon become the responsibility of every manager. 'I believe,' said Markus Nordlin, CIO of Zurich Insurance, 'that the successful leaders of tomorrow, in any business or industry, are going to be true hybrid professionals who have spent some time in IT but have shifted to operations and vice-versa.'”

Digital Skills Create Competitive Advantage and Enable Digital Transformation

To keep up and get ahead, you need to master Digital Skills and be able to use them in a business savvy way.

Via Leading Digital:

“Aspiring Digital Masters are all chasing the same technical skills.  The shortage of digital skills is unprecedented.  In Europe alone, forecasts point to nearly a million vacancies for IT-related roles by 2015.  And globally, out of the 4.4 million big-data jobs to be created by 2015, only a third will be filled.

But by the same token, business professionals will increasingly need to be comfortable with digital tools and technologies to perform their core roles.  By 2015, research firm IDC expects that 90 percent of all jobs will require IT skills.  Some business functions are already adding technology skills to their mix.  Gartner reports that 70 percent of the companies they surveyed have a chief marketing technologist to support the digitization of the function.

This skills race won't slow down anytime soon.  Having the right digital skills is an important source of competitive advantage and a key enabler of digital transformation.  Companies that build skills faster will get ahead.

To win at the digital skills race, you will need to tap into multiple approaches--hiring, partnering, incubating, and the like.  It's not easy, as one executive explained: 'Our recruiters don't know where to go to find these people, and people with the right skills don't look to our kind of company for opportunities.'  HR organization will need to get up to speed quickly.  A recent Capgemini Consulting survey found that only 30 percent of HR functions were actively involved in digital skills development.  This needs to change.  Many Digital Masters have a carefully crafted plan to fight and win the talent race.”

All of the capabilities of Cloud, Mobile, Social, and Big Data are right at your fingertips.

Using these capabilities in meaningful ways takes a combination of business and technical skills, as well as great organizational change leadership skills.

If you can master business skills and combine them with great technical skills, you can lead you, your team, your organization, and others to change the world.

You Might Also Like

10 High-Value Activities in the Enterprise

Cloud Changes the Game from Deployment to Adoption

Drive Business Transformation by Reenvisioning Operations

Drive Business Transformation by Reenvisioning Your Customer Experience

Dual-Speed IT Drives Business Transformation and Improves IT-Business Relationships

How To Improve the IT-Business Relationship

Management Innovation is at the Top of the Innovation Stack

Categories: Architecture, Programming

The neverending waveform of the full-stack developer

Xebia Blog - Tue, 11/11/2014 - 16:50

There was an article on Techcrunch a couple days ago which was linked in our internal mailing list the other day, titled The Rise And Fall Of The Full Stack Developer. I read it, and I just couldn't figure out why the title is about "the fall" of the full-stack developer (and I said as much on the mailing list, after which I was encouraged to write this blog post). In this post I'll try and explain why it's not the end, but just a stage in a recurring cycle

What I read was a waveform - the article describes that first you had low-level assembly, which is specialised but still pretty straightforward since it's just one platform and language. Then things started to get more complicated, with the larger web applications involving lots of experts in various fields (Java, database management, server and JVM management, to name a few from the article).

In or around 2005, there was a bit of a revolution going on. Internet access (and high-speed internet for that matter) became accessible to all, and with it, cheap webhosting - most notably, there was a boom in PHP development. What the article highlights is that that was an era where single or small teams of developers could build a web application from scratch, without needing to lug around all of that expert knowledge - effectively, a full-stack developer (storage, webhosting, a programming language (PHP, Python, Ruby, etc), HTML, CSS, Javascript, the whole stack).

But, as the article states, that isn't the full stack of today - added to that are things like machine learning, mobile development, more advanced and less traditional programming languages, frameworks and persistence solutions, etcetera. The conclusion of the author is that it's too much for one full-stack developer to take, that there's no way a full-stack developer can be an expert in all of those fields - and he basically renames the person that knows a bit of all of those technologies a full-stack integrator, and declares the full-stack developer dead.

But I didn't see that. What I saw was just history repeating - from simple and manageable, to complex and too much for one person to handle and know all about. From assembly and PHP, to Java enterprise software and Docker-contained AWS instances running a MongoDB and Scala REST interface to power your Android, iOS and single-page AngularJS-powered webapps (to name but a few buzzwords).

I'm sure the next 'simple' wave is already around the corner - maybe it's already here, lurking somewhere until some more influential guy goes "Hey guys, let's go back to the simpler, good old times where you wrote code and it Just Worked™!", where a wave of developer will follow - most likely a combination of younger people, new to the software development world, and older people that have been stuck in an overly complicated software development rut for far too long.

As for not being able to keep up with it all, this is why it's probably better to assemble teams out of T-shaped developers - full-stack developers with a broad knowledge set (and more importantly, broad interests and curiosity), but with at least one specialisation. This was extended within Xebia to pi-shaped developers, then made extreme to comb-shaped developers, but the latter is just a generalist like mentioned in the article - a jack of all trades, master of none. And it's important to realise, as a developer, that it's OK to not know everything, to miss some update, to not learn that fancy new programming language by people disgruntled by Java's slow development - there's simply too much information updates today, and trying to manage it all in the extremest forms can lead to serious problems. But the rapid development is a good thing, I might add, I don't think the software development world has ever moved as fast as it does today, and it's not nearly the end yet as long as more than half of the world's population doesn't have access to the internet and its boundless resources.

I think increasing complexity is just part of software development. I mean look at Facebook and Twitter - they were started using those simple, accessible tools like PHP and Ruby on Rails, which allowed them to get a flying start and adapt quickly to their huge growth (and with the former desperately clinging to their decision, despite lots of people telling them they should use a different technology), but despite that they still turned into some of the most complicated pieces of software ever. The important bit is to be able to manage all that, not so much a decision between a simple or complicated toolset - or having all of your developers know everything. Similarly, the current trend is microservices - again back to simple, one-purpose miniature applications that do one thing and do them right. But those will just end up being the next generation of huge, complicated software systems, given enough time. As a colleague stated, "Microservices are just hipster SOA".

As the saying goes, the more things change, the more they stay the same. The full-stack developer isn't dead and won't be going away any time soon, he'll just go by a different name depending on the times - J2EE Certified Software Engineer, full-stack developer, multidisciplinary expert, T-shaped developer, Xebian, chief of technology evangelisation, or whatever else the HR or marketing departments of the near future will come up with.

Agile Needs to Be Both Iterative and Incremental

Mike Cohn's Blog - Tue, 11/11/2014 - 15:00

The following was originally published in Mike Cohn's monthly newsletter. If you like what you're reading, sign up to have this content delivered to your inbox weeks before it's posted on the blog, here.

Scrum, like all of the agile processes, is both iterative and incremental. Since these words are used so frequently without definition, let’s define them.

An iterative process is one that makes progress through successive refinement. A development team takes a first cut at a system, knowing it is incomplete or weak in some (perhaps many) areas. The team then iteratively refines those areas until the product is satisfactory. With each iteration, the software is improved through the addition of greater detail.

For example, in a first iteration, a search screen might be coded to support only the simplest type of search. The second iteration might add additional search criteria. Finally, a third iteration may add error handling.

A good analogy is sculpting. First, the sculptor selects a stone of the appropriate size. Next, the sculptor carves the general shape from the stone. At this point, one can perhaps distinguish the head and torso, and discern that the finished work will be of a human body rather than a bird. Next, the sculptor refines her work by adding detail. However, the sculptor is unlikely to look on any one area as complete until the entire work is complete.

An incremental process is one in which software is built and delivered in pieces. Each piece, or increment, represents a complete subset of functionality. The increment may be either small or large, perhaps ranging from just a system’s login screen on the small end, to a highly flexible set of data management screens.

Each increment is fully coded and tested, and the common expectation is that the work of an iteration will not need to be revisited. An incremental sculptor would pick one part of her work and focus entirely on it until it’s finished. She may select small increments (first the nose, then the eyes, then the mouth, and so on) or large increments (head, torso, legs and then arms). However, regardless of the increment size, the incremental sculptor would attempt to finish the work of that increment as completely as possible.

Scrum and agile are both incremental and iterative. They are iterative in that they plan for the work of one iteration to be improved upon in subsequent iterations. They are incremental because completed work is delivered throughout the project.

To better illustrate the differences between iterative and incremental, let’s consider building a dating website iteratively but not incrementally. To do this, the team would build a little of every part of the site—profile management, searching, ads, etc. The team would then revisit all parts, improving each.

The team would then revisit all parts again, making further improvements. In this purely iterative way, the entire site is getting a little better.

Next, consider developing the same site with a purely incremental, but not iterative process. If a dating site were built incrementally, the team would build and perfect profile management before starting on any other part of the site. They would then build and perfect a second area, say searching, before moving onto the third area. Each functional area would be made perfect before the next area was started.

Neither iterative nor incremental is all that great alone. But together—as they are with Scrum—they are fantastic.

Agile Needs to Be Both Iterative and Incremental

Mike Cohn's Blog - Tue, 11/11/2014 - 15:00

The following was originally published in Mike Cohn's monthly newsletter. If you like what you're reading, sign up to have this content delivered to your inbox weeks before it's posted on the blog, here.

Scrum, like all of the agile processes, is both iterative and incremental. Since these words are used so frequently without definition, let’s define them.

An iterative process is one that makes progress through successive refinement. A development team takes a first cut at a system, knowing it is incomplete or weak in some (perhaps many) areas. The team then iteratively refines those areas until the product is satisfactory. With each iteration, the software is improved through the addition of greater detail.

For example, in a first iteration, a search screen might be coded to support only the simplest type of search. The second iteration might add additional search criteria. Finally, a third iteration may add error handling.

A good analogy is sculpting. First, the sculptor selects a stone of the appropriate size. Next, the sculptor carves the general shape from the stone. At this point, one can perhaps distinguish the head and torso, and discern that the finished work will be of a human body rather than a bird. Next, the sculptor refines her work by adding detail. However, the sculptor is unlikely to look on any one area as complete until the entire work is complete.

An incremental process is one in which software is built and delivered in pieces. Each piece, or increment, represents a complete subset of functionality. The increment may be either small or large, perhaps ranging from just a system’s login screen on the small end, to a highly flexible set of data management screens.

Each increment is fully coded and tested, and the common expectation is that the work of an iteration will not need to be revisited. An incremental sculptor would pick one part of her work and focus entirely on it until it’s finished. She may select small increments (first the nose, then the eyes, then the mouth, and so on) or large increments (head, torso, legs and then arms). However, regardless of the increment size, the incremental sculptor would attempt to finish the work of that increment as completely as possible.

Scrum and agile are both incremental and iterative. They are iterative in that they plan for the work of one iteration to be improved upon in subsequent iterations. They are incremental because completed work is delivered throughout the project.

To better illustrate the differences between iterative and incremental, let’s consider building a dating website iteratively but not incrementally. To do this, the team would build a little of every part of the site—profile management, searching, ads, etc. The team would then revisit all parts, improving each.

The team would then revisit all parts again, making further improvements. In this purely iterative way, the entire site is getting a little better.

Next, consider developing the same site with a purely incremental, but not iterative process. If a dating site were built incrementally, the team would build and perfect profile management before starting on any other part of the site. They would then build and perfect a second area, say searching, before moving onto the third area. Each functional area would be made perfect before the next area was started.

Neither iterative nor incremental is all that great alone. But together—as they are with Scrum—they are fantastic.

"I can get another if I break it": Announcing Noto Nastaliq Urdu

Google Code Blog - Tue, 11/11/2014 - 05:00
Today, we are excited to release an early version of Noto Nastaliq Urdu.

Nastaliq’s rich typographic tradition presents particular challenges to computerized typography. We’ve been working over a year to solve technical and design issues for an Urdu Nastaliq (aka Nastaleeq) font. This early version is by no means complete and perfect. We expect to work closely with the community to incorporate comments and suggestions.

This preview font can be downloaded from the Noto homepage or the Noto repository, and is also available as a webfont on Google Fonts Early Access.

This is a sample web page to showcase Noto Nastaliq Urdu as a webfont. Go ahead open it. If your browser renders it correctly, you will see something like this:


Text in the image is from a poem by Urdu poet Mirza Ghalib. It means “I can get another if I break it / so a clay cup trumps a grail.” This font can be challenging to the current generation of browsers and font renderers. It partially broke a few of them; we have been working with browser manufacturers to fix all those issues.

We are looking forward to your feedback and bug reports. Please contact us through https://code.google.com/p/noto/issues/entry. Known issues can be found here.

Posted by Behdad Esfahbod, Software Engineer, Fonts & Text Rendering, Google Internationalization Engineering
Categories: Programming

The Tablet Turning Point

Coding Horror - Jeff Atwood - Tue, 11/11/2014 - 02:36

Remember how people in the year 2000 used to say how crazy and ridiculous it was, the idea that Anyone Would Ever Run Photoshop in a Web Browser? I mean come on.

Oops.

One of my big bets with Discourse is that eventually, all computers will be tablets of varying size, with performance basically indistinguishable from a two year old desktop or laptop.

Apps are great and all, but there has to be some place for this year's bumper crop of obscene amount of computing superpower to go. I like to use history as my guide, and I believe it's going exactly the same place it did on desktops and laptops — that no-installing-anything friend of every lazy user on the planet, the inevitable path of least resistance, the mobile web browser.

For the last few years, I've been buying every significant tablet device in the run up to the big holiday sales season, and testing them all, to see how many years are left until mobile devices catch up to desktops on general web and JavaScript performance.

How are we doing? Let's benchmark some Discourse client-side Ember JavaScript code:

iPhone 4 June 2011 2031ms iPhone 5 Sept 2012 600ms iPhone 5s Sept 2013 300ms iPhone 6 Sept 2014 250ms iPad Air 2 Oct 2014 225ms

My Core i4770k desktop machine scores 180ms in the same benchmark on the latest version of Chrome x64. I'd say we're solidly within striking distance this year.

I don't like to spend a lot of time talking about news and gadgets here, since the commentary will be irrelevant within a few years. But this year marks a key turning point for mobile and tablet performance, and I've lived with every iteration of these devices for the last couple of years, so I'll make an exception.

Look at this performance rampage the iPad Air 2 goes on:

Just look at it! All the graphs are like this!

It's hard to believe we now live in a world where the Apple "Premium" is no longer about aesthetics, but raw, unbridled, class-leading performance. And you know what? That's something I can totally get behind.

Anyone who tells you the iPad Air 2 is some kind of incremental update must not actually use theirs. As someone who does regularly use his iPad, I can say without hesitation that this is a massively upgraded device. I grew to hate my old iPad Air because of the memory restrictions; I could barely have three tabs open in Mobile Safari without one of them paging out of memory. Thanks x64 and iOS7!

The bonded screen, touchid, the now-adequate-for-x64 2GB of RAM, the amazingly fast triple core CPU, the GPU, and yeah, it's a little thinner. For performance, nothing else even comes close.

It's so fast I sometimes forget I'm not using my Surface Pro 3 with its 4GB RAM and Core i5 CPU. I get hassled when I bring my Surface to meetings, but I patiently explain that it's a very nice third gen hardware design with a fully integrated keyboard cover, IE11 is a great touch browser, and that I'm mostly using the device as a tablet, as a sneak preview of what iPad 8 performance will look like. Based on today's benchmarks with the iPad Air 2 – chronologically, the iPad "6" – I believe that's about right.

I also purchased a Nexus 9. It's the first device to ship with Android 5 and the vaunted Nvidia Tegra K1.

I'm very impressed with Android 5.0; aesthetically I think it's superior to iOS 8 in a lot of ways, and it is a clear step forward over Android 4. Anyone on older Android devices should definitely upgrade to Android 5 at their first opportunity.

Performance-wise, it is what I've come to expect from Android: erratic. In our Discourse benchmarks, and the latest version of Chrome Android beta, it scores about 750ms, putting it somewhere between the 2011 iPhone 4s and the 2012 iPhone 5. That said, this is the fastest Android device I have ever laid hands on. I just wish it was consistently faster. A lot faster.

To that end, I'd like to ask for your help. We've identified some deep bugs in the Android Chrome V8 engine that cause fairly severe performance issues with JavaScript frameworks like Angular and Ember. (Desktop Chrome performance remains class leading; this is highly specific to the Android version of Chrome.) If you know anyone at Google, please ping them about this and see if it can be escalated. I'd love it if more Android users – including me – could have a better browser experience when using large JavaScript apps.

I hope over the next year the remaining Android 5 performance bumps can be ironed out. I still like the Nexus 9; if you're a big fan of Google services like GMail, Docs, and Maps like I am, I definitely recommend it. The one I have will be a gift to my mom.

[advertisement] How are you showing off your awesome? Create a Stack Overflow Careers profile and show off all of your hard work from Stack Overflow, Github, and virtually every other coding site. Who knows, you might even get recruited for a great new position!
Categories: Programming

R: dplyr – Sum for group_by multiple columns

Mark Needham - Tue, 11/11/2014 - 01:17

Over the weekend I was playing around with dplyr and had the following data frame grouped by both columns:

> library(dplyr)
 
> data = data.frame(
    letter = sample(LETTERS, 50000, replace = TRUE),
    number = sample (1:10, 50000, replace = TRUE)
    )
 
> data %>% count(letter, number) %>% head(20)
Source: local data frame [20 x 3]
Groups: letter
 
   letter number   n
1       A      1 184
2       A      2 192
3       A      3 183
4       A      4 193
5       A      5 214
6       A      6 172
7       A      7 196
8       A      8 198
9       A      9 174
10      A     10 196
11      B      1 212
12      B      2 198
13      B      3 194
14      B      4 181
15      B      5 203
16      B      6 234
17      B      7 221
18      B      8 179
19      B      9 182
20      B     10 170

I wanted to add an extra column which would show what percentage of the values for that letter each number had.

If we wrote that code standalone we’d have the following:

> data %>% count(letter)
Source: local data frame [26 x 2]
 
   letter    n
1       A 1902
2       B 1974
3       C 1911
4       D 1948
5       E 1888
6       F 1975
7       G 1914
8       H 1886
9       I 1910
10      J 1924
11      K 1974
12      L 1891
13      M 1894
14      N 1946
15      O 1956
16      P 1934
17      Q 1865
18      R 1992
19      S 1946
20      T 1854
21      U 1919
22      V 1913
23      W 1928
24      X 1934
25      Y 1908
26      Z 1914

We can also get that value by summing up the individual (letter, number) pairs from the previous data frame. The ungroup function allows us to do so:

> data %>% count(letter, number) %>% ungroup %>% group_by(letter) %>% mutate(sum.n = sum(n)) %>% head(20)
Source: local data frame [20 x 4]
Groups: letter
 
   letter number   n sum.n
1       A      1 184  1902
2       A      2 192  1902
3       A      3 183  1902
4       A      4 193  1902
5       A      5 214  1902
6       A      6 172  1902
7       A      7 196  1902
8       A      8 198  1902
9       A      9 174  1902
10      A     10 196  1902
11      B      1 212  1974
12      B      2 198  1974
13      B      3 194  1974
14      B      4 181  1974
15      B      5 203  1974
16      B      6 234  1974
17      B      7 221  1974
18      B      8 179  1974
19      B      9 182  1974
20      B     10 170  1974

Pretty neat!

Categories: Programming

Hyper-connectivity and The Illusion of Progress

3524125987_298260aede_b

I recently attended a meeting and after about ten minutes I was brought up short.  Everyone was paying attention; not one laptop was open nor was anyone reading an email or text under the table.  People were taking notes “old school way”— on paper. The meeting ended on time after 25 minutes, meeting the objective and with the promise of meeting minutes.  I was shocked by the efficiency and effectiveness, and as a result I lingered after the meeting to discuss my observations with my sponsor.

Why is the more typical behavior to be tethered to multiple devices while juggling several projects or tasks? It is more than just a new corporate culture; rather our need for connectedness is based not just on how we see each other, but on how we see ourselves.  Our behavior is grounded in a combination of interlocking facts, self-knowledge and illusion. The keystone illusion that drives this need for hyper-connectedness is the illusion of control. The Illusion of control that we embrace allows us to believe we can script our progress through our career and that we can understand and predict the future like some sort of omnipotent being. In order to build that illusion of control we need build on three basic separate and distinct illusions. Each of these illusions is self-reinforcing.

Returning to my “old school” example, my sponsor indicated that recently meetings at her company were a mirror of many other organizations, lots of hardware and lots of miscommunication. The straw that broke the camel’s back was a senior management session where the CIO was asked the same question twice in less than five minutes.  The CIO levied a $50 fine for an open laptop that is not being used for the projector or the use of a cell during one of his meetings.  Extreme?  Even without the fine, the behavior change filtered through the organization. My sponsor indicated that the meetings had become shorter, as a result, and more effective and happened less frequently.

Passing aside what, without measurement, might be just the party line, why is this an important discussion?  Because once upon a time answering email during a meeting would have been viewed as rude. None of this would make any difference if there weren’t consequences. The whole hyper-connectedness, which has permeated even our most private spaces, causes us to spread our attention, our greatest asset, too thinly. Fractional attention makes you think that we’re progressing; it makes us think that we are important; it makes us think that we can multitask. In reality, fractional attention means that we actually get less done. The three illusions that are required to support the illusion of control are the illusion of progress, the illusion of multitasking and the illusion of importance.  Each of this can be issues in their own right, but together they shape how we behave.

First, the illusion of progress
Focusing on activities such as starting many tasks, participating in many projects or simply texting and answering emails while pretending to listen at a meeting gives an illusion of making progress. The thought is that we can switch in between these activities when we get downtime so that we can perfectly fill our day and be highly effective and efficient.  In reality, we are masking issues by confusing being busy with effective progress.

Second, the illusion of multitasking
In past essays I have dealt with this topic. We don’t multitask; we fast switch. Additionally, lean theory tells us that trying to split our attention between multiple tasks increases the possibility of doing none of them well.  In the work place, true multitasking is rare.  The data shows that generally humans are not really very good at true multitasking in the workplace. Linda Stone noted in the Huffington Post that people tend to stop breathing while they answer email. She even named the malady email apnea. If you need more examples just reflect on the data concerning cell phone usage and driving. Or if data doesn’t work for you, then try writing code while answering emails. Computers, on the other hand, are really good at multitasking and no matter the number of processors we have on our desktop we have not crossed that chasm to become full cyborgs yet . . . or perhaps that will be the outcome of hyper-connectedness.

Last, the illusion of importance
Hyper-connectivity has both positive and negative traits.  It allows us to connect with people and teammates across the globe, a positive except losing a few hours of sleep here or there. Advocates argue that this promotes greater collaboration and facilitates the sharing of ideas.

But it has a darker side in that it can lead us down deep rabbit holes through the implied urgency that each new message creates.  It can also make small issues appear larger and more influential than they really are which again demands our attention.

In a recent talk at Ted, Sherry Turkle stated that hyper-connectivity, with the problems it creates, has become more pervasive than just in a few meetings.

People text or do email during corporate board meetings. They text and shop and go on Facebook during presentations People talk to me about the important new skill of making eye contact while you’re texting.  People explain to me that it’s hard, but that it can be done. Parents text and do email at breakfast and at dinner while their children complain about not having their parents’ full attention. But then these same children deny each other their full attention.

Our electronic tools have been presented to us with the promise of delivering an ability to more closely integrate networks so that tasks, issues, changes, gossip and noise never fall through the cracks.   Content is always available. How many of you sleep with your smart phones next to the bed (or closer) just in case something you need to know happens during the night. Frankly, few of us are that important. However, instant and indiscriminate communication provides an illusion of importance, which reinforces the need to share information as well as to seek it. The act of constant foraging for data makes it difficult to focus on the speaker in a meeting or even responding to an important text message.

 


Categories: Process Management

R: dplyr – Maximum value row in each group

Mark Needham - Mon, 11/10/2014 - 23:06

In my continued work with R’s dplyr I wanted to be able to group a data frame by some columns and then find the maximum value for each group.

We’ll continue with my favourite dummy data set:

> library(dplyr)
 
> data = data.frame(
    letter = sample(LETTERS, 50000, replace = TRUE),
    number = sample (1:10, 50000, replace = TRUE)
    )

I started with the following code to count how many occurrences of each (letter, number) pair there were:

> data %>% count(letter, number)
Source: local data frame [260 x 3]
Groups: letter
 
   letter number   n
1       A      1 184
2       A      2 192
3       A      3 183
4       A      4 193
5       A      5 214
6       A      6 172
7       A      7 196
8       A      8 198
9       A      9 174
10      A     10 196
..    ...    ... ...

I wanted to find the top number for each letter and with a bit of help from Stack Overflow I ended up with the following:

> data %>% count(letter, number) %>% filter(n == max(n))
Source: local data frame [26 x 3]
Groups: letter
 
   letter number   n
1       A      5 214
2       B      6 234
3       C      8 213
4       D      6 211
5       E      9 208
6       F      2 219
7       G      1 213
8       H      2 208
9       I      9 220
10      J      7 213
11      K      3 228
12      L      2 206
13      M      3 212
14      N      4 222
15      O      1 211
16      P      7 211
17      Q      9 210
18      R      5 224
19      S      2 211
20      T      9 204
21      U      8 217
22      V      6 220
23      W      2 213
24      X      2 214
25      Y      3 211
26      Z      3 206

Here we’re filtering over a collection of rows grouped by letter and only selecting the row which has the max value. We can see more clearly what’s happening if we filter the data frame to only contain one letter:

> letterA = data %>% filter(letter == "A") %>% count(letter, number)
> letterA
Source: local data frame [10 x 3]
Groups: letter
 
   letter number   n
1       A      1 184
2       A      2 192
3       A      3 183
4       A      4 193
5       A      5 214
6       A      6 172
7       A      7 196
8       A      8 198
9       A      9 174
10      A     10 196

And now let’s apply the filter command while also printing out information about each row:

> letterA %>% filter(print(n), print(n == max(n)), n == max(n))
 [1] 184 192 183 193 214 172 196 198 174 196
 [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
Source: local data frame [1 x 3]
Groups: letter
 
  letter number   n
1      A      5 214

If instead of getting the top number by letter we wanted to get the top letter by number we just need to reorder the field names in the count method:

> data %>% count(number, letter) %>% filter(n == max(n))
Source: local data frame [10 x 3]
Groups: number
 
   number letter   n
1       1      G 213
2       2      F 219
3       3      K 228
4       4      N 222
5       5      R 224
6       6      B 234
7       7      B 221
8       8      U 217
9       9      I 220
10     10      O 209

And if we want to see the letter that shows up least frequently we can change the call to ‘max’ to an equivalent one to ‘min':

> data %>% count(number, letter) %>% filter(n == min(n))
Source: local data frame [11 x 3]
Groups: number
 
   number letter   n
1       1      H 166
2       2      O 160
3       3      E 156
4       4      R 169
5       5      L 169
6       6      I 164
7       7      H 170
8       7      I 170
9       8      Q 166
10      9      W 162
11     10      J 168
Categories: Programming

Progressive F# Tutorials London 2014

Phil Trelford's Array - Mon, 11/10/2014 - 22:36

Last week saw the fourth instalment of the annual Progressive F# Tutorials hosted at Skills Matter in London, with 8 sessions over 2 days and 2 tracks, to a full house.

2014 has been another exciting year in the F# community, with F# specific talks featuring heavily at major conferences, user groups popping up across the globe and F# sitting comfortably in the TIOBE top 20.

Day 1

Don Syme Jérémie Chassaing Scott Wlaschin Mark Seemann Mathias Brandewinder F# Panel

Don Syme kicked off the day with a keynote on The F# Way To Reconciliation.

Then on the advanced track Jérémie Chassaing introduced CQRS with F# (code samples). Meanwhile on the beginner track Scott Wlaschin introduced DDD and F# (slides).

Best conference lunch ever. Steak & Ale pie, mash & gravy! #ProgFSharp @ptrelford @skillsmatter

— Neil Cook (@cookstaar) November 6, 2014

In the afternoon Mathias Brandewinder lead the advanced track with Treasures, Traps and F#. While on the beginner track Mark Seemann introduced Outside-In TDD with F#.

After some beer and pizza, we rounded off the day with a panel of experts including Kit Eason, Mathias Brandewinder, Ross McKinlay, Rich Minerich and Eirik Tsarpalis.

Day 2

Paddy, Don & JérémieRobert PickeringAndrea Magnorsky

F# DinnerMichael NewtonSean & Tomas

In the morning Robert Pickering and Robin Neatherway introduced Xamarin and Cross Platform Apps (code samples). While Don Syme and Tomas Petricek guided us through Calling and Extending the F# Compiler (code samples).

The afternoon saw Andrea Magnorsky take us through Gaming with F#. At the same time Michael Newton covered Metaprogramming in F#.

On the train back from #progfsharp in London. So many new ideas to use #fsharp

— Thomas Jaskula (@tjaskula) November 7, 2014

F# Hackathon

The fun continued into Saturday with a return to Skills Matter for an F# Hackathon. I brought along my 8yo Sean who, with a little help from Tomas Petricek, managed to compose some 3D men in F# interactive:

Functional 3D Men

let cylinder = 
   Fun.translate (0.0, 0.0, -0.2)
    ( Fun.color Color.DarkGray Fun.cylinder $
      Fun.translate (0.0, 0.0, 0.5) 
         (Fun.scale (2.0, 2.0, 0.2) 
            (Fun.color Color.DarkGray Fun.cylinder)) ) 

let head = 
   Fun.translate (0.0, 0.0, 0.8) 
      (Fun.scale (1.2, 1.2, 1.2) 
         (Fun.color Color.PeachPuff Fun.sphere))

let body = 
   Fun.cube
   |> Fun.color Color.DarkGoldenrod
   |> Fun.scale (0.5, 1.5, 3.0)
   |> Fun.translate (0.0, 0.0, 3.0) 
   
let arm = 
 ( ( Fun.cylinder
     |> Fun.color Color.DarkGoldenrod
     |> Fun.scale (0.3, 0.3, 2.0) ) $
   ( Fun.sphere
     |> Fun.translate (0.0, 0.0, 1.6)
     |> Fun.scale (0.5, 0.5, 0.5)
     |> Fun.color Color.PeachPuff ) )
   |> Fun.rotate (45.0, 0.0, 0.0)
   |> Fun.translate (0.0, -1.2, 2.3)

let arms = 
   arm $
   (Fun.rotate (0.0, 0.0, 180.0) arm)   

let feet = 
   Fun.cube
   |> Fun.scale (0.6, 0.6, 0.1)
   |> Fun.translate (0.0, 0.0, 7.0)

let leg = 
   Fun.cylinder
   |> Fun.color Color.DarkGoldenrod
   |> Fun.scale (0.5, 0.5, 3.0)
   |> Fun.translate (0.0, 0.0, 5.0)

let legs = 
  (Fun.translate (0.0, 0.3, 0.0) (leg $ feet)) $
  (Fun.translate (0.0, -0.3, 0.0) (leg $ feet))

let man = 
   head $
   cylinder $ 
   body $
   arms $
   legs 
  
[ for x in -10.0 .. 5.0 .. 10.0 do
   for y in -10.0 .. 5.0 .. 10.0 do
    yield Fun.translate (x, y, 0.0) man ]
|> Seq.reduce ($)

Meanwhile Anthony Brown managed to get F# code running on the PS Vita!

F# eXchange 2015

Want to join the dots of the F# landscape? Eager to hear from those driving innovation in F# or how F# is being used in various industries? Then join us for the F# exchange this April! Featuring a days of talks, demos and discussions, the F# eXchange will bring the world's top F# experts and practioners together with the amazing, passionate and fast growing F# community to learn and share skills, exchange ideas and meet like minded people. Don't miss it!

Book by December 31st for the early bird discount.

Categories: Programming

Utilities for C/C++ Android Developers: fplutil 1.0

Android Developers Blog - Mon, 11/10/2014 - 19:07

By Stewart Miles, Fun Propulsion Labs at Google*

Today we're announcing the 1.0 release of fplutil, a set of small libraries and tools by Fun Propulsion Labs at Google (the FPL in fplutil) that is useful when developing C/C++ applications for Android.

fplutil introduces the following:

  • build_all_android.py, an all-in-one build script that allows you to build (with the Android NDK), install and run native (C/C++) Android apps from the command line. This is ideal for build automation, but is also useful in a developer’s compile/run loop.
  • buildutil performs the configuration, build and archive steps of Android and Linux C/C++ applications using a suite of Python modules. This suite of modules can automate builds in a continuous integration environment. This framework uses legacy tools in the Android Development Toolkit.
  • libfplutil enables C/C++ developers to write traditional applications (like Hello World) using "main()" and "printf()" on Android.
  • android_ndk_perf.py is a desktop tool that enables native (C/C++) developers to measure the CPU utilization of their applications on Android, guiding their optimization efforts. An example report is shown below:

android_ndk_perf.py example HTML report

You can download the latest open source release from our github page. We invite you to contribute to the project and join our discussion list!

*Fun Propulsion Labs is a team within Google that's dedicated to advancing gaming on Android and other platforms.

Join the discussion on

+Android Developers
Categories: Programming