haiku-website/static/legacy-docs/benewsletter/Issue1-42.html

369 lines
29 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Be Newsletters - Volume 1: 19951996</title><link rel="stylesheet" href="be_newsletter.css" type="text/css" media="all" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="./images/favicon.ico" /><!--[if IE]>
<link rel="stylesheet" type="text/css" href="be_newsletter_ie.css" />
<![endif]--><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Be Newsletters" /><link rel="up" href="volume1.html" title="Volume 1: 19951996" /><link rel="prev" href="Issue1-41.html" title="Issue 1-41, September 18, 1996" /><link rel="next" href="Issue1-43.html" title="Issue 1-43, October 2, 1996" /></head><body><div id="header"><div id="headerT"><div id="headerTL"><a accesskey="p" href="Issue1-41.html" title="Issue 1-41, September 18, 1996"><img src="./images/navigation/prev.png" alt="Prev" /></a> <a accesskey="u" href="volume1.html" title="Volume 1: 19951996"><img src="./images/navigation/up.png" alt="Up" /></a> <a accesskey="n" href="Issue1-43.html" title="Issue 1-43, October 2, 1996"><img src="./images/navigation/next.png" alt="Next" /></a></div><div id="headerTR"><div id="navigpeople"><a href="http://www.haiku-os.org"><img src="./images/People_24.png" alt="haiku-os.org" title="Visit The Haiku Website" /></a></div><div class="navighome" title="Home"><a accesskey="h" href="index.html"><img src="./images/navigation/home.png" alt="Home" /></a></div><div class="navigboxed" id="naviglang" title="English">en</div></div><div id="headerTC">Be Newsletters - Volume 1: 19951996</div></div><div id="headerB">Prev: <a href="Issue1-41.html">Issue 1-41, September 18, 1996</a>  Up: <a href="volume1.html">Volume 1: 19951996</a>  Next: <a href="Issue1-43.html">Issue 1-43, October 2, 1996</a></div><hr /></div><div class="article"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="Issue1-42"></a>Issue 1-42, September 25, 1996</h2></div></div></div><div class="sect1"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="Engineering1-42"></a>Be Engineering Insights: I Quit!</h2></div><div xmlns:d="http://docbook.org/ns/docbook"><span xmlns="http://www.w3.org/1999/xhtml" class="author">By <span class="firstname">Steve</span> <span class="surname">Horowitz</span></span></div></div></div><p>
One of the most common questions developers ask us is "How do I get my
threads to quit safely without using <code class="function">kill_thread()</code>?" There are many ways
to do this, but the handiest method involves an acquire-with-timeout
semaphore.
</p><p>
Consider this situation: You have two threads, a "master" and a "slave."
The master thread spawns (and resumes) the slave, and is responsible for
stopping it. The slave thread loops over a "critical section"; the only
time the master can safely quit the slave thread is when the slave is
outside the critical section.
</p><p>
The trick is for the master to detect when the slave is outside the
critical section, at which point the master tells the slave to pop out of
the loop. The slave, having departed the loop, can then perform any clean
up it needs to do, and exit naturally (by reaching the end of its entry
function). To do this, we create a semaphore to which both threads have
access—for our example, we'll make it a global semaphore. Note that
the semaphore is given an initial thread count of 1 (as expressed in the
first argument to <code class="function">create_sem()</code>):
</p><pre class="programlisting cpp">
<span class="type">sem_id</span> <code class="varname">sync_sem</code>;
<code class="function">master_thread</code>()
{
<code class="varname">sync_sem</code> = <code class="function">create_sem</code>(1, "synchronization vulture");
...
</pre><p>
Next, the master spawns and resumes the slave thread:
</p><pre class="programlisting cpp">
<span class="type">thread_id</span> <code class="varname">slave_thread</code>;
<code class="varname">slave_thread</code> = <code class="function">spawn_thread</code>(<code class="varname">slave_func</code>,
"HeyIAmBusy", <code class="constant">B_LOW_PRIORITY</code>, <code class="constant">NULL</code>);
<code class="function">resume_thread</code>(<code class="varname">slave_thread</code>);
</pre><p>
The body of the slave thread's entry function (<code class="function">slave_func()</code>) looks
something like this:
</p><pre class="programlisting cpp">
<span class="type">long</span> <code class="function">slave_thread</code>(<span class="type">void</span>*)
{
<span class="comment">/* Keep looping as long as we can
acquire the semaphore. */</span>
while(<code class="function">acquire_sem_etc</code>(<code class="varname">sync_sem</code>, 1, <code class="constant">B_TIMEOUT</code>, 0.0) ==
<code class="constant">B_NO_ERROR</code>) {
<span class="comment">/* Put your critical section here. */</span>
...
<span class="comment">/* Critical section done,
now release the semaphore. */</span>
<code class="function">release_sem</code>(<code class="varname">sync_sem</code>);
}
<span class="comment">/* We're outside the loop; clean up... */</span>
...
<span class="comment">/* ... and exit naturally. */</span>
return(<code class="constant">B_NO_ERROR</code>);
}
</pre><p>
Notice that the slave thread uses <code class="function">acquire_sem_etc()</code> with the <code class="constant">B_TIMEOUT</code>
flag set and with a timeout value of 0.0. This means that the slave
thread will keep looping as long as it can *immediately* acquire the
semaphore. However, if the semaphore isn't available, the function
*immediately* returns <code class="constant">B_WOULD_BLOCK</code>.
</p><p>
What happens when the master wants the slave to quit? The master thread
can't blithely kill the slave (through <code class="function">kill_thread()</code>), because the slave
might be in the middle of its critical section. Instead, all the master
has to do is acquire the synchronization semaphore:
</p><pre class="programlisting cpp">
<code class="function">acquire_sem</code>(<code class="varname">sync_sem</code>);
</pre><p>
This acquisition will block until the slave calls <code class="function">release_sem()</code> after its
current pass through the critical section. When the slave executes the
<code class="function">acquire_sem_etc()</code> function (in the loop predicate), the function will
immediately return <code class="constant">B_WOULD_BLOCK</code>, which will cause the slave to skip the
loop, clean up, and safely exit.
</p><p>
If the master wants to make sure that the slave is dead before it
continues, it should call <code class="function">wait_for_thread()</code> immediately after the
<code class="function">acquire_sem()</code> call:
</p><pre class="programlisting cpp">
<span class="type">long</span> <code class="varname">return_val</code>;
<code class="function">acquire_sem</code>(<code class="varname">sync_sem</code>);
<code class="function">wait_for_thread</code>(<code class="varname">slave_thread</code>, &amp;<code class="varname">return_val</code>);
</pre><p>
Keep in mind that after all this, sync_sem's thread count is 0 (since
it's been acquired by the master thread). Therefore, if you want to reuse
the <code class="varname">sync_sem</code> semaphore, you'll have to release it first so the next
acquisition will succeed.
</p><p>
Through a couple of modifications, you can use this technique so that the
master thread can control any number of slave threads. You simply
increase the semaphore's initial thread count (the first argument in the
<code class="function">create_sem()</code> call) to the number of threads (<em class="replaceable"><code>N</code></em>) that need to be
controlled, and then change the master's <code class="function">acquire_sem()</code> call to this:
</p><pre class="programlisting cpp">
<code class="function">acquire_sem_etc</code>(<code class="varname">sync_sem</code>, <code class="varname">N</code>, 0, 0);
</pre><p>
This use of <code class="function">acquire_sem_etc()</code> attempts to acquire the semaphore <code class="varname">N</code> times
—in other words, once for each slave thread. Note that the call doesn't
have a timeout (because the <code class="constant">B_TIMEOUT</code> flag isn't set): The call will
block until all <code class="varname">N</code> acquisitions are affected. Thus, when the function
returns, you're guaranteed that all the slave threads are outside their
critical sections and are either standing on the other side of the Styx,
or, at least, in the boat.
</p><p>
Hopefully this will help make your application design a little simpler
when it comes to synchronizing multiple threads.
</p></div><hr class="pagebreak" /><div class="sect1"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="DevProfile1-42"></a>Be Developer Talk: subAtomic Software</h2></div><div xmlns:d="http://docbook.org/ns/docbook"><span xmlns="http://www.w3.org/1999/xhtml" class="author">By <span class="firstname">Delbert</span> <span class="surname">Murphy</span></span></div></div></div><p>
Greetings, from the inside of my hardware to the inside of yours.
</p><p>
My name is Delbert Murphy. By day, I write Smalltalk and C++ for a huge
company that is obsessed with profit targets. By night, I chase my dream:
Writing commercial software for the BeBox, as I put the pieces together
to form the subAtomic Software product line.
</p><p>
I've always thought in pictures and graphical patterns—I'm just an
analog fellow in a digital world. I remember faces, not names. When I
need the information operator, I dial: center-button, center-button,
center-button, upper- left-button, upper-center-button,
upper-left-button, upper- center-button (you may know it as 555-1212). I
have a good deal of trouble using a rotary phone, because I've forgotten
the circular shapes for everyone's phone numbers.
</p><p>
Imagine my delight when I first saw the Be web site. Here was a computer
that I could (probably) afford, that had enough horsepower to do graphics
justice—and still have some processor power left over to handle my
other passion: Artificial intelligence. I recognized Be's real-time and
embedded systems ancestry, the keys to getting the BeOS right.
</p><p>
The basis for the subAtomic Software product line is the fusion of
graphics and artificial intelligence in real time. When you have a really
tough problem to solve, do you draw a picture? When you design your BeBox
application, do you draw an object model on paper? Perhaps a static
object diagram first, and then object interaction diagrams to lay out
different user scenarios? Sure you do.
</p><p>
What I am endeavoring to build is a workbench on which you graphically
lay out your ideas and see how they fit together. And more. I want the
workbench to suggest alternative arrangements of ideas, help you draw
conclusions about the information you have so far, help you relate ideas
in ways you hadn't considered. I envision a cross between a high-end CAD
package for ideas and a Zen master. I call it the fusion <span class="trademark">ThoughtBench</span>™.
</p><p>
The fusion ThoughtBench that I will release this fall will only be the
first step towards a lofty goal. I have started out simply: Getting the
underlying object model right first, making sure to separate the ideas
(which are longer-lived and probably more static) from the
representations of the ideas (which can change according to your chosen
perspective). The first release of the product will represent ideas and
their relationships, will capture information about the ideas, and be
able to produce documents—such as articles, resumes, presentations --
from this information.
</p><p>
The next release will incorporate a new perspective: Object modeling and
some rudimentary C++ code generation. Another release will incorporate
another perspective: Axioms, theorems, and proofs—probably beginning
with Euclidean geometry. A further perspective, in a further release:
Letting you define a problem space (say, the stock market) and mapping
functions (stock valuation algorithms), and a solution space
(buy/sell/hold). The perspectives are only limited by our hardware and
our imaginations (or is that hardware too?).
</p><p>
[Many musings on Being and Nothingness deleted by the author.]
</p><p>
I welcome suggestions, encouragement, or philosophical reflections at:
drmurph@gnn.com
</p></div><hr class="pagebreak" /><div class="sect1"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="Marketing1-42"></a>Be Marketing Mutterings: The Joys And Perils Of Growth</h2></div><div xmlns:d="http://docbook.org/ns/docbook"><span xmlns="http://www.w3.org/1999/xhtml" class="author">By <span class="firstname">Alex</span> <span class="surname">Osadzinski</span></span></div></div></div><p>
There are many things I enjoy about working at a small start-up company
like Be, some of them minor, some of them significant. I like the fact
that the stapler that's left on top of the photocopier doesn't disappear
and that whoever uses the last staple refills it. I like knowing
everybody in the company. I like spending less than an hour a week in
regular internal meetings. I like never having to attend facilitated
offsite cross-functional interdivisional long- range ISO9000 task force
planning paradigm shifting premeeting presentation planning preparation
briefing meetings with a ropes course icebreaker.
</p><p>
And I like growth.
</p><p>
Growth is an inherent attribute of a successful start-up. Without growth,
a company withers and dies. With growth, the things that you do change
from day to day and there is a perceptible and quantifiable increase in
the level of activity and excitement. Growth is fun, but it brings with
it some challenges; the primary challenge is to keep up with the growth.
</p><p>
Be is growing fast right now, whether you measure it in number of
application developers, number of BeBoxes sold, or number of column
inches of press. We're enjoying the fruits of our labors, but are also
concerned that we're not always keeping up with that growth. I want to
share those concerns with you and tell you what we're doing to address
them.
</p><p>
As we've mentioned before, application developers are our lifeblood.
Their success is our success, and so we want to do everything possible to
recruit developers to our exciting new platform and retain them with
excellent support and excellent business opportunities on the platform.
There are two areas where our growth has caused us to be less responsive
than we'd like: Processing new developers into our developer program and
responding to developer questions through our developer tech support
group.
</p><p>
I apologize to anyone who's been kept waiting. We're addressing the issue
by carefully hiring people to handle the increased workload. So far,
we've hired three people into the developer support area, two of whom are
now on board with a third joining next week. We're still interviewing
candidates and will try to keep hiring in line with the growth of our
developer program .
</p><p>
We do occasionally hear of e-mails to our developer support group or
application forms to enter our developer program remaining unanswered for
days or weeks. This is a bug; an e- mail to the developer support group
should always be answered, or at least acknowledged, by the end of the
following work day, and an application form to enroll in the developer
program should always be acknowledged within four working days. If you
don't hear back, please e-mail me (alex@be.com) and I'll investigate.
We'd hate to lose a friend because an e-mail went astray or because
someone hit the delete button by mistake.
</p><p>
On another topic, I've received quite a few calls and e- mails from
people who've seen our announcement that we've shipped the DR8 version of
the BeOS and who want it for their PowerMacs. Allow me to clarify: DR8
currently runs only on the BeBox, and we've not yet released a version of
the BeOS for the PowerMac. We expect to make an early version of the BeOS
for PowerMac available to our developers later this year, with a more
general release early next year. Stay tuned to this newsletter and our
web site for more news.
</p></div><hr class="pagebreak" /><div class="sect1"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="Gassee1-42"></a>The User's Perspective</h2></div><div xmlns:d="http://docbook.org/ns/docbook"><span xmlns="http://www.w3.org/1999/xhtml" class="author">By <span class="firstname">Jean-Louis</span> <span class="surname">Gassée</span></span></div></div></div><p>
In the early years, Hewlett-Packard was known solely for its measuring
instruments. Life was easy. Engineers designed for engineers, for the guy
at the next lab bench, the saying went. That practice couldn't even be
called a philosophy, it was what HP did instinctively. Their first pocket
calculator, the HP-35, was the result of the same libido. Bill Hewlett
wanted an electronic slide rule that fit in his shirt pocket. It was an
instant best-seller, a high-tech product right on its high-tech target.
The story, perhaps apocryphal, is that the HP-80, the first financial
pocket calculator, was designed because David Packard wanted to do
sophisticated bond price calculations. It, too, was well received by its
intended users. And the margins were so "nice" it was the single highest
contributor to HP's profits for a while.
</p><p>
There are numerous reasons to be wary of such an approach. Many will find
it self-centered. How dare you represent yourself as a typical user?
Indeed. Many companies prefer market research and focus groups as a
source of insights into the customer's needs and wants. This approach has
its problems. It works best on derivative, incremental products, but it
can be counter-productive when the audience is faced with unknown,
previously unthinkable notions for which it did not have a pre-existing
vocabulary.
</p><p>
In December 1982, ask the "man on the street" the personal computer he
wants, he'll describe a better Apple /// (!?) or a faster, smaller,
cheaper IBM PC. Show the same individual a Lisa in January 1983, the
reaction will be:
</p><p>
"That's what I want!"
</p><p>
"But, but, that's not what you told me last month."
</p><p>
How could the customer think of mice, menus, windows, and bitmapped
screens in December 1982? Focus groups can also be abused and lead to
risk-adverse mediocrity. In his book "Making Movies" (highly
recommended), Sydney Lumet has choice words for movie endings designed by
the marketing departments of Hollywood studios—even if he honestly
recognizes the system leaves little choice but to do those tests and to
make those changes.
</p><p>
Thanks to the Internet and Altavista, I got in touch with Wiley, the
creator of "Non Sequitur" cartoons. Through a dealer, Markomics
(www.markomics.com), I bought the original of a Sunday "Non Sequitur"
cartoon: Wiley drew Michelangelo on a scaffolding in the Sistine Chapel.
On the ground, a bishop looks up from a scroll and states: "Personally, I
think it looks OK, Michelangelo, but the focus group says it needs more
mauve..."
</p><p>
In Be's case, when we started the company in late 1990, what would the
focus group have said? Another OS, who needs it? Even today, where the
opportunity for fresh system software on the PowerPC appears a little
less difficult to assess, no less an authority than Dick Shaffer, of
Technologic Partners, reflexively noted: "It would give Apple what it
does not need: Another operating system that has no applications." Some
of the statement is in error. Especially the "give" part. As for the
applications, we'll soon meet our milestone of 1,000 BeBoxes in
developers' hands.
</p><p>
So far, these developers have been our target users. Most of our efforts
have gone into making the BeBox and the BeOS attractive for this
audience. It's not too difficult for the Be engineers to understand the
perspective of their early clients. As applications start to emerge, we
also put ourselves in the user's shoes. Shichiro Irimajiri, once the head
of Honda of America, and now back in the game, so to speak, as the head
of Sega of America, used to worry Honda needed to shift its focus. "We
used to build cars for ourselves, but we are getting old and if we don't
watch it, we'll end up building Cadillacs and we'll miss the new
customers." In our case, we're lucky the normal progression of our
business takes us first to the early adopting lunatic fringe first. The
shift in perspective will become harder when we approach the mainstream.
We still have much to do and much to prove to reach that stage—and it
will be a nice problem to have.
</p></div><hr class="pagebreak" /><div class="sect1"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="BeDevTalk1-42"></a>BeDevTalk Summary</h2></div></div></div><p>
BeDevTalk is an unmonitored discussion group in which technical
information is shared by Be developers and interested parties. In this
column, we summarize some of the active threads, listed by their subject
lines as they appear, verbatim, in the mail.
</p><p>
To subscribe to BeDevTalk, visit the mailing list page on our web site:
http://www.be.com/aboutbe/mailinglists.html.
</p><p>
A lot of mail this last week was about the DR8 upgrade; there were both
commendations and... suggestions. Rather than summarize the various DR8
threads individually, we'll simply thank you for your recognition of the
DR8 improvements, and assure you that we're trying to fix the bugs that
you've found and reported.
</p><p>
A gentle reminder: If you find a bug in DR8, please report it through the
Bug Report form in the Developer section of the Be web site:
http://www.be.com/developers/bugform.html
</p><div class="sect2"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h3 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499648"></a>WEEK 4</h3></div></div></div><div class="sect3"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h4 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499654"></a>Subject: How are we suppose to do this?</h4></div></div></div><p>
More game designer talk. A couple of solutions to the graphics/physics
clock rate problem were suggested and debated.
</p></div><div class="sect3"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h4 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499667"></a>Subject: AES/EBU</h4></div></div></div><p>
Although the Crystal codec that comes with the BeBox is good, some
folks want (or need) professional audio gear. It was suggested that Be
be encouraged to include a Digital Audio Interface (DAI). It was
countered that that might be an overly expensive solution to a problem
that only a few developers are really affected by.
</p></div></div><div class="sect2"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h3 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499685"></a>WEEK 2</h3></div></div></div><div class="sect3"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h4 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499692"></a>Subject: PPP in DR8</h4></div><div xmlns:d="http://docbook.org/ns/docbook"><h5 xmlns="http://www.w3.org/1999/xhtml" class="subtitle">
AKA: Help with PPPlease!<br />
AKA: PPPuh-leeeze...
</h5></div></div></div><p>
Why doesn't PPP work in DR8?...
</p><p>
THE BE LINE: Brad Taylor of Be posted a message that described the
difference between DR7 and DR8 PPP (and postulated advancements for
DR9). He also gave instructions for setting up your modem connection to
fit in the DR8 world. You can read a copy of this message on the Be web
site: http://www.be.com/developers/PPPinDR8.html
</p></div></div><div class="sect2"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h3 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499721"></a>NEW</h3></div></div></div><div class="sect3"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h4 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499727"></a>Subject: Application Architecture</h4></div><div xmlns:d="http://docbook.org/ns/docbook"><h5 xmlns="http://www.w3.org/1999/xhtml" class="subtitle">AKA: Application Template</h5></div></div></div><p>
These two threads discussed the desirability of application framework
classes/tools/paradigms/definitions for viewing documents (where you
can have more than one view onto the same document, or where a document
is actually a collection of "subdocuments"), scripting, plug-ins (what
Be calls "add- ons"), and the like.
</p></div><div class="sect3"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h4 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499748"></a>Subject: Another OpenFile panel scenario</h4></div></div></div><p>
Why don't file panels display more intelligence? It was suggested that
the Browser allow add-ons for the Open and Save panels.
</p></div><div class="sect3"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h4 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="id499761"></a>Subject: D'oh! Pulse</h4></div></div></div><p>
A couple of questions:
</p><div class="orderedlist"><ol><li><p>
Why does pulse no longer show memory usage?
</p></li><li><p>
Is Stellar Pulse (in the Live3D application) a CPU monitor?
</p></li></ol></div><p>
Answers (as correctly offered by our readers):
</p><div class="orderedlist"><ol><li><p>
Because folks were often confused by the memory usage
statistics.
</p></li><li><p>
No, it runs stellar data collected by Benoît Schillings, a 16th
century Belgian astronomer.
</p></li></ol></div></div></div></div></div><div id="footer"><hr /><div id="footerT">Prev: <a href="Issue1-41.html">Issue 1-41, September 18, 1996</a>  Up: <a href="volume1.html">Volume 1: 19951996</a>  Next: <a href="Issue1-43.html">Issue 1-43, October 2, 1996</a> </div><div id="footerB"><div id="footerBL"><a href="Issue1-41.html" title="Issue 1-41, September 18, 1996"><img src="./images/navigation/prev.png" alt="Prev" /></a> <a href="volume1.html" title="Volume 1: 19951996"><img src="./images/navigation/up.png" alt="Up" /></a> <a href="Issue1-43.html" title="Issue 1-43, October 2, 1996"><img src="./images/navigation/next.png" alt="Next" /></a></div><div id="footerBR"><div><a href="http://www.haiku-os.org"><img src="./images/People_24.png" alt="haiku-os.org" title="Visit The Haiku Website" /></a></div><div class="navighome" title="Home"><a accesskey="h" href="index.html"><img src="./images/navigation/home.png" alt="Home" /></a></div></div><div id="footerBC"><a href="http://www.access-company.com/home.html" title="ACCESS Co."><img alt="Access Company" src="./images/access_logo.png" /></a></div></div></div><div id="licenseFooter"><div id="licenseFooterBL"><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" title="Creative Commons License"><img alt="Creative Commons License" style="border-width:0" src="https://licensebuttons.net/l/by-nc-nd/3.0/88x31.png" /></a></div><div id="licenseFooterBR"><a href="./LegalNotice.html">Legal Notice</a></div><div id="licenseFooterBC"><span id="licenseText">This work is licensed under a
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/">Creative
Commons Attribution-Non commercial-No Derivative Works 3.0 License</a>.</span></div></div></body></html>