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!
Software Development Blogs: Programming, Software Testing, Agile Project Management
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!
I attended a fantastic talk about big data visualisation at the YOW! 2014 conference in Sydney last month (slides), where Doug Talbott talked about how to understand and visualise large quantities of data. One of the things he mentioned was Shneiderman's mantra:Overview first, zoom and filter, then details-on-demand
Leaving aside the thorny issue of how teams structure their software systems as code, one of the major problems I see teams having with software architecture is how to think about their systems. There are various ways to do this, including a number of view catalogs (e.g. logical view, design view, development view, etc) and I have my C4 model that focuses on the static structure of a software system. If you inherit an existing codebase and are asked to create a software architecture model though, where do you start? And how to people start understanding the model as quickly as possible so they can get on with their job?
Shneiderman's mantra fits really nicely with the C4 model because it's hierarchical.
Overview first (context and container diagrams)
My starting point for understanding any software system is to draw a system context diagram. This helps me to understand the scope of the system, who is using it and what the key system dependencies are. It's usually quick to draw and quick to understand.
Next I'll open up the system and draw a diagram showing the containers (web applications, mobile apps, standalone applications, databases, file systems, message buses, etc) that make up the system. This shows the overall shape of the software system, how responsibilities have been distributed and the key technology choices that have been made.Zoom and filter (component diagrams)
As developers, we often need more detail, so I'll then zoom into each (interesting) container in turn and show the "components" inside it. This is where I show how each application has been decomposed into components, services, modules, layers, etc, along with a brief note about key responsibilities and technology choices. If you're hand-drawing the diagrams, this part can get a little tedious, which is why I'm focussing on creating a software architecture model as code, and automating as much of this as possible.Details on demand (class diagrams)
Optionally, I might progress deeper into the hierarchy to show the classes* that make up a particular component, service, module, layer, etc. Ultimately though, this detail resides in the code and, as software developers, we can get that on demand.Understanding a large and/or complex software system
Next time you're asked to create an architecture model, understand an existing system, present an system overview, do some software archaeology, etc, my advice is to keep Shneiderman's mantra in mind. Start at the top and work into the detail, creating a story that gets deeper into the detail as it progresses. The C4 model is a great way to do this and if you'd like an introduction to it (with example diagrams), you can take a look at Simple Sketches for Diagramming Your Software Architecture on the new Voxxed website.
* this assumes an OO language like Java or C#, for example
I‚Äôve been talking to people in the halls about what they learned about goals from last year, and what they are going to do differently this year. We‚Äôve had chats about New Years Resolutions, habits, goals, and big dreams. (My theme is Dream Big for 2015.)
Here are a few of the insights that I‚Äôve been sharing with people that really seems to create a lot clarity:
Maybe the most important insight is that while you don‚Äôt need goals to make your habits effective, it‚Äôs really easy to spend a year, and then wonder where the year went, without the meaningful milestones to look back on. That said, I‚Äôve had a few years, where I simply focused on habits without specific goals, but I always had a vision for a better me, or a better future in mind (more like a direction than a destination.)
As I‚Äôve taken friends and colleagues through some of my learnings over the holidays, regarding habits, dreams, and goals, I‚Äôve had a few people say that I should put it all together and share it, since it might help more people add some clarity to setting and achieving their goals.
Here it is:
Enjoy, and Dream Big for 2015.
All sorts of wild things happen when your code leaves the safe and warm development environment. Unlike the comfort of the debugger in your favorite IDE, when errors happen on a live server - you better come prepared. No more breakpoints, step over, or step into, and you can forget about adding that quick line of code to help you understand what just happened. In production, bad things happen first and then you have to figure out what exactly went wrong. To be able to debug in this kind of environment we first need to switch our debugging mindset to plan ahead. If you’re not prepared with good practices in advance, roaming around aimlessly through the logs wouldn’t be too effective.
And that’s not all. With high scalability architectures, enter high scalability errors. In many cases we find transactions that originate on one machine or microservice and break something on another. Together with Continuous Delivery practices and constant code changes, errors find their way to production with an increasing rate. The biggest problem we’re facing here is capturing the exact state which led to the error, what were the variable values, which thread are we in, and what was this piece of code even trying to do?
Let’s take a look at 5 methods that can help us answer just that. Distributed logging, advanced jstack techniques, BTrace and other custom JVM agents:1. Distributed Logging
If any of these items interest you there's a full description of each sponsor below. Please click to read more...
So, 2015 ... happy new year! 2014 was a busy year with workshops, conferences and consulting gigs in countries ranging from Iceland to Australia. I'd like to say a huge thank you to everybody who made 2014 so much fun.Software architecture vs code
One of the things that I spent a good chunk of time on during 2014 was the conflict between software architecture and code. I've written about this before, but you will have seen this in action if the code for your software system doesn't reflect the architecture diagrams you have on the wall. If you've not seen it, my closing keynote from the ABB DevDay conference in Krak√≥w, Poland last September provides a good summary of this.
What I'm really interested in is how we can solve this problem. And that's really where my focus is going to be this year, by taking my C4 software architecture model and representing it as code. I already have some experimental code and tooling that you can find at structurizr.com, but I'm going to be enhancing and expanding this over the coming weeks and months. I want to get people thinking about how to appropriately structure their codebase, understanding that there are different strategies for modularity and adopting, what George Fairbanks calls, an architecturally-evident coding style. I also want to provide tooling that helps people create software architecture models and keep them up to date, ideally based upon the real code and with as much automation as possible. To give you an example, here's a post about diagramming Spring MVC webapps.
I'll be posting updates on the blog, but if you want to hear me talk about this, I'll be at the following conferences over the next few months.
As a final note, my Software Architecture for Developers ebook is only $10 until the end of this week.
All the best for 2015.
It‚Äôs timeless advice to help you be YOUR best.
The overall goal of the site was to help you master productivity, master time management, and achieve work life balance. The idea was that by spending a little time each day, you would get back lots of time and energy and produce better results. And we all need an edge in work and life.Rise Above Productivity, Time Management, and Work-Life Balance Challenges
Here are the key things that I tried to help you with:
So if you‚Äôre struggling with any of the above, you might find just the piece of advice or the one or two ideas that help you find your breakthrough.The Making of 30 Days of Getting Results
Behind the scenes, when I wrote each of the 30 days, I gave myself a 20-minute time limit (a 20-minute timebox for you in the know.) I would then write as if writing to somebody where I only had a small window of time to help them as best I could to achieve better results, in any situation.
It might seem like the first few days start slow, but things pick up from there pretty fast. Also, it‚Äôs self-paced so you can hop around to any particular day that you think you need the most.
I‚Äôve had many people tell me that it was the course that they needed that helped them set and achieve better goals, while also helping them make new habits and break bad habits. It‚Äôs also helped them find more energy as well as enjoy more of the things that they do. It‚Äôs also helped them find ways to spend more time in their strengths and do what makes them come alive.
I will say that the user experience isn‚Äôt that great. The site was a test and I didn‚Äôt want to spend a lot of time on the site design. That said, it‚Äôs pretty straightforward. When you go to the home page at 30 Days of Getting Results, you‚Äôll see a brief intro and overview, and then you can dive in from there, by either starting with Day 1: Take a Tour of Agile Results, or by clicking through the 30 Days on the left-hand side of the menu.30 Days of Getting Results at a Glance
Here are all the days at a glance for your convenience:
The course is free. Hopefully that doesn‚Äôt de-value it. It has a lot of the lessons you would learn in some of the most advanced productivity and time management training.The Structure of the Daily Lessons
The structure of each day is the same. It includes an outcome, a lesson, and an assignment. And right up front, I include a relevant quote and picture. Here is an example of Day 24 ‚Äď Bounce Back with Skill:Quote: ‚ÄúLife is not about how fast you run, or how high you climb, but how well you bounce.‚ÄĚ ‚Äď Anonymous Your Outcome: Your Outcome: Bounce back with skill and roll with the punches. Learn to draw from multiple sources of strength and energy, including your mind, body, emotions, and spirit. Lesson Welcome to day 24 of 30 Days of Getting Results, based on my book, Getting Results the Agile Way. In day 23, you learned how to design your week with skill to get a fresh start, establish routines that support and renew you, and spend more time on the things that count for you. Today, we learn how to bounce back with skill. Bouncing back with skill helps us roll with the punches, refuel our bodies, and keep our spark alive. It‚Äôs how we keep our engine going when the rest of us says ‚Äúwe can‚Äôt‚ÄĚ and it‚Äôs how we ‚Äúshut down‚ÄĚ or ‚Äúturn it off‚ÄĚ so we can bounce back stronger.
If you want to start off well for 2015, and you have big dreams and big goals in mind, then give 30 Days of Getting Results a try:
If you want to take it slow and steady, then just try one lesson each day. If you‚Äôre feeling gung-ho, then see how quickly you can make it through all 30 at your own pace.
To help you stay on track, if you take the slow and steady route, build the habit by adding a simple reminder to your calendar in the morning to go and take the next lesson. Do it Monday through Friday and take the weekends off.
Enjoy and best wishes for your best year ever.
Dream Big for 2015 (my personal theme for 2015)
I don't know about you, but when I read about the exploits of people like John von Neumann, Alan Turing, J. Robert Oppenheimer, and Kurt Gödel in Turing's Cathedral: The Origins of the Digital Universe by George Dyson, I can't help but flash back to the Age of Heroes, where the names are different--Achilles, Odysseus, Agamemnon, and Ajax--but the larger than life story they lived is familiar. Dyson's book is the Iliad of our times, telling the story of great battles of the human mind: the atomic bomb, Turing machines, programmable computers, weather prediction, genetic-modeling, Monte Carlo simulation, and cellular automata.
Which brings up another question I can't help but ponder: is it the age that makes the person or is it the person that makes the age? Do we have these kind of people today? Or can they only be forged in war?
“Von Neumann had one piece of advice for us: not to originate anything.” This helped put the IAS project in the lead. “One of the reasons our group was successful, and got a big jump on others, was that we set up certain limited objectives, namely that we would not produce any new elementary components,” adds Bigelow. “We would try and use the ones which were available for standard communications purposes. We chose vacuum tubes which were in mass production, and very common types, so that we could hope to get reliable components, and not have to go into component research.”
They did innovate on architecture by making it possible to store and run programs. Some interesting quotes from the book around that development:
This article is meant for knowledge workers that want to be more on top of things and feel secure that they haven‚Äôt forgotten about something, freeing their mind for the actual tasks at hand. It especially applies to¬†those that are using or want to use SCRUM, a popular and formalized Agile methodology, in their day to day work.
I got hooked on Agile back in 2005, while working for Db4o, and never looked back since. Improving the process per iteration and having¬†a manageable amount of work per sprint gave me peace of mind and focus, enabling me to deliver the right software solutions to the stakeholders. When I got asked to join a tech startup in 2011 as its CTO I suddenly had a lot more to deal with: hiring and managing staff, managing costs, reporting to the board, applying for subsidies and making sure the books were¬†kept in order. On top of this I still operated as SCRUM Master and technical lead within a SCRUM team.
During this period one of my co-founders introduced me to Getting things done by David Allen. It took him only about 15 minutes to explain the basics and I got started with it straight away.
You can optionally watch this presentation to go along with the article:
As knowledge workers, and more specifically consultants, we have a diversity of responsibilities. You have personal responsibilities, like planning¬†a doctor‚Äôs appointment or picking up your kids from daycare, and you have responsibilities from your employer like ordering a backup disk, co-creating a course or preparing a presentation. Lastly you also have responsibilities from your client, like sprint tasks, meetings and organizing innovation days. Truly staying on top of all these responsibilities is tough, real tough!Agile
For those of you that are not familiar with Agile methodologies. Agile is an iterative process. In each iteration a team commits to a finite amount of work. A typical iteration has a length of two weeks, which is its deadline. All stories, the units of work in an iteration, can be made actionable by the Agile team.GTD
Getting Things Done takes a slightly different approach. There is a single inbox, comparable to the part of a backlog in SCRUM, that hasn‚Äôt been groomed yet. By regularly reviewing the inbox, it can be emptied by turning items into actionable tasks, high-level projects, calendar items, reference material or just trash. Actionable tasks can be extracted from a project, that will move it forward. Actionable tasks should be kept together to be able to prioritize them upon review.
Please refer to the book Getting Things Done by David Allen in order to get the full explanation but below follows a quick overview.Quick overview of GTD Inbox
The purpose of the GTD inbox is to collect anything new that might or might not require your attention. Whenever something pops up into your mind that you think requires your attention, either now or in the future, you collect it here. It doesn‚Äôt need to be organised. It doesn‚Äôt even need to be an attainable goal. As long as you get it off your mind and file it away for review, the inbox has done its job. Reviewing the inbox will empty it into one of the following categories.Trash
You may find that a lot of the things you collect in your GTD inbox don‚Äôt really require you to take any action at all, so you can throw them away with impunity! Good riddance!File
Many a time you get a piece of information that you don‚Äôt need immediately but would like to be able to reference in the future. These items go from your inbox into a file. This file can be physical, a folder structure on your computer system or something completely different.Calendar
Though people have a tendency to put too many things in their calendar that really don‚Äôt need to be done at that exact time, inbox items that do have a specific time window move from there to your calendar.Waiting for
If you delegate something you expect it to be done after a certain period of time. Though these dependencies are kept out of SCRUM for a good reason they are a part of everyday life. Move these from your inbox to your waiting for list so you can check in with whoever you delegated it to in order to be aware of their status.Someday maybe
Colleague sent you an adorable youtube frolicking puppy compilation? Maybe you didn‚Äôt have time to watch it when it was brought to your attention but why not put it away to watch later? Items that you don‚Äôt need to do but would like to get around to eventually should be moved over here.Projects
There are many things that people have on their to do list that they keep on staring at and get intimidated by for some reason. Often this pertains to items that are of a too high level to pick up straight away. This can range from Bring about world peace to Organise daughter‚Äôs birthday party. Both of these tasks really consist of multiple clearly actionable tasks even though one gets the impression the latter is easier to attain in one‚Äôs lifetime. Things that should be more clearly defined belong here. Review them and extract actionable tasks from them that move the projects closer to their goal.Next actions
This is the work horse of the GTD system and is where you actually pick up tasks to do. You place well defined tasks here. If you need to call someone about a case, be sure to save this tasks along with the name of the person, their phone number and case reference to remove any impediments, like having to look up their number or the case reference. This way you make the barrier to get something done as low as possible.Obstacles
Of course there are a few obstacles to overcome using these two methods side by side as a consultant.
Since GTD encourages you to work on the most important thing at that time, you could be required to make private phone calls during consultancy hours or respond to a mail from a co-worker while getting ready for work. This causes work-time and private time to overlap. The obvious solution would be to track work intervals for each task. However, this takes a little bit of time and discipline so should ideally be automated.
GTD requires you to review at least daily what should be done with stuff in your inbox and what the next most important actions are. This takes time. Is this personal time? Should it be billable? In my opinion working with GTD reduces stress and increases productivity and effectiveness. Thus working with GTD will make you a more valuable employee which is something your employer should invest in.
While both GTD as well as Agile work with definitions of work, the priority of stories in SCRUM is determined by the Product Owner. How can this be incorporated into GTD? Well, even though the Product Owner is in charge of the priorities inside the sprint, he does not have a full overview of everything that needs doing in your life. Therefore you are the one that determines the order in which your tasks need to be performed. Within these tasks only the ones coming from your sprint have a relative order pre-determined by the PO.Improvements
In my day to day usage of GTD I found that there are a few identifiable improvements.
Due to work requirements I need to maintain multiple calendars. Since some GTD inbox items end up in your calendar this sometimes means having to create multiple items in your calendar, which causes needless overhead. It would be beneficial if this would be supported by software, so that a GTD inbox item can automatically be delegated to one or more calendars.
When tasks are coming from external applications like Jira they have to be kept in sync. It would save time if this could be managed automatically.
Lastly the question of ownership. Who owns a task? The assignee, the author or the company on who‚Äôs behalf it needs to be performed? I strongly believe that tasks belong to the author or organisation that the author wrote them for. If tasks have been delegated or synced from external systems they should be revocable by their owner. At the same hand an organisation should not have or control access to tasks a person authored without the author‚Äôs permission.Conclusion
Unfortunately there is currently no software tool that would serve all my needs as outlined here. However the most essential properties of such a tool should be: multi-platform to ensure availability, tagging support to be able to categorise without having to split up the list and owned by you.
One of the core concepts in the Software Architecture for Developers course is that the Quality Attributes (non-functional requirements) need to be understood in order to provide foundations for a system's architecture. It's no good building a system that fulfills its user's functional requirements if these are delivered incorrectly. Consider the embedded software in a pacemaker. It may correctly analyse the rhythm of the patient's heart and conclude that a shock is required but if this is performed at the wrong time (possibly due to jitter in the response) then it may kill the patient.
Discovering that critical quality attributes are not being met can require a complete system redesign e.g. modifying an asynchronous system to be synchronous. Therefore the early identification of key Quality Attributes is important to drive your design and in the selection of tools and technologies.
However I've often had difficulties getting course attendees to identify specific attributes, as opposed to generic ones, for a case study. For example, most people will identify performance as important but struggle to go beyond this to consider trade-offs between, say, throughput and jitter.
Therefore, in the last couple of courses, I have expanded the identification of Quality Attributes to include a very brief (and lightweight) Quality Attribute Workshop for our case study.
The Software Engineering Institute has a description of how to perform a Quality Attribute Workshop which includes a full process and template set. While excellent (and a core part of their ATAM architecture evaluation process) this is too involved for a short training course. We therefore just performed the 'Identification of Architectural Drivers' and review steps.
Importantly the SEI also provides a very useful tool for the identification of Quality Attributes - a taxonomy. This is not just a list of attributes with a detailed description, it actually breaks down attributes from the generic to the specific. Take, for example, the following diagram for performance:
(Performance Taxonomy Extracted from Barbacci, Mario; Klein, Mark; Longstaff, Thomas; & Weinstock, Charles. Quality Attributes (CMU/SEI-95-TR-021 ). Software Engineering Institute, Carnegie Mellon University, 1995.)
The Quality Attributes are broken down under the 'Concerns' branch. For example, in the case study used the 'Response Window' is an important metric which needs analysis.
The 'Factors' branch, lists properties of the system that can impact the concerns. In our case study the 'Arrival Pattern' and 'Execution Time' are both important factors that need to be considered.
Lastly the 'Methods' branch lists tools/theories that can be used to analyse the concerns.
This diagram is useful for identification as it encourages the reader to consider all the aspects of the attribute in question and the measurable specifics for it. Without this taxonomy it is common to hear comments such as "it has to run quick enough" but with the taxonomy the analysis becomes much more detailed and useful.
However there is a danger, particularly with using a general, external taxonomy. My observation is that once provided with a taxonomy the participants tend to stick very closely to it and forget out the Quality Attributes NOT listed on it. For example the SEI list does not include Usability attributes or anything covering Internationalisation/Localisation. In response to this I'd suggest creating your own domain specific taxonomy. For example, if you work on retail websites you'll want more focus on usability and less on safety criticality.Conclusion
I have found lightweight Quality Attribute Workshops to be a very effective way of identifying Quality Attributes in a short space of time, particularly if you use a Taxonomy to focus the participants. However you must be careful to not become blinkered by what it lists. Therefore I'd suggest you create your own taxonomy, specific to your domain.
I did a major cleanup of my post on lessons learned from John Maxwell:
It should be much easier to read now.
It was worth cleaning up because John Maxwell is one of the deepest thinkers in the leadership space. He‚Äôs published more than 50 books on leadership and he lives and breathes leadership in business and in life.
When I first started studying leadership long ago, John Maxwell‚Äôs definition of leadership was the most precise I found:
‚ÄúLeadership is influence.‚ÄĚ
As I began to dig through his work, I was amazed at the nuggets and gems and words of wisdom that he shared in so many books. I started with Your Road Map for Success. I think my next book was The 21 Irrefutable Laws of Leadership. Ironically, I didn‚Äôt realize it was the same author until I started to notice on my shelf that I had a growing collection of leadership books, all by John Maxwell.
It was like finding the leadership Sherpa.
Sure enough, over the years, he continued to fill the shelves at Barnes & Nobles, with book after book on all the various nooks and crannies of leadership.
This was about the same time that I noticed how Edward de Bono had filled the shelves with books on thinking. I realized that some people really share there life‚Äôs work as a rich library that is a timeless gift for the world. I also realized that it really helps people stand out in their field or discipline when they contribute so many guides and guidance to the art and science of whatever their specific focus is.
What I like about John Maxwell‚Äôs work is that it‚Äôs plain English and down to Earth. He writes in a very conversational way, and you can actually see his own progress throughout his books. In Your Road Map for Success, it‚Äôs a great example of how he doesn‚Äôt treat leadership as something that comes naturally. He works hard at it, to build his own knowledge base of patterns, practices, ideas, concepts, and inspirational stories.
While he‚Äôs created a wealth of wisdom to help advance the practice of leadership, I think perhaps his greatest contribution is The 21 Irrefutable Laws of Leadership. It‚Äôs truly a work of art, and he does an amazing job of distilling down the principles that serve as the backbone of effective leadership.
Everybody has a story. I thought I would share mine at Sources of Insight:
It‚Äôs the story of how I figured out how to do more of what makes me come alive, and how to share my unique value with the world.
It‚Äôs a journey, but this story is a look backwards, and how it helped me shape my path forward.
I included some of the key questions I asked, as well as some of the key resources I used to get a new lens on work and life.
Life can really be a game of chutes and ladders, depending on the questions you ask, the choices you make, and the actions you take.
I think one of the biggest challenges we have in life, is a very personal one. It‚Äôs the challenge of finding our voice. It‚Äôs the challenge of finding our passion, our purpose, and our talents. It‚Äôs the challenge of becoming all that we‚Äôre capable of. And, it‚Äôs the challenge of how to make the most of what we‚Äôve got, while helping others in our unique way.
The other big challenge is avoiding regret, learning to live with regret, or learning how to live without regret. What we regret the most, are the things we have a chance to change. It‚Äôs our opportunities lost. Or, to put it another way, we regret the things we didn‚Äôt do. That can include things like not being true to ourselves, not expressing our feelings, not staying in touch with friends, or not letting ourselves be happier.
The top regrets in life based on research are: education, career, romance, parenting, self-improvement, leisure, finance, health, friends, spirituality, and community. Education is the top regret because it impacts so many areas of our life, and it‚Äôs within our control.
The way I learned to write my story forward is to combine a combination of answering the following questions on an on-gong basis:
Transformation is a journey of challenges and changes. And that‚Äôs where our greatest growth comes from.
Best wishes for your best year, ever.
Hey, it's HighScalability time:
Don't miss all that the Internet has to say on Scalability, click below and become eventually consistent with all scalability knowledge (which means this post has many more items to read so please keep on reading)...
‚ÄúAnother year over, And a new one just begun.‚ÄĚ ‚Äď John Lennon
Ready to get your game on?
January is a great time to focus on what you want out of this year. As you close out last year, you can reflect on what went well and what things you could improve. Focus on the growth.
January is also a great time to build some momentum. January and December are the bookends for your year. It‚Äôs interesting how they are both a month apart and a year apart.
What you fill that year with, is your opportunity.
If you‚Äôre having a hard time remembering what it means to dream big, I put together a collection of dream big quotes to rekindle your imagination.
I‚Äôve also put together a set of posts to help you create goals with skill:
One of the most helpful things I‚Äôve found with goal setting, is to start with 3 dreams or 3 wins for the year. I learned this while I was putting together Getting Results the Agile Way: A Personal Results System for Work and Life. As my story goes, I got frustrated and bogged down by a heavy goal process and lost in creating SMART goals. I finally stepped back and just asked myself, what are Three Wins or Three Outcomes that I want out of this year? The first things that came to mind were 1) ship my book, 2) get to my fighting weight, and 3) take an epic adventure.
It wasn‚Äôt scientific, but it was significant, and it was simple. But most of all, it was empowering.
In retrospect, it seems so obvious now, but what I was missing in my goals was the part that always needs to happen first: Dream big. We need to first put our dreams on the table because that‚Äôs where meaningful goals are born from. It‚Äôs the dreams that make our goals a force to be reckoned with. Really, goals are just a way to break our dreams down into chunks of change we can deal with, and to help guide us on our journey towards the end in mind. That‚Äôs why we have to keep pushing our dreams beyond our limits. That way we don‚Äôt try to push ourselves with our goals. Instead, we pull ourselves with our dreams.
If you want to know how to get started with Agile Results, before you get the book, you can use the Agile Results QuickStart guide. You can use it to create your personal results system. It‚Äôs a simple system, but a powerful one. Individuals, teams, and leaders use it to bring out their best and to make the mot of what they‚Äôve got.
To give you a quick example, if you want to rise above the noise of your day, just take a quick pause, and write down Three Wins that you want out of today. If you‚Äôre day is pretty tough, you might say, ‚Äúgreat breakfast, great lunch, great dinner.‚ÄĚ We have those days. Or, if you‚Äôre feeling pretty good, you might say, ‚Äúship feature X‚ÄĚ or ‚Äúclear my backlog‚ÄĚ or ‚Äúfinish my presentation‚ÄĚ or ‚Äúwin a raving fan‚ÄĚ, etc.
It sounds simple but by having Three Wins to hold onto for today, it helps you focus. It helps you prioritize. And it helps you get back on track, when you get off track. It also gives you a quick way to feel good about your achievements at the end of the day, because you can actually name them. They are your private victories.
So, if you want to practice Agile Results, just remember to think in threes: Three Wins for the Day, Three Wins for the Week, Three Wins for the Month, Three Wins for the Year. It will help you funnel and focus your time and energy on meaningful results that matter. And, you‚Äôll build momentum a moment at a time, as you respond to challenges, exercises your choices, and drive your changes in work and in life.
Linus Torvalds in his usual politically correct way made a typically understated statement about “pushing the whole parallelism snake-oil” that generated almost no response whatsoever.
The whole "let's parallelize" thing is a huge waste of everybody's time. There's this huge body of "knowledge" that parallel is somehow more efficient, and that whole huge body is pure and utter garbage. Big caches are efficient. Parallel stupid small cores without caches are horrible unless you have a very specific load that is hugely regular (ie graphics).
Nobody is ever going to go backwards from where we are today. Those complex OoO [Out-of-order execution] cores aren't going away. Scaling isn't going to continue forever, and people want mobility, so the crazies talking about scaling to hundreds of cores are just that - crazy. Why give them an ounce of credibility?
Where the hell do you envision that those magical parallel algorithms would be used?
The only place where parallelism matters is in graphics or on the server side, where we already largely have it. Pushing it anywhere else is just pointless.
So give up on parallelism already. It's not going to happen. End users are fine with roughly on the order of four cores, and you can't fit any more anyway without using too much energy to be practical in that space. And nobody sane would make the cores smaller and weaker in order to fit more of them - the only reason to make them smaller and weaker is because you want to go even further down in power use, so you'd still not have lots of those weak cores.
Give it up. The whole "parallel computing is the future" is a bunch of crock.
An interesting question to ponder on the cusp of a new year. What will programs look like in the future? Very different than they look today? Or pretty much the same?
From the variety of replies to Linus it's obvious we are in no danger of arriving at consensus. There was the usual discussion of the differences between distributed, parallel, concurrent, and multithreading, with each succeeding explanation more confusing than the next. The general gist being that how you describe a problem in code is not how it has to run. Which is why I was not surprised to see a mini-language war erupt.
The idea is parallelization is a problem only because of the old fashioned languages that are used. Use a better language and parallelization of the design can be separated from the runtime and it will all just magically work. There are echoes here of how datacenter architectures are now utilizing schedulers like Mesos to treat entire datacenters as a programmable fabric.
One of the more interesting issues raised in the comments was a confusion over what exactly is a server? Can a desktop machine that needs to run fast parallel builds be considered a server? An unsatisfying definition of a not-server may simply be a device that can comfortably run applications that aren't highly parallelized.
I pulled out some of the more representative comments from the threads for your enjoyment. The consensus? There is none, but it's quite an interesting discussion...
This is a follow up to Santa Lands on a Virgin Atlantic Plane with 4D Technology. It turns out that you can measure the magic in the air.
Here is the page that‚Äôs tracking the festive magic:
Here is a snapshot of the page:
How are we measuring the festive magic? Using cloud-based Dynamics social analytics software.
Via the There‚Äôs Magic in the Air site:
‚ÄĚAt Virgin Atlantic we love the festive season and so do lots of our customers.
So this year, we wanted to see how much ‚Äėfestive magic‚Äô our customers and employees are creating around the world.
Partnering with our friends at Microsoft, we're using cloud based Dynamics social analytics software to calculate the volume and sentiment of social posts on platforms like Facebook and Twitter. We‚Äôre analyzing the posts for positive mentions of keywords like ‚ÄėChristmas,‚Äô ‚Äėmagic‚Äô and ‚Äėreindeer.‚Äô So we can understand how much of that festive magic is being generated every day until 7January, 2015.
We're doing this in a totally anonymous way, and we're not storing any personal information. We just want to understand how much magic we're collectively creating during this period.‚ÄĚ
What a fun and festive way to show software in action, and use technology to light up the holiday season.You Might Also Like
I‚Äôve put together a roundup of the best productivity books that have helped me get better results in work and life. It contains many of the same books that I recommend to people and teams that I mentor. Here is the list:
It has a lot of books. To be productive, it takes a lot of skills, and a lot of self-mastery. And, you never know which book is going to do it for you.
I organize the productivity books in a scenario-based way:
At the end of the list, I included all the books in a simple, flat A-Z list so you can quickly check against your own productivity book collection to see if I have mentioned books that you don‚Äôt have or don‚Äôt know about.
I‚Äôve put this list of productivity books together to give you an unfair advantage. Competition can be fierce. Remember that the best person to always compete against is you‚ÄĒfind ways to be better, faster, or cheaper, when it comes to making things happen. It‚Äôs how you stay in the game, and it‚Äôs how you change your game.
In fact, productivity is a backbone for surviving and thriving. Yeah, it‚Äôs a big deal.
Also, bear in mind that the big idea behind extreme productivity, or effective productivity is to focus on learning and growth. If you have a growth mindset, you‚Äôll win in the long-run, because you‚Äôll get better over time, and you can compound your effort. Also, learn to embrace the effort, and to love the work you do, or love the way you do it.
Your work is the ultimate self-expression, and the legacy you leave behind, can be an inspiration for yourself, as well as for others.
My Productivity Books page will be a living catalog of the books I draw from, and it‚Äôs part of my bigger Great Books collection, where I share the world‚Äôs best books for insight and action on business, career, leadership, personal development, and more.
I know there are a lot of productivity books on my list. If I can only recommend one, I start people off with Getting Results the Agile Way. I wrote it specifically to help people get better results in work and life with a simple system I developed over time in extreme scenarios. It integrates proven practices for personal productivity, as well as positive psychology, project management, sports science, and more in terms of achieving high-performance with flow. And, it‚Äôs easy to get started (Here is the Agile Results QuickStart.)
I believe in the power of books to change lives. Productivity is just one area, but it‚Äôs an area that impacts all the other major areas of our life.
If you can master productivity, you can know more, be more, and achieve more.
And, if you balance that with living your values, making an impact, and enjoying the journey, that is the key to living la vida buena.
Microsoft and Virgin help land Santa on top of a plane at 30,000 feet. If you‚Äôve been wondering where Santa‚Äôs been, he landed on top of a Virgin Atlantic plane and did a photo shoot with the passengers.
Microsoft teamed up with Richard Branson and Virgin Atlantic to bring the magic of Christmas to life. In the world‚Äôs first 4D experience in flight, Santa Claus appears to land on top of a Virgin Atlantic plane at 30,000 feet.
How‚Äôs that for some fancy flying with modern technology?!
Each passenger was also given a Windows tablet so they could track Father Christmas and chat with him during the flight.
Here‚Äôs the video of Santa landing on top of the plane and visiting with the passengers:
Here are a few scenes that show Santa in action ‚Ä¶
Here‚Äôs one of Santa‚Äôs reindeer peering down into the cabin from on top of the plane:
Here‚Äôs Santa peering down into the cabin from above the plane before he goes inside:
Santa sees somebody he recognizes:
Santa boards the plane and walks the cabin:
The kids are excited to see Santa:
Adults are happy, too:
Santa has time for some photo shoots:
Santa leaves to get back to his sleigh on top of the plane:
Virgin Atlantic and Microsoft wish everybody a very, merry Christmas:
Here‚Äôs Richard Branson‚Äôs post on the story:
Merry Christmas to all and to all a good night.
JDYou Might Also Like
I didn't try it on mono, but it should also work with some tweaking, see details here
Xmas is a good time to surprise kids, and what's more fun than a talking computer ?!Hello world !
Nothing's easier, and this kind of Hello World will appeal them to programming in a flash :
#r "System.Speech" open System.Speech.Synthesis let synt = new SpeechSynthesizer() let say s = synt.Speak(s: string) say "Hello world !"
Of course, if you're french like me, it'll say this with an awful french accent - something like h√©lo ouorld !
But you can select a different voice if available by providing hints:
open System.Globalization let english = CultureInfo.GetCultureInfo("en-US") synt.SelectVoiceByHints(VoiceGender.NotSet, VoiceAge.NotSet, 1, english) say "Hello world !"
Far better !Can you beat it ?
Now, a talking fizz buzz, up to 100 ! Can you beat it ?
[1 .. 100] |> List.map (fun n -> match n%3, n%5 with | 0, 0 -> "FizzBuzz" | 0, _ -> "Fizz" | _, 0 -> "Buzz" | _ -> string n ) |> List.iter sayEven harder !
Now with a recognizer, we can wait for voice user input.
The problem with the Grammar API is that it's totally mutable and not really DSL oriented. Let's correct that :
open System.Speech.Recognition type Grammar = | Phrase of text:string * result: string | Lst of Grammar list | Alt of Grammar list | Repeat of min: int * max: int * Grammar let rec build = function | Phrase (text, result) -> // Just build the a single phrase GrammarBuilder(SemanticResultValue(text,result)) | Lst grammars -> // Append parts of grammars one after the other let builder = GrammarBuilder() grammars |> List.map build |> List.iter builder.Append builder | Alt alternatives -> // Create alternatives let choices = alternatives |> List.map build |> List.toArray GrammarBuilder(Choices()) | Repeat(min, max, grammar) -> // Repeat a part of the grammar GrammarBuilder(build grammar, min, max)
This is not a full DSL for speach recognition, you can look at all the GrammarBuilder methods to add more possibilities.. Even here, I'll use only Phrase and Alt.
Now, we need a recognizer and wire the grammar with functions that will be called when a part of the grammar is recognized or rejected. It is mandatory to set grammar's culture to the recognizer's culture. There's usually a single recognizer installed by default on your system and it uses installed system's culture. In my case, it'll be french.
let recog = new SpeechRecognizer() let recognize grammar recognized rejected = let builder = build grammar builder.Culture <- recog.RecognizerInfo.Culture printfn "%A" recog.RecognizerInfo.Culture recog.LoadGrammar(Grammar builder) recog.SpeechRecognized |> Event.add (fun e -> recognized e.Result.Text (string e.Result.Semantics.Value)) recog.SpeechRecognitionRejected |> Event.add (fun e -> rejected ()) recog.Enabled
We can then use this to create a little Christmass quizz thanks to the FSharp.Data FreeBase Type Provider !
We'll use free base to find a list of Actors who plaid Santa in movies.
For this, install the FSharp.Data NuGet:
nuget install FSharp.Data -o packages -x
The dll should be in .\packages\FSharp.Data\lib\net40\FSharp.Data.dll
#r @"packages\FSharp.Data\lib\net40\FSharp.Data.dll" open FSharp.Data let fb =FreebaseData.GetDataContext()
Let's build the grammar
let santaActorsFilms = fb.``Arts and Entertainment`` .Film .``Film characters`` .IndividualsAZ.S .``Santa Claus`` .``Portrayed in films`` |> Seq.map (fun c -> c.Actor.Name, c.Film.Name) |> Seq.toList let santaActorsGrammar = santaActorsFilms |> List.map (fun (actor,film) -> Phrase(actor, film)) |> Alt
Here is the function to call when an actor is recognized.
I tried to pass a discriminated union as a value, but even if the API uses an object, the documentation states that it has to be a bool, an int or a string. I used only strings here.
let recognized text value = say (sprintf "True ! %s was Santa in %s" text value)
Here is the function when the speech could not be matched with the grammar.
It is also possible to get the audio of the text in this case. I decided to ignore it due to time constraints.
let rejected () = say "No, Not a Santa !"
Now, let's run it !!
recognize santaActorsGrammar recognized rejected
At this point the speech recognition configuration should appear if it's the first time you use it.
Once done you should be able to try the quizz !
If your OS culture is not english, don't hesitate to use a local accent for actor's name !Conlusion
I hope you had fun with this API, and that you'll want to tweak it for your own demo !
The full code - using FSharp.Formatting - is on my gist
Happy Christmass !namespace System namespace System.Speech namespace System.Speech.Synthesis val synt : SpeechSynthesizer
If any of these items interest you there's a full description of each sponsor below. Please click to read more...