<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Máirín Duffy &#187; Interaction Design</title>
	<atom:link href="http://mairin.wordpress.com/category/interaction-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://mairin.wordpress.com</link>
	<description>Open design forever.</description>
	<lastBuildDate>Sun, 18 Sep 2011 15:08:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mairin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Máirín Duffy &#187; Interaction Design</title>
		<link>http://mairin.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mairin.wordpress.com/osd.xml" title="Máirín Duffy" />
	<atom:link rel='hub' href='http://mairin.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Ideas for a cgroups UI</title>
		<link>http://mairin.wordpress.com/2011/05/13/ideas-for-a-cgroups-ui/</link>
		<comments>http://mairin.wordpress.com/2011/05/13/ideas-for-a-cgroups-ui/#comments</comments>
		<pubDate>Fri, 13 May 2011 23:28:07 +0000</pubDate>
		<dc:creator>mairin</dc:creator>
				<category><![CDATA[cgroups]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Interaction Design]]></category>
		<category><![CDATA[Interaction Design Work]]></category>

		<guid isPermaLink="false">http://mairin.wordpress.com/?p=2801</guid>
		<description><![CDATA[On and off over the past year I&#8217;ve been working with Jason Baron on a design for a UI for system administrators to control processes&#8217; and users&#8217; usage of system resources on their systems via the relatively recently-developed (~2007) cgroups feature of the Linux kernel. After the excitement and the fun that is the Red &#8230; <a href="http://mairin.wordpress.com/2011/05/13/ideas-for-a-cgroups-ui/">Continue reading <span class="meta-nav">&#187;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mairin.wordpress.com&#038;blog=929179&#038;post=2801&#038;subd=mairin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>On and off over the past year I&#8217;ve been working with Jason Baron on a design for a UI for system administrators to control processes&#8217; and users&#8217; usage of system resources on their systems via the relatively recently-developed (~2007) <a href="http://en.wikipedia.org/wiki/Cgroups">cgroups feature of the Linux kernel</a>. </p>
<p>After the excitement and the fun that is the <a href="http://www.redhat.com/summit/">Red Hat Summit</a>, I had some time this week to work with Jason on updating the design. Before I dive into the design process and the mockups, I think it&#8217;d be best to do a review of how cgroups work (or at least how I understand them to) so that the rest makes more sense. (And maybe I&#8217;ve got some totally incorrect assumptions about cgroups that have resulted in a flawed design, so hopefully my calling out the current understanding might make it easier for you to correct me <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). </p>
<h3>A designer&#8217;s understanding of cgroups via diagram</h3>
<p>So cgroups, which are sometimes referred to as containers (I think because a similar Solaris feature, zones, is sometimes called <a href="http://en.wikipedia.org/wiki/Operating_system-level_virtualization">containers</a>) can be used to slice an entire operating system into buckets, similarly to how virtual machines slice up their host system into buckets, but without having to go so far as replicating an entire set of hardware.</p>
<p><img src="http://duffy.fedorapeople.org/blog/designs/cgroups/diagram.png" alt="" /></p>
<p>So this diagram kind of shows how four of the system resources that cgroups can control &#8211; CPU, memory, network, and storage I/O &#8211; could be cut into slices that are then combined into two groups &#8211; the yellow and the purple one &#8211; which make up virtual OSes. Say I gave cgroup #1 (yellow) to Sally, and cgroup #2 (purple) to Joe. Whenever Sally starts a process, you could set it to only run on the CPUs that are members of cgroup #1 (via cpuset), at whatever priority level is set for those CPUs (via cpu). It&#8217;ll only be able to use as much memory as was allocated to cgroup #1, only be able to use as much network and I/O bandwidth as cgroup #1 is able to use. When Joe starts a process, because he&#8217;s part of cgroup #2, he won&#8217;t be using the same CPUs as Sally. He may have more or less memory, I/O, and network bandwidth allocated to him. </p>
<p>It&#8217;s kind of / sort of like Joe and Sally are using different computers, on the same operating system. Cool, right? </p>
<p>Cgroups don&#8217;t have to go that deep, though. You don&#8217;t need to slice across an entire system. </p>
<p><img src="http://duffy.fedorapeople.org/blog/designs/cgroups/diagram2.png" alt="" /></p>
<p>You can have a cgroup that *just* deals with controlling access to the CPU. Or *just* controls memory. Or maybe only deals with two of the four (CPU, Memory, Network, I/O) resources, or just three of the four.</p>
<p>You can have a cgroup that *just* deals with one resource (say CPU), and that group only deals with specific processes. Or users. Or a combination thereof. (More later on that.)</p>
<p><img src="http://duffy.fedorapeople.org/blog/designs/cgroups/diagram3.png" alt="" /></p>
<p>Depending on the resource you&#8217;re looking to control and the cgroups module you&#8217;re using, you can configure access to that resource in different ways. I believe one of the more common ways of controlling CPU usage via cgroups is to assign &#8216;shares&#8217; for various groups&#8217; usage of the CPU (<a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html-single/Resource_Management_Guide/index.html#sec-cpu">using the &#8216;cpu&#8217; module</a>.) I&#8217;m not sure what scale/units these shares are on, but they are relative to each other, so if I give group #1 a weight a 1024, and group #3 a weight of 2048, then group #3 will get scheduled for CPU time twice as much as group #1 will. </p>
<p>I don&#8217;t think this share system is particularly intuitive, which is still an open problem in the current draft of the UI design.</p>
<p>Other resources and modules let you control access in different ways. For example, the memory module lets you configure an upper bound of memory usage, I believe <a href="http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt">via providing the maximum number of bytes of memory that could be used by members of the group</a>.</p>
<p>You can create and apply cgroups to processes and users on-the-fly or on a longer-term / persistent basis. Say some process is running amok and is starving other processes on your system&#8230; you can change the process&#8217; cgroup membership on-the-fly to provide it a more limited set of system resources so that other processes on the system can run. However, this change would be temporal and may be based, for example, on a specific pid number that won&#8217;t apply if the process is restarted or the system is rebooted. If you&#8217;d like more persistent cgroup membership, you can create a set of rules (cgrules.conf). A neat simple thing you could do with cgroup rules, for example, is something mentioned by Linda Wang <a href="http://www.redhat.com/summit/2011/presentations/summit/in_the_weeds/friday/WangKozdemba_f_1130_cgroups14.pdf">in her Red Hat Summit talk on cgroups</a>; you could arrange your cgroups rules such that the sshd always gets a dedicated chunk of CPU time so that if a process runs amok on a server system, you still might be able to ssh in remotely to diagnose the problem.</p>
<p><img src="http://duffy.fedorapeople.org/blog/designs/cgroups/diagram5.png" alt="" /></p>
<p>It&#8217;s via these rules that you can set up persistent groups on the system. It would be kind of a pain to have to set them up every time a system is rebooted, especially the more processes and users you&#8217;re managing, and the more groups you need to create in order to manage them. You can use multiple cgroups modules (for example, cpu, cpuset, mem, net) within a single cgroup, and then write rules to place processes run by particular users and/or user groups into the cgroup, or write rules to place processes matching particular attributes into the group. </p>
<p>Above is a diagram demonstrating a cgroup that restricts only CPU usage for processes matching firefox-*, npviewer.bin run by users that are in the &#8216;guest&#8217; group or whose usernames are &#8216;student1&#8242; or &#8216;student2&#8242;. Kind of putting it all together, showing a single group and its resource allocation, and its associations with particular users and processes.</p>
<h3>Who would use a UI for this, and why?</h3>
<p>Tthe UI design mostly focuses on setting up persistent rules, and doesn&#8217;t really allow for on-the-fly cgroups rearrangement of currently-running processes and currently-logged in users. The thinking behind this is that there might be a couple of main reasons you&#8217;d be using a UI for cgroups:</p>
<ul>
<li><strong>Proactive</strong>: Initial system resource allocation planning</li>
<li><strong>Reactive</strong>: In response to a complaint &#8211; &#8216;My processes are getting capped,&#8217; or &#8216;Such-and-such process isn&#8217;t running right.&#8217;</li>
</ul>
<p>Thinking about the way my previous experience with system administrators has typically gone, there&#8217;s sadly not usually a lot of time for proactive planning and organization &#8211; a majority of time tends to get spent on reacting to client concerns. If someone is calling you up on the phone to tell you that a process they are relying on has gone awry, it seems the most effective way to get them to stop calling you would be to change the rules to make a more persistent change to help them, rather than to just apply a change on the fly and wait for their next phone call. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  So I think you&#8217;d probably prefer to change rules in reaction to a client complaint, not just do an on-the-fly change (although you could.) When you&#8217;re being proactive and initially setting up a system, I think you&#8217;d not want to do that on-the-fly at all, because you&#8217;d have to keep reapplying. It&#8217;d be better to craft a set of rules to persist on the system.</p>
<p>So it seems like these two main use case types &#8211; proactive resource allocation, and reactive allocation adjustments based on client feedback &#8211; are both best served by focusing on rules, so that&#8217;s why the UI design only focuses on those.</p>
<p>Maybe there is a case for doing the on-the-fly stuff though. It does make for some pretty awesome demos, though, like the one Bob Kozdemba gave at the Red Hat Summit last Friday, moving multiple copies of a graphics rendering tool between cgroups and vms and changing their configuration on the fly so you could visually see the affect of resource caps on the processes.) You could also use the on-the-fly configuration changes to test out a theory about how you should set the rules. </p>
<p>So, specifically, what kinds of problems could we imagine a user looking to solve with this interface? Our thoughts were that most likely a system administrator would find it most useful:</p>
<h4>Under the &#8216;Proactive&#8217; Category:</h4>
<ul>
<li>I have a system running a business-critical app that sadly has a memory leak, and I want to make sure that app doesn&#8217;t screw up the other apps running on the system. I&#8217;d like to put a cap on its memory usage so when it goes down it doesn&#8217;t take the rest of the system down with it.</li>
<li>I have a thin-client lab meant for the use of students in the science department, but students from other departments are allowed access via guest accounts. I&#8217;d like to make sure the guest accounts don&#8217;t block any of the science department students&#8217; work on the server.</li>
<li>I&#8217;m an administrator at an ISP and we provide virtual machines to end users in different pricing tiers. I&#8217;d like to enforce the limits set by our pricing tiers so that customers&#8217; VMs aren&#8217;t getting more power than they are paying for and aren&#8217;t starving customers that are paying for more power.</li>
</ul>
<h4>Under the &#8216;Reactive&#8217; Category:</h4>
<ul>
<li>A student from the science department has called helpdesk to complain that his simulations don&#8217;t have very much oomph and are taking far too long to run. I need to figure out what system resource policy might apply to this user, and make modifications to his policy as needed to help him out if possible. (For example, perhaps he was previously outside of the science department and just transferred in, so he&#8217;s still running in the guest group.)</li>
<li>Uh-oh, something&#8217;s gone wrong. A business critical process keeps getting OOM&#8217;ed! I need to figure out what resource allocation policy applies to it to see if there a rules that are causing the issue / that could be adjusted to get the app running consistently again.</li>
<li>Our bi-weekly payroll processing application is still going full-steam ahead but it&#8217;s Monday morning, the business day is starting, and that server needs to be used for other things. Whoops, that&#8217;s never happened before, it usually finishes on Sunday. I need to see what policy applies to it, and modify our rules so that the payroll process tones things down a bit if it hasn&#8217;t finished over the weekend.</li>
</ul>
<h3>The mockups</h3>
<p>So after <strong>a lot</strong> of sketching, crossing out, sketching, crossing out, and thinking about the above types of use cases, we thought to break up the main window in this way:</p>
<ul>
<li><strong>A users tab</strong>: For when you have a specific user/group in mind you&#8217;d like to limit, or if you&#8217;ve got a specific user on the phone who you&#8217;re trying to troubleshoot with;</li>
<li><strong>A processes tab</strong>: For when you have a specific process in mind you&#8217;d like to limit, or if you&#8217;ve got someone on the phone upset about a particular process you need to help debug;</li>
<li><strong>A containers tab</strong>: For when you need to initially create your cgroups, or if you&#8217;d like to tweak the configuration of a particular group, or if you&#8217;d like to see how the processes within the group are performing.</li>
</ul>
<p>So here&#8217;s what they look like:</p>
<h4>The users tab</h4>
<p><a href="https://fedoraproject.org/w/uploads/0/0d/Cgroups-mockup-2-usertab.png"><img src="https://fedoraproject.org/w/uploads/thumb/0/0d/Cgroups-mockup-2-usertab.png/500px-Cgroups-mockup-2-usertab.png" alt="users tab" /></a></p>
<h4>The processes tab</h4>
<p><a href="https://fedoraproject.org/w/uploads/4/4e/Cgroups-mockup-2-processestab.png"><img src="https://fedoraproject.org/w/uploads/thumb/4/4e/Cgroups-mockup-2-processestab.png/500px-Cgroups-mockup-2-processestab.png" alt="processes tab" /></a></p>
<h4>The containers tab</h4>
<p><a href="https://fedoraproject.org/w/uploads/d/df/Cgroups-mockup-2-containerstab.png"><img src="https://fedoraproject.org/w/uploads/thumb/d/df/Cgroups-mockup-2-containerstab.png/500px-Cgroups-mockup-2-containerstab.png" alt="containers tab" /></a></p>
<h4>Some issues / further work</h4>
<p>Here&#8217;s a bit of a braindump of where these need more work:</p>
<ol>
<li>So I mentioned in one of the example use cases a payroll application, that could run full steam during the weekend but had to be dialed back during the work week. Well &#8211; this UI design doesn&#8217;t account for scheduling in the rules, yet.</li>
<li>There&#8217;s no mockups for the various dialogs needed for adding and modifying rules.</li>
<li>It would be cool to do a mockup showing how this might integrate into the GNOME system monitor &#8211; maybe an additional filter on it?</li>
<li>It would also be cool to have some kind of integration with the user accounts dialog. Maybe it&#8217;d show the policy that applied to a user and let you modify it from that dialog?</li>
<li>Right now in the containers tab, we had the idea to list the containers by the resource they are managing &#8211; so groups involving cpu, cpuset, cpuacct for example would all be listed under a &#8216;CPU&#8217; category. However, Jason had an idea about showing logical cgroups that span resource types &#8211; e.g., you might have a cgroup tuned for DB usage with different settings for CPU in combination with memory &amp; I/O.</li>
<li>The users and processes tab doesn&#8217;t really let you monitor resource usage per user / per process. Is that needed? Not sure.</li>
<li>Units &#8211; shares vs upper limits vs&#8230; the actual numbers you&#8217;re configuring for each rule need to be fleshed out. If cpu / cpuset / cpuacct for example can be used in conjunction, how would that be shown in the UI?</li>
<li>What about a mechanism to compare effective resource allocation vs actual resource usage? So you could see, &#8216;hey, this process is starved, maybe we should consider upping it,&#8217; or &#8216;hey, this user isn&#8217;t really coming anywhere near their limits, should we dial them down?&#8217; <a href="https://fedoraproject.org/wiki/Design/CGroupsUI/Draft1">An earlier draft of the mockups</a> showed graphs of each for comparison.</li>
<li><strong>(Edit: idea from Bill Nottingham)</strong> Support multiple systems in one UI over the network</li>
</ol>
<p>The wiki page for this design (including Inkscape SVG sources) is here:<br />
<a href="https://fedoraproject.org/wiki/Design/CGroupsUI">http://fedoraproject.org/wiki/Design/CGroupsUI</a></p>
<h3>Feedback</h3>
<p>Is this nuts? Does it make sense? Is this the wrong approach? Do you use cgroups? Would this be a useful tool, or does it suck?</p>
<p>I hope you&#8217;ll let us know.</p>
<br />Filed under: <a href='http://mairin.wordpress.com/category/fedora/cgroups/'>cgroups</a>, <a href='http://mairin.wordpress.com/category/fedora/'>Fedora</a>, <a href='http://mairin.wordpress.com/category/interaction-design/'>Interaction Design</a>, <a href='http://mairin.wordpress.com/category/interaction-design-work/'>Interaction Design Work</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mairin.wordpress.com/2801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mairin.wordpress.com/2801/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mairin.wordpress.com&#038;blog=929179&#038;post=2801&#038;subd=mairin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mairin.wordpress.com/2011/05/13/ideas-for-a-cgroups-ui/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/06679d1adeaa0f535752137036c004a8?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">mairin</media:title>
		</media:content>

		<media:content url="http://duffy.fedorapeople.org/blog/designs/cgroups/diagram.png" medium="image" />

		<media:content url="http://duffy.fedorapeople.org/blog/designs/cgroups/diagram2.png" medium="image" />

		<media:content url="http://duffy.fedorapeople.org/blog/designs/cgroups/diagram3.png" medium="image" />

		<media:content url="http://duffy.fedorapeople.org/blog/designs/cgroups/diagram5.png" medium="image" />

		<media:content url="https://fedoraproject.org/w/uploads/thumb/0/0d/Cgroups-mockup-2-usertab.png/500px-Cgroups-mockup-2-usertab.png" medium="image">
			<media:title type="html">users tab</media:title>
		</media:content>

		<media:content url="https://fedoraproject.org/w/uploads/thumb/4/4e/Cgroups-mockup-2-processestab.png/500px-Cgroups-mockup-2-processestab.png" medium="image">
			<media:title type="html">processes tab</media:title>
		</media:content>

		<media:content url="https://fedoraproject.org/w/uploads/thumb/d/df/Cgroups-mockup-2-containerstab.png/500px-Cgroups-mockup-2-containerstab.png" medium="image">
			<media:title type="html">containers tab</media:title>
		</media:content>
	</item>
		<item>
		<title>REINITIALIZING WILL CAUSE ALL DATA TO BE LOST!</title>
		<link>http://mairin.wordpress.com/2010/12/02/reinitializing-will-cause-all-data-to-be-lost/</link>
		<comments>http://mairin.wordpress.com/2010/12/02/reinitializing-will-cause-all-data-to-be-lost/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 18:31:44 +0000</pubDate>
		<dc:creator>mairin</dc:creator>
				<category><![CDATA[Anaconda]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Interaction Design]]></category>

		<guid isPermaLink="false">http://mairin.wordpress.com/?p=2663</guid>
		<description><![CDATA[This post is just a little bit of thinking about a particular warning dialog in the Fedora installer. There is a &#8216;just for now,&#8217; simple, low-churn solution to the issue, but the larger problem remains unsolved. I&#8217;ve also documented this saga in the Fedora wiki for posterity. It&#8217;s what I&#8217;ve been looking at over the &#8230; <a href="http://mairin.wordpress.com/2010/12/02/reinitializing-will-cause-all-data-to-be-lost/">Continue reading <span class="meta-nav">&#187;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mairin.wordpress.com&#038;blog=929179&#038;post=2663&#038;subd=mairin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This post is just a little bit of thinking about a particular warning dialog in the Fedora installer. There is a &#8216;just for now,&#8217; simple, low-churn solution to the issue, but the larger problem remains unsolved. I&#8217;ve also <a href="https://fedoraproject.org/wiki/Anaconda/UX_Redesign/Anaconda_Storage_Reinit#Text-massaging_approach_-_simplest">documented this saga in the Fedora wiki</a> for posterity. It&#8217;s what I&#8217;ve been looking at over the past couple of days.</p>
<h2>The problem</h2>
<p><img src="https://fedoraproject.org/w/uploads/thumb/5/5b/Anaconda-storage-reinit-screenshot_f14.png/600px-Anaconda-storage-reinit-screenshot_f14.png"></p>
<h3>Background</h3>
<p>See the screenshot above? Scary little bugger, right? Yep, there&#8217;s a few issues with this screen. We&#8217;ve received bugs on it requesting that the text be changed to be more accurate. There&#8217;s bigger problems than that, though.
</p>
<p>Let&#8217;s go a bit into the background of this dialog. It occurs early on in the screen flow:
</p>
<p>[ lang selection ] =&gt; [ keyboard selection ] =&gt; [ basic or special storage ] =&gt; [ <b>REINIT DIALOG</b> ] =&gt; [ hostname selection ]
</p>
<p><a title="http://git.fedorahosted.org/git/?p=anaconda.git;a=blob;f=pyanaconda/dispatch.py#l68" class="external text" href="http://git.fedorahosted.org/git/?p=anaconda.git;a=blob;f=pyanaconda/dispatch.py#l68">Here&#8217;s the full order of things in the anaconda code</a>.
</p>
<p><a title="https://fedoraproject.org/w/uploads/2/2e/Anaconda-f14-dvd-ss_storagetype.png" class="external text" href="https://fedoraproject.org/w/uploads/2/2e/Anaconda-f14-dvd-ss_storagetype.png">The screen that asks if you have basic or specialized storage</a> must come towards the beginning of the screen set, because it is at this point anaconda has to scan to see if any pre-existing installations are on the system in order to know if we can upgrade a pre-existing system or not. However, we don&#8217;t want to scan specialized storage devices which may be mounted to the machine if we know for sure that the user isn&#8217;t interested in using them as part of the install &#8211; it&#8217;ll take a while, it may spins up a lot of devices that were not active using more electricity, putting wear on equipment, etc. hitting a lot of networks.
</p>
<ul>
<li> If you pick basic, anaconda just scans <b>local devices</b>.
</li>
<li> If you pick specialized, anaconda scans <b>local devices &amp; network storage devices</b>. This route also gives you the option of adding iscsi and other kinds of disks that require user input to be able to discover.
</li>
</ul>
<p>There may be a false assumption here &#8211; someone may want to use specialized storage devices as install targets, in which case scanning them for upgradable bits makes sense. However, someone may also simply want to use specialized storage devices as mounted data storage, in which case we shouldn&#8217;t bother scanning them for upgradable bits.
</p>
<p>Anyhow, once we know which devices to scan (local if basic, local+network if specialized), they are scanned and if any of them appear to have missing partition tables, this dialog is popped up.
</p>
<p>Anaconda may not know how to read the partitions on the drive, another operating system may be able to. There *could* be data on that drive, but we just don&#8217;t know because we don&#8217;t know how to read it. The drive may very well be blank (if it&#8217;s brand-new / baremetal) or it could be a virtual drive and have no data either. So our dilemma is:</b>
</p>
<ul>
<li> we can&#8217;t mount the drive as a data drive if we can&#8217;t read the partitions, so it&#8217;s useless.</li>
<li> we can&#8217;t use the drive as an install target unless we completely format it.</li>
<li> there may be data on the drive, we just don&#8217;t know. if we reinitialize a drive that was only meant to be a data drive&#8230; we&#8217;re erasing data for no good reason. </li>
<li> there may not be any data at all in which case popping up the dialog instead of just reinitializing the disk and being quiet about it without causing so much bother.</li>
</ul>
<h3>Problems</h3>
<p><img width="600" height="451" border="0" src="https://fedoraproject.org/w/uploads/thumb/c/c3/Anaconda-storage-reinit-screenshot_f14-notes.png/600px-Anaconda-storage-reinit-screenshot_f14-notes.png" alt="">
</p>
<p>Here are the problems you can see just looking at a screen surface level here:
</p>
<ul>
<li> The titlebar says warning. The text says error. The icon indicates a question. These are all in conflict with one another. This dialog is more of a warning dialog than anything else.
</li>
<li> The metadata about the drive in question is strewn all over the dialog and hard to read.
</li>
<li> The dialog uses the word &#8216;reinitialized&#8217; and &#8216;re-initialized&#8217; multiple times without explaining what it means.
</li>
<li> THE DIALOG USES ALL CAPS
</li>
<li> The dialog says that re-initializing will cause all data to be lost, but actually, it will only cause data on the drives being reinitialized to be lost, and only if there was any data in the first place (which there might not have been.)
</li>
<li> Four buttons across the bottom of the screen is a bit of an overload, yet if we had say 100 such devices attached to the system (slices of a network drive maybe) then we would see this dialog 100 times without those extra &#8216;all&#8217; buttons.
</li>
<li> What does ignore do? Ignore what? Ignore this warning and go ahead an re-initialize? Wait a minute&#8230; (It actually ignores the drive in question, removing it from the set of drives considered in the install process)
</li>
<li> Overall, the dialog is scary, and this fright is brought up in situations that should not be frightful &#8211; e.g., you&#8217;re simply installing on a virtual machine with a virtual disk. No need for the scare!
</li>
</ul>
<h3>Design Challenges</h3>
<p>Here&#8217;s some of the things that make resolving these problems a bit dicey:</p>
<ul>
<li> Two classes of users who simply don&#8217;t care about this dialog and for whom it&#8217;s a waste of times / click effort are users installing virtual machines and users who have brand new hard drives. The default choice of reinitializing all soothes these folks.
</li>
<li> This dialog might come up towards the beginning of the installer screenflow, or closer to the partitioning screen. There are two storage device scans that happen &#8211; because some drives (like iscsi drives where you need to manually input address information) can&#8217;t be scanned for until you hit later screens.
</li>
<li> We need to prevent users from clicking next-next-next and destroying a drive (That they might not necessarily own if it&#8217;s networked!) by accident. This is one reason the dialog is currently a dialog rather than a regular screen. It&#8217;s difficult to remove the next &amp; back buttons in the middle of the screen flow.
</li>
<li> There&#8217;s a big difference between what this reinitialization thing means for data drives vs install targets. Data drives are added in anaconda so automounts can be set up. We can&#8217;t mount a drive that we can&#8217;t read. While it sucks, it&#8217;s far less sever than the other case, in which an install target can&#8217;t be used unless we wipe it.
</li>
<li> We can&#8217;t move the basic vs. specialized selection screen to be with the rest of the storage device screens, because it&#8217;s the scan that takes place here that determines if an upgrade is possible (it examines the drives, looking for pre-existing &amp; upgradeable installations.) The problem here is that it&#8217;s really not smart to just go scanning any network drives available for pre-existing installs unless we know for sure the user intends us to do that.
</li>
</ul>
<h3>Questions</h3>
<p>So looking all of this over, here&#8217;s some questions that might come to mind:</p>
<ul>
<li> Is the default choice of &#8216;reinitialize all&#8217; the right choice? (Not sure. We make a choice here between making life easier for virt installs or making life easier for folks who don&#8217;t want to lose data. We don&#8217;t know how large these populations are relative to each other.)
</li>
<li> This dialog is separated from other storage-related screens. Can we move it closer to the partitioning screen? (Maybe.)
</li>
<li> Reinitializing currently affects all drives scanned, without any filtering by the user (besides the local or local+network drives selection). Can additional filtering be added?
</li>
<li> Reinitializing currently affects drives meant to be part of the install target set AND drives merely meant to be automounted to the system. Can we limit it to only install-target drives?
</li>
<li>If a user really cared about the data on a drive, would they really select it as an install target? (Probably not.) In that case, do we need to warn them that data might be lost if they use a drive with an unreadable partition table as an install target? We already warn them that <strong>any</strong> drive used as an install target will be wiped!</li>
</ul>
<h2>Mockups &amp; Ideas</h2>
<h3>The radio-button approach</h3>
<p>In this approach, we think about the different types of users who might encounter the dialog and offer those users who have any data to lose an easy way to avoid the entire reinitialization screen and its related stresses.
</p>
<p>We only display the radio button dialog If one or more missing partition table drives are detected. If the user says the device is virtual or blank, we reinitialize it without asking. If the user says the drive had been used before or they weren&#8217;t sure, we give them the scary reinitialization screen.
</p>
<p>Some issues with this idea is that it&#8217;s not very scalable &#8211; you have 100 drives you can&#8217;t read, you get this radio button dialog for 100 drives. Ouch. We could potentially provide a list view of all unreadable drives, but right now anaconda pops them up as it goes. It may be possible to poll all the drives first, cache the data, and then present a list, though. It&#8217;s simply not possible in anaconda right now. But with a list of multiple drives, the multiple choice selection won&#8217;t work any more &#8211; each drive might be different. Um, so maybe not the best idea &#8211; or at least, this approach needs more work.
</p>
<p>If you remove all the drives from the install to protect them you get the last dialog &#8211; we can&#8217;t install if there&#8217;s nowhere to install to.&nbsp;:)
</p>
<p><a href="https://fedoraproject.org/w/uploads/c/ca/Storage-reinit-idea1.png"><img src="https://fedoraproject.org/w/uploads/thumb/c/ca/Storage-reinit-idea1.png/367px-Storage-reinit-idea1.png" alt=""></a></p>
<h3>The text-massaging Approach</h3>
<p>This is a less-weighty approach to apply in the meantime, without a lot of underlying code change. Except, oops, it does require too many underlying code changes. Right now there&#8217;s no caching of drive data, so the dialog pops up as anaconda scans drives and detects missing partition tables. So anaconda doesn&#8217;t know, until it knows, that a drive is unreadable. So the multiple list view won&#8217;t work here.
</p>
<p>It&#8217;s a better approach than the next one though, which is more compromising to the current state of anaconda&#8217;s functionality. One thing to note here &#8211; if you have <b>one</b> drive that can&#8217;t be read, you see the first screen. If you have <b>more than one</b> drive that can&#8217;t be read, you see the second screen. So the mockups in this screen are either/or, they are not a sequence.
</p>
<p><a href="https://fedoraproject.org/w/uploads/c/c2/Storage-reinit-idea2.png"><img src="https://fedoraproject.org/w/uploads/thumb/c/c2/Storage-reinit-idea2.png/495px-Storage-reinit-idea2.png" alt=""></a></p>
<h3>The text-massaging approach &#8211; simpler</h3>
<p>This approach caused the least code churn so it&#8217;s the one we&#8217;ll go with in the meantime we figure out the larger problems here.
</p>
<p>Note the button text has been changed &#8211; it says &#8216;Yes, discard any data&#8217; and &#8216;No, protect any data.&#8217; We say <b>any</b> data because there may not be any data at all. Saying &#8216;discard data&#8217; makes it sound like there actually is data to be discarded. We say &#8216;discard&#8217; rather than &#8216;destroy&#8217; because it&#8217;s a little less frightening of a word I think.
</p>
<p>Rather than having four buttons along the bottom, we have two that apply to the single device in question. For our virt-installing friends, we have a checkbox that will enable the button to apply to any such devices.
</p>
<p>So while we have a new layout and new language, the functionality is unchanged.
</p>
<p><a href="https://fedoraproject.org/w/uploads/7/76/Storage-reinit-idea3.png"><img alt="" src="https://fedoraproject.org/w/uploads/thumb/7/76/Storage-reinit-idea3.png/450px-Storage-reinit-idea3.png"></a></p>
<h3>Where to go from here</h3>
<p>One idea could be to show the list of drives and ask the user if there is any data they care about on those drives, because we can&#8217;t read them and will need to erase them to use them in install. Then give users the options to remove them from the install process / protect them one-by-one with the option to check off the drives they care about the data on. (or vice-versa, check off which drives they want to use for the install.)
</p>
<p><a title="http://fedoraproject.org/wiki/File:Anaconda_basic_bootselect_5.png" class="external text" href="http://fedoraproject.org/wiki/File:Anaconda_basic_bootselect_5.png">We originally had mocked up the latter <a href="http://mairin.wordpress.com/2009/08/12/anaconda-advanced-storage-devices/">during the Anaconda storage UI redesign</a> &#8211; showing all the drives we found and allowing users to check off the ones they wanted</a>. This was removed at the last minute because of complaints that we ask for too much information about storage devices in the UI. I think part of the problem is because we only worked on the storage UI, not the entire anaconda ui, so there was some redundancy or at least the appearance of such. This time around hopefully we&#8217;ll get this right since we&#8217;re looking at the entire UI.</p>
<br />Filed under: <a href='http://mairin.wordpress.com/category/fedora/anaconda/'>Anaconda</a>, <a href='http://mairin.wordpress.com/category/fedora/'>Fedora</a>, <a href='http://mairin.wordpress.com/category/interaction-design/'>Interaction Design</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mairin.wordpress.com/2663/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mairin.wordpress.com/2663/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mairin.wordpress.com&#038;blog=929179&#038;post=2663&#038;subd=mairin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mairin.wordpress.com/2010/12/02/reinitializing-will-cause-all-data-to-be-lost/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/06679d1adeaa0f535752137036c004a8?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">mairin</media:title>
		</media:content>

		<media:content url="https://fedoraproject.org/w/uploads/thumb/5/5b/Anaconda-storage-reinit-screenshot_f14.png/600px-Anaconda-storage-reinit-screenshot_f14.png" medium="image" />

		<media:content url="https://fedoraproject.org/w/uploads/thumb/c/c3/Anaconda-storage-reinit-screenshot_f14-notes.png/600px-Anaconda-storage-reinit-screenshot_f14-notes.png" medium="image" />

		<media:content url="https://fedoraproject.org/w/uploads/thumb/c/ca/Storage-reinit-idea1.png/367px-Storage-reinit-idea1.png" medium="image" />

		<media:content url="https://fedoraproject.org/w/uploads/thumb/c/c2/Storage-reinit-idea2.png/495px-Storage-reinit-idea2.png" medium="image" />

		<media:content url="https://fedoraproject.org/w/uploads/thumb/7/76/Storage-reinit-idea3.png/450px-Storage-reinit-idea3.png" medium="image" />
	</item>
		<item>
		<title>Free Interaction Design for your FLOSS Project</title>
		<link>http://mairin.wordpress.com/2010/08/19/free-interaction-design-for-your-floss-project/</link>
		<comments>http://mairin.wordpress.com/2010/08/19/free-interaction-design-for-your-floss-project/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 15:31:13 +0000</pubDate>
		<dc:creator>mairin</dc:creator>
				<category><![CDATA[Interaction Design]]></category>

		<guid isPermaLink="false">http://mairin.wordpress.com/?p=2287</guid>
		<description><![CDATA[Matt Jadud made a blog post yesterday offering up free interaction design for free &#38; open source projects. Wait, wait. Let me repeat that and make it a little bigger, because in the brevity of that sentence you might have missed it&#8217;s sheer awesomeness: Matt Jadud is offering up free interaction design for free &#38; &#8230; <a href="http://mairin.wordpress.com/2010/08/19/free-interaction-design-for-your-floss-project/">Continue reading <span class="meta-nav">&#187;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mairin.wordpress.com&#038;blog=929179&#038;post=2287&#038;subd=mairin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sububi.org/2010/08/18/free-interaction-design-for-your-open-source-project/"><img src="http://duffy.fedorapeople.org/blog/drawings/interaction-designers.png"></a></p>
<p><a href="http://www.sububi.org/about/">Matt Jadud</a> made <a href="http://www.sububi.org/2010/08/18/free-interaction-design-for-your-open-source-project/">a blog post</a> yesterday offering up free interaction design for free &amp; open source projects.</p>
<p>Wait, wait. Let me repeat that and make it a little bigger, because in the brevity of that sentence you might have missed it&#8217;s sheer awesomeness:</p>
<h3><a href="http://www.sububi.org/2010/08/18/free-interaction-design-for-your-open-source-project/">Matt Jadud is offering up free interaction design for free &amp; open source projects</a>.</h3>
<p><strong>This is a great opportunity.</strong></p>
<p>Matt is a computer science professor at <a href="http://allegheny.edu">Allegheny College</a>, and he&#8217;s teaching an interaction design course this coming semester (which starts next Thursday!) Matt is an alumni of the <a href="http://www.teachingopensource.org/index.php/POSSE_2009">Teaching Open Source POSSE program</a> (POSSE standards for &#8220;Professors&#8217; Open Source Summer Experience&#8221;) and <a href="http://opensource.com/users/jadudm">a writer for opensource.com</a>, and he is passionate about getting students involved in free &amp; open source software and improving the connections between FLOSS and academia. <a href="http://www.sububi.org/2010/08/18/free-interaction-design-for-your-open-source-project/">So when you read his blog post, where he&#8217;s offering up the students of his Fall 2010 interaction design class to help FLOSS projects</a>, you can be assured he means business.</p>
<p><a href="http://www.teachingopensource.org/index.php/POSSE_2009"><img src="http://www.teachingopensource.org/images/thumb/f/fe/Posse-2009-participants.jpg/350px-Posse-2009-participants.jpg"></a></p>
<p>So here&#8217;s what Matt is asking of you:</p>
<ul>
<li><strong>You need to be a developer or manager directly involved with the project you&#8217;re submitting for interaction design help.</strong> While I am sure we all have our pet bugs in Firefox or Nautilus, if you&#8217;re not directly involved in these projects, you&#8217;ll not be able to provide Matt&#8217;s students the upstream contacts and guidance they need for their work to be effective.</li>
<li><strong>You need to be open to UI changes, and not of the mindset your UI is already perfect</strong>. Matt is looking for folks who want the help, and who are willing to consider the data and the suggestions for improvement his students will be providing.</li>
<li><strong>You have to commit to respond to students in a timely manner.</strong> These students will be working within a 14-week schedule. If you take 2 weeks to get back to a student, you&#8217;ll really impact their ability to get their work done.</li>
</ul>
<p>This is not so much to ask given what Matt is offering here:</p>
<ul>
<li>Your project will be part of a list Matt will provide to his students to choose from. <strong>If a student ends up working on your project, they will have picked it from other projects and likely be genuinely interested in working on it. (And motivated too, to get a good grade <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</strong></li>
<li><strong>The students will work within your existing community infrastructure.</strong> Already have a mailing list, IRC channel, etc.? Matt&#8217;s students will engage with you in these places the same as any other contributor.</li>
<li><strong>You will receive a usability evaluation and/or mockups and suggestions for improving your interface from an interaction designer in-training!</strong> What you choose to do with that data is up to you, but please consider it seriously!</li>
</ul>
<p>Now, I <strong>know</strong> there are tons of you out there who are ready for interaction design help and are definitely willing to work with designers, because I hear from you all the time! There&#8217;s not enough interaction designers in the FLOSS community, and I believe programs like Matt&#8217;s that engage up-and-coming designers in the FLOSS community early on will help build up our interaction designer population. They provide a wonderful mutual benefit &#8211; the design students get to work on real-life projects, not just throw-away designs that are abandoned forever at the end of the semester &#8211; and the developers involved get the design help they desire but have such a hard time finding because of the dearth of designers. Help provide these students a great experience in interacting with our community, and maybe they&#8217;ll stick around!</p>
<p>Note that you won&#8217;t become a surrogate professor here &#8211; Matt will be teaching and leading these students throughout the process &#8211; if you have any concerns or questions throughout the process, if something isn&#8217;t working and you&#8217;d like it addressed, just get in touch with Matt. </p>
<p>So what are you waiting for? Don&#8217;t be shy! <a href="http://www.sububi.org/2010/08/18/free-interaction-design-for-your-open-source-project/">Pop on over to Matt&#8217;s blog and sign up!</a></p>
<br />Filed under: <a href='http://mairin.wordpress.com/category/interaction-design/'>Interaction Design</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mairin.wordpress.com/2287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mairin.wordpress.com/2287/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mairin.wordpress.com&#038;blog=929179&#038;post=2287&#038;subd=mairin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mairin.wordpress.com/2010/08/19/free-interaction-design-for-your-floss-project/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/06679d1adeaa0f535752137036c004a8?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">mairin</media:title>
		</media:content>

		<media:content url="http://duffy.fedorapeople.org/blog/drawings/interaction-designers.png" medium="image" />

		<media:content url="http://www.teachingopensource.org/images/thumb/f/fe/Posse-2009-participants.jpg/350px-Posse-2009-participants.jpg" medium="image" />
	</item>
	</channel>
</rss>
