Search Results

Search found 8089 results on 324 pages for 'auto completion'.

Page 108/324 | < Previous Page | 104 105 106 107 108 109 110 111 112 113 114 115  | Next Page >

  • Transferring ratings and playlists from Rhythmbox to Clementine

    - by xpanta
    After the latest update, Rhythmbox (which was my main mp3 player on my Ubuntu Latest distro) stopped functioning: it dies just after startup. So, I turned to Clementine which I like a lot. However in Rhythmbox I had my playlists and ratings. Song ratings are very important to me because many of my auto-playlists are depending on them. Is there anyway I can get my playlists and ratings from Rhythmbox and add them to Clementine? Thanks.

    Read the article

  • Web app to manage subscriptions to online magazine

    - by Mulone
    I'm looking for a php web app, a Wordpress plugin, or an online web service (naturally as cheap as possible) to manage the subscriptions for an online magazine. These are the main features I need: register/open new subscription renew subscription pay online with credit card send automatic emails after registration auto-send reminder when subscription expires send bulk emails to all subscribers The magazine runs on Wordpress.

    Read the article

  • Twitter Feed

    - by ferhat
    new TWTR.Widget({ version: 2, type: 'search', search: 'ORCL_InfraRed', interval: 10000, title: 'Inside news and all the buzz about Sun x86 Clustered Systems.', subject: 'Oracle InfraRed', width: 'auto', height: 300, theme: { shell: { background: '#ff0000', color: '#ffffff' }, tweets: { background: '#ffffff', color: '#444444', links: '#1985b5' } }, features: { scrollbar: false, loop: true, live: true, hashtags: true, timestamp: true, avatars: true, toptweets: true, behavior: 'default' } }).render().start();

    Read the article

  • L'ICANN approuve la création de nouvelles extensions de noms de domaines génériques et personnalisés à partir du 12 janvier 2012

    L'ICANN approuve la création de nouvelles extensions de noms de domaines génériques personnalisés A partir du 12 janvier 2012 Avec grafikm_fr C'est à Singapour que l'ICANN (Internet Corporation for Assigned Names and Numbres ) vient d'annoncer son accord pour la création de nouveaux noms domaines génériques de premier niveau (GTLD). Ces noms de domaines de premier niveau sont actuellement au nombre de 23, auxquels s'ajoutent près de 250 extensions correspondant chacune à des pays. Ce nouveau programme de l'ICANN permettra la création de nouveaux noms personnalisés pouvant s'achever par exemple avec des suffixes comme .auto (ou avec...

    Read the article

  • New Features Of WordPress 3.3 You Must Know

    - by Gopinath
    After months of beta testing, WordPress 3.3 version is going to be released at the end of this month. There are several new features packed in the new version and few of them are going to excite WordPress admins. In this post we are going to discuss about the exciting new features. 1. Drag and Drop Media Uploads One of the biggest improvements in this version of WordPress is it’s all new media uploader. Now you can upload multiple files by just dragging & dropping, instantly resize  the images and filter files by their type. The media upload sports a brand new look WordPress adopted the Pupload plugin to power its media uploader component and it’s written by the same team who created the popular TinyMCE editor plugin. 2. Improved Admin Bar(Toolbar) The admin bar or newly called toolbar has got handful of makeovers. The not so much used items like Search box and other elements are removed to make sure that the bar is not clumsy. The user menu and the related options are moved to the right like how we see in Google’s user bar. Also there are few changes to the colour of the bar to make it more eye friendly. 3. Fly out Admin Menus All the left side bar menus of WordPress admin are now sports a fly out menu style to save a click. In the previous versions if you want to access a sub menu on the left side bar, you need to first click on the category and then choose the menu item from the expanded list. Now on just mouse over you will see a flyout of menu items. 4. Adaptive Admin – Layout Auto Adjust To Fit Various Devices If you own an iPad or any other so called tablets then you are going to love this feature. The admin site of WordPress has got a lot more friendly with tablets and smartphones. WordPress now auto adjusts layout to fit the device through which you are accessing the admin site.  Accessing admin dashboard on your tablets is going to be more fun. 5. Other Features Now that we have read the most useful 4 features here is a small list of other features that may interest you Nice Tooltips are displayed where ever possible to help the newbies to understand the usage of admin site Responsive Layouts jQuery 1.7 and jQuery UI 1.8.16 are the power horses of WordPress Performance improvements This article titled,New Features Of WordPress 3.3 You Must Know, was originally published at Tech Dreams. Grab our rss feed or fan us on Facebook to get updates from us.

    Read the article

  • Mirroring: what happens if principal loses contact with both mirror and wittness?

    - by TiborKaraszi
    Imagine a database mirroring setup where you have two LANs with a WAN link in between. Let's call them site A and site B. Say that principal is currently in site A, and both mirror and witness are in site B. I.e., we are running database mirroring with a witness, and assuming we are running safety FULL (synchronous), we have auto-fail over. Now, what is really fail over when it comes to mirroring? the simple answer is that the mirror will finish the recovery process (UNDO) and make the database available....(read more)

    Read the article

  • Mount secure WebDAV with davfs2 ssl error

    - by Wouter0100
    I try to mount my secure webdav on my Ubuntu notebook, I've added the following to my fstab: https://[URL] /mnt/[folder] davfs user,auto,uid=wouter0100,file_mode=600,dir_mode=700 0 1 But when I run the command sudo mount -a I keep getting: /sbin/mount.davfs: Mounting failed. Server certificate verification failed: issuer is not trusted I've tried very much different things, but I couldn't get it working.. It's signed by Comodo and valid (when I load it in Chrome it's okay).

    Read the article

  • IE issues with my Website (Help me fix my CSS)

    - by cam77
    I'm struggling geting my website to test fully positive in IE, the following problems keep arising, only in IE; My '#grey box' div displaying 200px to the left out of place, and it seems to move with the adjustment of the IE window size, does this in no other browsers, just IE. It creates this unnecessary horizontal scroll. I have the width set to pretty large, but have "overflow: hidden" and again, works fine across except for IE. On a few of my pages, the footer is somewhat cropped and out of place. My biggest concern is the particular page's CSS, pasted below. #container { width : 1265px; height : 920px; background-color : #addceb; overflow : hidden; padding : 0; } #logo { font-size : 38px; height : 167px; width : 427px; margin-left : 435px; padding-top : 20px; margin-bottom : -10px; margin-top: 10px; border : none; } #menunav { width : 100%; background-image : url(../imagesnew/menunav.png); background-repeat : repeat-x; height : 40px; text-align : center; font-size : 14px; font-family : Palatino Linotype, Book Antiqua, Palatino, FreeSerif, serif; overflow : auto; } #menunav ul { list-style-type : none; background-image : url(); height : 40px; width : 800px; margin : auto; } #menunav ul a { background-image : url(); background-repeat : no-repeat; background-position : right; padding-right : 32px; padding-left : 15px; display : block; line-height : 30px; text-decoration : none; font-size : 14px; } #mainbox { position : relative; background-image : url(../premiumslideimgs/premiumbox.png); background-repeat : no-repeat; width : 900px; height : 800px; margin-left : 16%; top : 22px; padding-top : 5px; overflow : hidden; } #simplegallery1 { position : absolute; left : 50%; width : 800px; height : 800px; margin-top : 44px; margin-bottom: -44px; margin-bottom : 240px; margin-left : -397px; background-color : #a1bbfe; padding-top : 0; } #textbelowbox { position : absolute; width : 830px; height : 45px; margin-left : 209px; margin-bottom : 240px; margin-top : -240px; overflow : hidden; } #footer { background-image : url(../imagesnew/footerimg.png); background-repeat : no-repeat; background-position : right; height : 275px; margin-top : -285px; } a:hover { color : #addceb; } #right { float : right; margin-top : 3px; } #left { float : left; margin-left : 30px; } body { font-family : Palatino Linotype, Book Antiqua, Palatino, FreeSerif, serif; background-color : #addceb; margin : 0; padding : 0; } #textabovebox { width : 920px; position : absolute; margin-left : 228px; margin-bottom : 80px; margin-top : 38px; z-index : 2000; font-family : Palatino Linotype, Book Antiqua, Palatino, FreeSerif, serif; } a.submenu:hover { color : #333; font-weight : bolder; } #dialog { font-size : 12px; } #greybox { position : absolute; width : 275px; height : 465px; margin-left : 715px; margin-top : 80px; overflow : hidden; z-index : 2000; } ul { background-image : url(); height : 40px; width : 800px; margin : auto; } ul a { background-image : url(); background-repeat : no-repeat; background-position : right; padding-right : 32px; padding-left : 15px; display : block; line-height : 30px; text-decoration : none; font-size : 14px; } li { float : left; } a:link { color : #ffffff; text-decoration : none; } a:visited { color : #ffffff; text-decoration : none; } a:active { color : #ffffff; text-decoration : none; } a:hover { color : #addceb; } #right { float : right; margin-top : 3px; } #left { float : left; margin-left : 30px; } #text { float : left; margin-left : 30px; } body { font-family : Palatino Linotype, Book Antiqua, Palatino, FreeSerif, serif; padding : 0; margin : 0; } body { background-color : #addceb; } a.submenu:link { color : #333333; } a.submenu:active { color : #333333; } a.submenu:visited { color : #333333; } a.submenu:hover { color : #333333; font-weight : bolder; } { margin: 0; padding: 0; } Please help if you can, thanks a lot.

    Read the article

  • What is the correct fstab entry for automounting a remote filesystem?

    - by user101815
    I'm running Kubuntu 13.10 and I'm trying to arrange for a remote filesystem to be automounted on startup. I have the following entry for it in fstab: hpmediavault:/shares/Volume1/FileShare /mnt/mediavault nfs auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1800 0 0 I can mount it perfectly well with sudo mount /mnt/mediavault But what does it take so that it will be mounted on startup with no explicit action on my part?

    Read the article

  • Things to do After installing Visual Studio Express 12.

    - by Anirudha
    Originally posted on: http://geekswithblogs.net/anirugu/archive/2013/06/25/things-to-do-after-install-visual-studio-express-12.aspx  1. Environment > Document > Check the option for auto-load changes. By checking this option You can modified the file outside the VWD and VWD don’t tell you for confirmation. 2. Environment > Tabs and Windows > Preview Tab > uncheck the solution Explorer option. This option don’t show you the file when you just click on them in solution explorer. 3. Project and solutions > Check the track active item in solution explorer This option help you to easily figure out which file you working on and where it is in solution explorer . 4. text editor > all settings > word wrap > check this feature to enable word wrap 5. Text-editor > Css > formatting > check the compact rule. this option make you file smaller in size and easily to read. 6. Text-editor > html > miscellaneous > uncheck the auto ID option. Actually When you copy paste the html code Visual studio change their ID if ID is already exist. this option disable that feature. This is useful to do when we write if{} else {} statement and this is not helpful on that case. 7. Package manager > General > browse > copy the location of cache folder and in package source add them as source. This way you can use package that you have use earlier when you are offline. Thanks for read my post

    Read the article

  • Is it possible to automatically nofity for update of manually installed packages?

    - by Tim
    If having installed some packages downloaded from website , I was wondering if it is possible to have auto notification when its update is available, just as those packages in Ubuntu repositories. Can the packages downloaded be in deb form, or even in source code? For example, nevernote maintained in sourceforge, http://nevernote.sourceforge.net/index.htm, downloadable from http://sourceforge.net/projects/nevernote/files/Current/nevernote-0.99_i386.deb/download packages from Ubuntu PPA https://launchpad.net/ubuntu/+ppas.

    Read the article

  • A tinkered PC resets its nameserver (resolv.conf) on each boot

    - by aitchnyu
    The Ubuntu 11.10 PC resets resolv.conf on each boot, only with a comment remaining. How do I fix this by setting the persistent storage? It was tinkered by somebody else and I (and him!) cant trace his actions. The graphical connection manager also refuses to work thanks to the tinkering. Content of interfaces file: root@technovia-3:~/dev/spectrum/spectrum# cat /etc/network/interfaces auto lo iface lo inet loopback

    Read the article

  • [EF + Oracle] Inserting Data (Sequences) (2/2)

    - by JTorrecilla
    Prologue In the previous chapter we have see how to create DB records with EF, now we are going to Some Questions about Oracle.   ORACLE One characteristic from SQL Server that differs from Oracle is “Identity”. To all that has not worked with SQL Server, this property, that applies to Integer Columns, lets indicate that there is auto increment columns, by that way it will be filled automatically, without writing it on the insert statement. In EF with SQL Server, the properties whose match with Identity columns, will be filled after invoking SaveChanges method. In Oracle DB, there is no Identity Property, but there is something similar. Sequences Sequences are DB objects, that allow to create auto increment, but there are not related directly to a Table. The syntax is as follows: name, min value, max value and begin value. 1: CREATE SEQUENCE nombre_secuencia 2: INCREMENT BY numero_incremento 3: START WITH numero_por_el_que_empezara 4: MAXVALUE valor_maximo | NOMAXVALUE 5: MINVALUE valor_minimo | NOMINVALUE 6: CYCLE | NOCYCLE 7: ORDER | NOORDER 8:    How to get sequence value? To obtain the next val from the sequence: 1: SELECT nb_secuencia.Nextval 2: From Dual Due to there is no direct way to indicate that a column is related to a sequence, there is several ways to imitate the behavior: Use a Trigger (DB), Use Stored Procedures or Functions(…) or my particularly option. EF model, only, imports Table Objects, Stored Procedures or Functions, but not sequences. By that, I decide to create my own extension Method to invoke Next Val from a sequence: 1: public static class EFSequence 2: { 3: public static int GetNextValue(this ObjectContext contexto, string SequenceName) 4: { 5: string Connection = ConfigurationManager.ConnectionStrings["JTorrecillaEntities2"].ConnectionString; 6: Connection=Connection.Substring(Connection.IndexOf(@"connection string=")+19); 7: Connection = Connection.Remove(Connection.Length - 1, 1); 8: using (IDbConnection con = new Oracle.DataAccess.Client.OracleConnection(Connection)) 9: { 10: using (IDbCommand cmd = con.CreateCommand()) 11: { 12: con.Open(); 13: cmd.CommandText = String.Format("Select {0}.nextval from DUAL", SequenceName); 14: return Convert.ToInt32(cmd.ExecuteScalar()); 15: } 16: } 17:  18: } 19: } This Object Context’s extension method are going to invoke a query with the Sequence indicated by parameter. It takes the connection strings from the App settings, removing the meta data, that was created by VS when generated the EF model. And then, returns the next value from the Sequence. The next value of a Sequence is unique, by that, when some concurrent users are going to create records in the DB using the sequence will not get duplicates. This is my own implementation, I know that it could be several ways to do and better ways. If I find any other way, I promise to post it. To use the example is needed to add a reference to the Oracle (ODP.NET) dll.

    Read the article

  • Virtualbox windows 7 guest - pressing windows key launches unity menu

    - by Pablo
    Running win7 as guest in full screen mode. When i press windows key or alt+tab the vm looses focus and displays the unity menu or ubuntu's alt+tab. I've set the VBox configuration: File Menu - Input - Auto Capture Keyboard but it looks like some times it captures it and some times it doesn't Do you know how to run win7 in fullscreen and have all windows key or alt+tab strokes captured by the win7vm only?

    Read the article

  • Dual-boot: Can't select Windows at boot

    - by user88561
    I have a computer with 2 operating systems dual booted: One is Windows 7 and the other is Ubuntu. In the bootloader configuration, I removed an option stating time to select OS and I also set the default Operating System to Ubuntu. Now the bootloader is effectively proceeding into auto loading Ubuntu, while skipping itself. My problem is that I can not access my Windows 7 Operating System. Could someone give me a clue as to what to do?

    Read the article

  • ssh connection error

    - by evaG
    I'm trying to log into a ubuntu desktop. I get the following error message: PTY allocation request failed What does it mean and how to connect to my desktop ? Thanks edit: debug1: Reading configuration data /home/evag/.ssh/config debug1: /home/evag/.ssh/config line 1: Applying options for * debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: auto-mux: Trying existing master debug1: mux_client_request_session: master session id: 2 PTY allocation request failed

    Read the article

  • Is there a way to revert my Lubuntu to the "Previous Linux version" at the boot menu

    - by hung
    Today, after some auto upgrade i think, my Lubuntu boot to a blank wallpaper and wrong graphich display. If I boot my computer again, instead of select the first line in the boot menu, I select "previous linux version" and select one old version in the list then my computer boot fine. Now, is there a way to revert my linux to that version? Or I will always have to select this when I boot? Thank you very much

    Read the article

  • pppoeconf problem in ubuntu

    - by Vijay Nalawade
    pppoeconf now working in ubuntu 11.04. so i tried using network manager by adding dsl connection.after putting all details user name ,password , service name its working first time, named dslconnection1. but after rebooting i am not able to connect to internet. both ppppoeconf is not working and dslconnection1 option is not visible,also auto etho is not visible. so how to connect to internet in above case

    Read the article

  • Running multiple versions of Firefox [migrated]

    - by redconservatory
    I've been reading this: http://support.mozilla.org/en-US/questions/797010#answer-193690 But it looks like it only applies to running multiple versions of Firefox when it's Firefox 4. I need to run Firefox but it seems like a lot of my clients are still running versions of Firefox 3 (is this an operating system issue? Doesn't Firefox auto-update?) so I need to run 3 plus the latest version to troubleshoot some css issues...

    Read the article

  • Close button closes application behind the actual one. What is the problem?

    - by user34878
    Occasionally when I hit the close button ('x' on the left) instead of closing the application I am looking at, it closes another application. A very common example situation: I am using Firefox, and then I open the Trash directory (because Unity sux and make me click the trash icon in the auto-hide menu every time). Then I click in the close button and the trash do not go away, but Firefox does. How can I work around this problem?

    Read the article

  • SEO - What is That? - Why You Need to Do It!

    In this article I try to explain the differences between Internet Marketing and SEO or Search Engine Optimization in a simple form so it is easily understood. I think the importance of SEO is quite often overlooked for the easier and much emphasized way of marketing and that is email and lead generation marketing using a sequence of letters and auto responders. There is such a high failure rate in marketing today and I think part of that could be related to the form of marketing one is relying on.

    Read the article

  • Parallelism in .NET – Part 17, Think Continuations, not Callbacks

    - by Reed
    In traditional asynchronous programming, we’d often use a callback to handle notification of a background task’s completion.  The Task class in the Task Parallel Library introduces a cleaner alternative to the traditional callback: continuation tasks. Asynchronous programming methods typically required callback functions.  For example, MSDN’s Asynchronous Delegates Programming Sample shows a class that factorizes a number.  The original method in the example has the following signature: public static bool Factorize(int number, ref int primefactor1, ref int primefactor2) { //... .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } However, calling this is quite “tricky”, even if we modernize the sample to use lambda expressions via C# 3.0.  Normally, we could call this method like so: int primeFactor1 = 0; int primeFactor2 = 0; bool answer = Factorize(10298312, ref primeFactor1, ref primeFactor2); Console.WriteLine("{0}/{1} [Succeeded {2}]", primeFactor1, primeFactor2, answer); If we want to make this operation run in the background, and report to the console via a callback, things get tricker.  First, we need a delegate definition: public delegate bool AsyncFactorCaller( int number, ref int primefactor1, ref int primefactor2); Then we need to use BeginInvoke to run this method asynchronously: int primeFactor1 = 0; int primeFactor2 = 0; AsyncFactorCaller caller = new AsyncFactorCaller(Factorize); caller.BeginInvoke(10298312, ref primeFactor1, ref primeFactor2, result => { int factor1 = 0; int factor2 = 0; bool answer = caller.EndInvoke(ref factor1, ref factor2, result); Console.WriteLine("{0}/{1} [Succeeded {2}]", factor1, factor2, answer); }, null); This works, but is quite difficult to understand from a conceptual standpoint.  To combat this, the framework added the Event-based Asynchronous Pattern, but it isn’t much easier to understand or author. Using .NET 4’s new Task<T> class and a continuation, we can dramatically simplify the implementation of the above code, as well as make it much more understandable.  We do this via the Task.ContinueWith method.  This method will schedule a new Task upon completion of the original task, and provide the original Task (including its Result if it’s a Task<T>) as an argument.  Using Task, we can eliminate the delegate, and rewrite this code like so: var background = Task.Factory.StartNew( () => { int primeFactor1 = 0; int primeFactor2 = 0; bool result = Factorize(10298312, ref primeFactor1, ref primeFactor2); return new { Result = result, Factor1 = primeFactor1, Factor2 = primeFactor2 }; }); background.ContinueWith(task => Console.WriteLine("{0}/{1} [Succeeded {2}]", task.Result.Factor1, task.Result.Factor2, task.Result.Result)); This is much simpler to understand, in my opinion.  Here, we’re explicitly asking to start a new task, then continue the task with a resulting task.  In our case, our method used ref parameters (this was from the MSDN Sample), so there is a little bit of extra boiler plate involved, but the code is at least easy to understand. That being said, this isn’t dramatically shorter when compared with our C# 3 port of the MSDN code above.  However, if we were to extend our requirements a bit, we can start to see more advantages to the Task based approach.  For example, supposed we need to report the results in a user interface control instead of reporting it to the Console.  This would be a common operation, but now, we have to think about marshaling our calls back to the user interface.  This is probably going to require calling Control.Invoke or Dispatcher.Invoke within our callback, forcing us to specify a delegate within the delegate.  The maintainability and ease of understanding drops.  However, just as a standard Task can be created with a TaskScheduler that uses the UI synchronization context, so too can we continue a task with a specific context.  There are Task.ContinueWith method overloads which allow you to provide a TaskScheduler.  This means you can schedule the continuation to run on the UI thread, by simply doing: Task.Factory.StartNew( () => { int primeFactor1 = 0; int primeFactor2 = 0; bool result = Factorize(10298312, ref primeFactor1, ref primeFactor2); return new { Result = result, Factor1 = primeFactor1, Factor2 = primeFactor2 }; }).ContinueWith(task => textBox1.Text = string.Format("{0}/{1} [Succeeded {2}]", task.Result.Factor1, task.Result.Factor2, task.Result.Result), TaskScheduler.FromCurrentSynchronizationContext()); This is far more understandable than the alternative.  By using Task.ContinueWith in conjunction with TaskScheduler.FromCurrentSynchronizationContext(), we get a simple way to push any work onto a background thread, and update the user interface on the proper UI thread.  This technique works with Windows Presentation Foundation as well as Windows Forms, with no change in methodology.

    Read the article

  • JavaScript Intellisense Improvements with VS 2010

    This is the twentieth in a series of blog posts Im doing on the upcoming VS 2010 and .NET 4 release.  Todays blog post covers some of the nice improvements coming with JavaScript intellisense with VS 2010 and the free Visual Web Developer 2010 Express.  Youll find with VS 2010 that JavaScript Intellisense loads much faster for large script files and with large libraries, and that it now provides statement completion support for more advanced scenarios compared to previous versions...Did you know that DotNetSlackers also publishes .net articles written by top known .net Authors? We already have over 80 articles in several categories including Silverlight. Take a look: here.

    Read the article

  • The Incremental Architect&acute;s Napkin &ndash; #3 &ndash; Make Evolvability inevitable

    - by Ralf Westphal
    Originally posted on: http://geekswithblogs.net/theArchitectsNapkin/archive/2014/06/04/the-incremental-architectacutes-napkin-ndash-3-ndash-make-evolvability-inevitable.aspxThe easier something to measure the more likely it will be produced. Deviations between what is and what should be can be readily detected. That´s what automated acceptance tests are for. That´s what sprint reviews in Scrum are for. It´s no small wonder our software looks like it looks. It has all the traits whose conformance with requirements can easily be measured. And it´s lacking traits which cannot easily be measured. Evolvability (or Changeability) is such a trait. If an operation is correct, if an operation if fast enough, that can be checked very easily. But whether Evolvability is high or low, that cannot be checked by taking a measure or two. Evolvability might correlate with certain traits, e.g. number of lines of code (LOC) per function or Cyclomatic Complexity or test coverage. But there is no threshold value signalling “evolvability too low”; also Evolvability is hardly tangible for the customer. Nevertheless Evolvability is of great importance - at least in the long run. You can get away without much of it for a short time. Eventually, though, it´s needed like any other requirement. Or even more. Because without Evolvability no other requirement can be implemented. Evolvability is the foundation on which all else is build. Such fundamental importance is in stark contrast with its immeasurability. To compensate this, Evolvability must be put at the very center of software development. It must become the hub around everything else revolves. Since we cannot measure Evolvability, though, we cannot start watching it more. Instead we need to establish practices to keep it high (enough) at all times. Chefs have known that for long. That´s why everybody in a restaurant kitchen is constantly seeing after cleanliness. Hygiene is important as is to have clean tools at standardized locations. Only then the health of the patrons can be guaranteed and production efficiency is constantly high. Still a kitchen´s level of cleanliness is easier to measure than software Evolvability. That´s why important practices like reviews, pair programming, or TDD are not enough, I guess. What we need to keep Evolvability in focus and high is… to continually evolve. Change must not be something to avoid but too embrace. To me that means the whole change cycle from requirement analysis to delivery needs to be gone through more often. Scrum´s sprints of 4, 2 even 1 week are too long. Kanban´s flow of user stories across is too unreliable; it takes as long as it takes. Instead we should fix the cycle time at 2 days max. I call that Spinning. No increment must take longer than from this morning until tomorrow evening to finish. Then it should be acceptance checked by the customer (or his/her representative, e.g. a Product Owner). For me there are several resasons for such a fixed and short cycle time for each increment: Clear expectations Absolute estimates (“This will take X days to complete.”) are near impossible in software development as explained previously. Too much unplanned research and engineering work lurk in every feature. And then pervasive interruptions of work by peers and management. However, the smaller the scope the better our absolute estimates become. That´s because we understand better what really are the requirements and what the solution should look like. But maybe more importantly the shorter the timespan the more we can control how we use our time. So much can happen over the course of a week and longer timespans. But if push comes to shove I can block out all distractions and interruptions for a day or possibly two. That´s why I believe we can give rough absolute estimates on 3 levels: Noon Tonight Tomorrow Think of a meeting with a Product Owner at 8:30 in the morning. If she asks you, how long it will take you to implement a user story or bug fix, you can say, “It´ll be fixed by noon.”, or you can say, “I can manage to implement it until tonight before I leave.”, or you can say, “You´ll get it by tomorrow night at latest.” Yes, I believe all else would be naive. If you´re not confident to get something done by tomorrow night (some 34h from now) you just cannot reliably commit to any timeframe. That means you should not promise anything, you should not even start working on the issue. So when estimating use these four categories: Noon, Tonight, Tomorrow, NoClue - with NoClue meaning the requirement needs to be broken down further so each aspect can be assigned to one of the first three categories. If you like absolute estimates, here you go. But don´t do deep estimates. Don´t estimate dozens of issues; don´t think ahead (“Issue A is a Tonight, then B will be a Tomorrow, after that it´s C as a Noon, finally D is a Tonight - that´s what I´ll do this week.”). Just estimate so Work-in-Progress (WIP) is 1 for everybody - plus a small number of buffer issues. To be blunt: Yes, this makes promises impossible as to what a team will deliver in terms of scope at a certain date in the future. But it will give a Product Owner a clear picture of what to pull for acceptance feedback tonight and tomorrow. Trust through reliability Our trade is lacking trust. Customers don´t trust software companies/departments much. Managers don´t trust developers much. I find that perfectly understandable in the light of what we´re trying to accomplish: delivering software in the face of uncertainty by means of material good production. Customers as well as managers still expect software development to be close to production of houses or cars. But that´s a fundamental misunderstanding. Software development ist development. It´s basically research. As software developers we´re constantly executing experiments to find out what really provides value to users. We don´t know what they need, we just have mediated hypothesises. That´s why we cannot reliably deliver on preposterous demands. So trust is out of the window in no time. If we switch to delivering in short cycles, though, we can regain trust. Because estimates - explicit or implicit - up to 32 hours at most can be satisfied. I´d say: reliability over scope. It´s more important to reliably deliver what was promised then to cover a lot of requirement area. So when in doubt promise less - but deliver without delay. Deliver on scope (Functionality and Quality); but also deliver on Evolvability, i.e. on inner quality according to accepted principles. Always. Trust will be the reward. Less complexity of communication will follow. More goodwill buffer will follow. So don´t wait for some Kanban board to show you, that flow can be improved by scheduling smaller stories. You don´t need to learn that the hard way. Just start with small batch sizes of three different sizes. Fast feedback What has been finished can be checked for acceptance. Why wait for a sprint of several weeks to end? Why let the mental model of the issue and its solution dissipate? If you get final feedback after one or two weeks, you hardly remember what you did and why you did it. Resoning becomes hard. But more importantly youo probably are not in the mood anymore to go back to something you deemed done a long time ago. It´s boring, it´s frustrating to open up that mental box again. Learning is harder the longer it takes from event to feedback. Effort can be wasted between event (finishing an issue) and feedback, because other work might go in the wrong direction based on false premises. Checking finished issues for acceptance is the most important task of a Product Owner. It´s even more important than planning new issues. Because as long as work started is not released (accepted) it´s potential waste. So before starting new work better make sure work already done has value. By putting the emphasis on acceptance rather than planning true pull is established. As long as planning and starting work is more important, it´s a push process. Accept a Noon issue on the same day before leaving. Accept a Tonight issue before leaving today or first thing tomorrow morning. Accept a Tomorrow issue tomorrow night before leaving or early the day after tomorrow. After acceptance the developer(s) can start working on the next issue. Flexibility As if reliability/trust and fast feedback for less waste weren´t enough economic incentive, there is flexibility. After each issue the Product Owner can change course. If on Monday morning feature slices A, B, C, D, E were important and A, B, C were scheduled for acceptance by Monday evening and Tuesday evening, the Product Owner can change her mind at any time. Maybe after A got accepted she asks for continuation with D. But maybe, just maybe, she has gotten a completely different idea by then. Maybe she wants work to continue on F. And after B it´s neither D nor E, but G. And after G it´s D. With Spinning every 32 hours at latest priorities can be changed. And nothing is lost. Because what got accepted is of value. It provides an incremental value to the customer/user. Or it provides internal value to the Product Owner as increased knowledge/decreased uncertainty. I find such reactivity over commitment economically very benefical. Why commit a team to some workload for several weeks? It´s unnecessary at beast, and inflexible and wasteful at worst. If we cannot promise delivery of a certain scope on a certain date - which is what customers/management usually want -, we can at least provide them with unpredecented flexibility in the face of high uncertainty. Where the path is not clear, cannot be clear, make small steps so you´re able to change your course at any time. Premature completion Customers/management are used to premeditating budgets. They want to know exactly how much to pay for a certain amount of requirements. That´s understandable. But it does not match with the nature of software development. We should know that by now. Maybe there´s somewhere in the world some team who can consistently deliver on scope, quality, and time, and budget. Great! Congratulations! I, however, haven´t seen such a team yet. Which does not mean it´s impossible, but I think it´s nothing I can recommend to strive for. Rather I´d say: Don´t try this at home. It might hurt you one way or the other. However, what we can do, is allow customers/management stop work on features at any moment. With spinning every 32 hours a feature can be declared as finished - even though it might not be completed according to initial definition. I think, progress over completion is an important offer software development can make. Why think in terms of completion beyond a promise for the next 32 hours? Isn´t it more important to constantly move forward? Step by step. We´re not running sprints, we´re not running marathons, not even ultra-marathons. We´re in the sport of running forever. That makes it futile to stare at the finishing line. The very concept of a burn-down chart is misleading (in most cases). Whoever can only think in terms of completed requirements shuts out the chance for saving money. The requirements for a features mostly are uncertain. So how does a Product Owner know in the first place, how much is needed. Maybe more than specified is needed - which gets uncovered step by step with each finished increment. Maybe less than specified is needed. After each 4–32 hour increment the Product Owner can do an experient (or invite users to an experiment) if a particular trait of the software system is already good enough. And if so, she can switch the attention to a different aspect. In the end, requirements A, B, C then could be finished just 70%, 80%, and 50%. What the heck? It´s good enough - for now. 33% money saved. Wouldn´t that be splendid? Isn´t that a stunning argument for any budget-sensitive customer? You can save money and still get what you need? Pull on practices So far, in addition to more trust, more flexibility, less money spent, Spinning led to “doing less” which also means less code which of course means higher Evolvability per se. Last but not least, though, I think Spinning´s short acceptance cycles have one more effect. They excert pull-power on all sorts of practices known for increasing Evolvability. If, for example, you believe high automated test coverage helps Evolvability by lowering the fear of inadverted damage to a code base, why isn´t 90% of the developer community practicing automated tests consistently? I think, the answer is simple: Because they can do without. Somehow they manage to do enough manual checks before their rare releases/acceptance checks to ensure good enough correctness - at least in the short term. The same goes for other practices like component orientation, continuous build/integration, code reviews etc. None of that is compelling, urgent, imperative. Something else always seems more important. So Evolvability principles and practices fall through the cracks most of the time - until a project hits a wall. Then everybody becomes desperate; but by then (re)gaining Evolvability has become as very, very difficult and tedious undertaking. Sometimes up to the point where the existence of a project/company is in danger. With Spinning that´s different. If you´re practicing Spinning you cannot avoid all those practices. With Spinning you very quickly realize you cannot deliver reliably even on your 32 hour promises. Spinning thus is pulling on developers to adopt principles and practices for Evolvability. They will start actively looking for ways to keep their delivery rate high. And if not, management will soon tell them to do that. Because first the Product Owner then management will notice an increasing difficulty to deliver value within 32 hours. There, finally there emerges a way to measure Evolvability: The more frequent developers tell the Product Owner there is no way to deliver anything worth of feedback until tomorrow night, the poorer Evolvability is. Don´t count the “WTF!”, count the “No way!” utterances. In closing For sustainable software development we need to put Evolvability first. Functionality and Quality must not rule software development but be implemented within a framework ensuring (enough) Evolvability. Since Evolvability cannot be measured easily, I think we need to put software development “under pressure”. Software needs to be changed more often, in smaller increments. Each increment being relevant to the customer/user in some way. That does not mean each increment is worthy of shipment. It´s sufficient to gain further insight from it. Increments primarily serve the reduction of uncertainty, not sales. Sales even needs to be decoupled from this incremental progress. No more promises to sales. No more delivery au point. Rather sales should look at a stream of accepted increments (or incremental releases) and scoup from that whatever they find valuable. Sales and marketing need to realize they should work on what´s there, not what might be possible in the future. But I digress… In my view a Spinning cycle - which is not easy to reach, which requires practice - is the core practice to compensate the immeasurability of Evolvability. From start to finish of each issue in 32 hours max - that´s the challenge we need to accept if we´re serious increasing Evolvability. Fortunately higher Evolvability is not the only outcome of Spinning. Customer/management will like the increased flexibility and “getting more bang for the buck”.

    Read the article

< Previous Page | 104 105 106 107 108 109 110 111 112 113 114 115  | Next Page >