tag:blogger.com,1999:blog-51437584001466425672024-03-05T03:27:46.937-05:00Martes-MartesComputing, Networks, PrivacyJeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.comBlogger392125tag:blogger.com,1999:blog-5143758400146642567.post-54574978772434421602024-01-06T15:51:00.003-05:002024-01-06T15:51:34.065-05:00Dylan Thomas<p><span style="font-size: x-small;"> Do not go gentle into that good night,</span></p><p><span style="font-size: x-small;">Old age should burn and rave at close of day;</span></p><p><span style="font-size: x-small;">Rage, rage against the dying of the light.</span></p><p><span style="font-size: x-small;"><br /></span></p><p><span style="font-size: x-small;">Though wise men at their end know dark is right,</span></p><p><span style="font-size: x-small;">Because their words had forked no lightning they</span></p><p><span style="font-size: x-small;">Do not go gentle into that good night.</span></p><p><span style="font-size: x-small;"><br /></span></p><p><span style="font-size: x-small;">Good men, the last wave by, crying how bright</span></p><p><span style="font-size: x-small;">Their frail deeds might have danced in a green bay,</span></p><p><span style="font-size: x-small;">Rage, rage against the dying of the light.</span></p><p><span style="font-size: x-small;"><br /></span></p><p><span style="font-size: x-small;">Wild men who caught and sang the sun in flight,</span></p><p><span style="font-size: x-small;">And learn, too late, they grieved it on its way,</span></p><p><span style="font-size: x-small;">Do not go gentle into that good night.</span></p><p><span style="font-size: x-small;"><br /></span></p><p><span style="font-size: x-small;">Grave men, near death, who see with blinding sight</span></p><p><span style="font-size: x-small;">Blind eyes could blaze like meteors and be gay,</span></p><p><span style="font-size: x-small;">Rage, rage against the dying of the light.</span></p><p><span style="font-size: x-small;"><br /></span></p><p><span style="font-size: x-small;">And you, my father, there on the sad height,</span></p><p><span style="font-size: x-small;">Curse, bless, me now with your fierce tears, I pray.</span></p><p><span style="font-size: x-small;">Do not go gentle into that good night.</span></p><p><span style="font-size: x-small;">Rage, rage against the dying of the light.</span></p><p><b>Copied from Wikipedia, https://en.m.wikipedia.org/wiki/Do_not_go_gentle_into_that_good_night</b></p>Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.comtag:blogger.com,1999:blog-5143758400146642567.post-67027310743268585832018-03-02T15:57:00.005-05:002018-03-02T15:59:21.306-05:00Our Trip to Greece, January 2011<br />
<ul>
<li>Athens, Day One: <a href="https://photos.app.goo.gl/YjktFwVCySib7YI43">https://photos.app.goo.gl/YjktFwVCySib7YI43</a></li>
<li>Diakofto and Kalavryta, Greece day two: <a href="https://photos.app.goo.gl/VaSUUsK0QXYtmhFk1">https://photos.app.goo.gl/VaSUUsK0QXYtmhFk1</a></li>
<li>Athens Day 3, Archaeology Museum and Filopappou Hill: <a href="https://photos.app.goo.gl/S8JFW2XAwUkjx3G53">https://photos.app.goo.gl/S8JFW2XAwUkjx3G53</a></li>
<li>Greece Day 4, Cape Sounion and the Acropolis Museum: <a href="https://photos.app.goo.gl/MXtSyJAZOjW2rTAg1">https://photos.app.goo.gl/MXtSyJAZOjW2rTAg1</a></li>
<li>Greece Day 5, Delphi: <a href="https://photos.app.goo.gl/TZrNQwLjavX0jmLI2">https://photos.app.goo.gl/TZrNQwLjavX0jmLI2</a></li>
<li>Greece Day 6: the Peloponnese: <a href="https://photos.app.goo.gl/er24cvrbdGEcaAl12">https://photos.app.goo.gl/er24cvrbdGEcaAl12</a></li>
<li>Greece Day 7: The Saronic Gulf: <a href="https://photos.app.goo.gl/CqGZAaHVBcDrKQkv2">https://photos.app.goo.gl/CqGZAaHVBcDrKQkv2</a></li>
</ul>
<div>
<br /></div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-87927010097276567122018-02-26T15:33:00.000-05:002018-02-26T15:51:41.976-05:00Java's Stack Class and Queue InterfaceNeither <span style="font-family: "courier new" , "courier" , monospace;">java.util.Queue</span> nor <span style="font-family: "courier new" , "courier" , monospace;">java.util.Stack</span> enforce queue or stack disciplines. As such they are unsuitable for teaching queues and stacks, and unsuitable for use in software engineering.<br />
<br />
If I have a <span style="font-family: "courier new" , "courier" , monospace;">Stack</span> that is shared among various modules, perhaps maintained by various people, I want to know that no one is accessing it beyond push and pop at the top. Otherwise, there is no way to have any confidence that any contract or class invariants are being maintained.<br />
<br />
I have no issue with <span style="font-family: "courier new" , "courier" , monospace;">Stack</span> methods <span style="font-family: "courier new" , "courier" , monospace;">empty()</span><span style="font-family: "arial" , "helvetica" , sans-serif;">, </span><span style="font-family: "courier new" , "courier" , monospace;">peek()</span><span style="font-family: inherit;">, </span><span style="font-family: "courier new" , "courier" , monospace;">pop()</span>, or <span style="font-family: "courier new" , "courier" , monospace;">push()</span>. My objection to search is minor: this isn't part of the idea of the stack, so it should not be in the public interface.<br />
<br />
But <span style="font-family: "courier new" , "courier" , monospace;">Stack</span> also inherits a number of methods from <span style="font-family: "courier new" , "courier" , monospace;">java.util.Vector</span>, including <span style="font-family: "courier new" , "courier" , monospace;">removeElementAt()</span> and <span style="font-family: "courier new" , "courier" , monospace;">insertElementAt()</span>. This is not a stack. It can be used as a stack, but the programmer has no assurance that other pieces of code are treating it as a stack.<br />
<br />
The <span style="font-family: "courier new" , "courier" , monospace;">Queue</span> interface is not as bad. The interface's six methods make it look like the committees that added to it over time were a bit confused or at least not in agreement with one another, but, nonetheless, insertion is always at the tail, and removal is always at the head.<br />
<br />
But <span style="font-family: "courier new" , "courier" , monospace;">Queue</span> extends <span style="font-family: "courier new" , "courier" , monospace;">java.util.Collection</span>, which adds a number of non-queue-like methods. Many of these methods allow treating a queue like a stream, which is more convenient than removing item-by-item, deciding if each item fits some criteria, and then adding those meeting the criteria back into a queue.<br />
<br />
My main issue with <span style="font-family: "courier new" , "courier" , monospace;">java.util.Queue</span> is shared with <span style="font-family: "courier new" , "courier" , monospace;">java.util.Stack</span>: the is-a relation does not work. A subclass of either could satisfy the Liskov substitution principle, but the child would be neither stack nor queue.<br />
<br />
One fix would be to define more reasonable <span style="font-family: Courier New, Courier, monospace;">Stack</span> and <span style="font-family: Courier New, Courier, monospace;">Queue</span> classes, and declare them <span style="font-family: Courier New, Courier, monospace;">final</span>. What I really want is a way to declare an interface that restricts the addition of methods.Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-15503901896613824672018-02-01T21:35:00.001-05:002018-02-01T21:43:07.280-05:00Firefox Minimum Print Font Size<div class="gmail_default" style="font-family: arial,helvetica,sans-serif;">
I've
been frustrated with font sizes when I print documents and playing
games with zoom level, etc. But it turns out Firefox has a good, general
solution: no more playing around.<br />
<br /></div>
<div class="gmail_default" style="font-family: arial,helvetica,sans-serif;">
Firefox allows one to set minimum print font size. In limited testing, it works well, as it
should, since the browser should be able to re-flow text for changing
font sizes. Other browsers probably have some similar mechanism, but
this is for Firefox:</div>
<div class="gmail_default" style="font-family: arial,helvetica,sans-serif;">
<br />
Preferences | Content | Fonts&Colors | Advanced | Minimum Font Size</div>
<div class="gmail_default" style="font-family: arial,helvetica,sans-serif;">
<br />
I
set mine to 11. It does sometimes use more paper, but several times
I've seen a printout, and tossed it directly into recycling and tried
again.</div>
<div class="gmail_default">
<div style="font-family: arial, helvetica, sans-serif;">
<br /></div>
<span style="font-family: arial, helvetica, sans-serif;">Alternatively
for nerds: Open </span><span style="font-family: Courier New, Courier, monospace;">about:config</span><span style="font-family: arial, helvetica, sans-serif;">, find the variable
</span><span style="font-family: Courier New, Courier, monospace;">font.minimum-size.x-western</span><span style="font-family: arial, helvetica, sans-serif;">, and set it to your preferred minimum font
size.</span><br />
<div style="font-family: arial, helvetica, sans-serif;">
<br /></div>
<span style="font-family: arial, helvetica, sans-serif;">See also: </span><span style="font-family: Courier New, Courier, monospace;">https://support.mozilla.org/en-US/kb/font-size-and-zoom-increase-size-of-web-pages</span></div>
<div class="gmail_default" style="font-family: arial,helvetica,sans-serif;">
<br clear="all" /></div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-69867145057758677612017-06-18T16:24:00.004-04:002017-06-18T16:34:28.962-04:00Futility of Tweeting on PoliticsPeople who know me or follow me on twitter know that I am unhappy with Trump's performance as president, and reluctantly voted for Hillary Clinton in the fall though I viewed her as too conservative herself. I've tweeted often on this.<br />
<br />
Recently I've decided that retweeting NY Times and Washington Post articles and editorials and the like does little good: it's mostly a contest to see who can shout the loudest, though I found some interesting reading based on other peoples' tweets and can hope others read some of the articles I tweeted about and found them interesting or useful.<br />
<br />
But, if my political tweeting has done no good, then maybe actually attempting constructive engagement with pro-Trump folks might be more constructive. In one of those threads, I asked for the source of an implausible quote attributed to George Soros. I got a series of increasingly more disappointing responses:<br />
<br />
<ul>
<li>It doesn't matter if Soros really said that; he's a bad person, so it's okay to attribute things like that to him.</li>
<li>So, I asked if it's okay to make stuff up (I may have used the word lie) about a person just because you don't like his politics. Then the person said that Soros really did say these things, just Google it. I did Google it, and Google led to pages attributing the quote to Soros, but none of the websites were an established (read: credible) news source.</li>
<li>I decided not to continue in the thread, though others persisted, and in a non-sequitor the discussion turned to President Obama, but by the name <i>Negrobama</i>. I blocked a few people in the thread so I wouldn't have to read this ignorant and racist tripe in my notifications. In the past I've rarely blocked accounts.</li>
<li>So I wanted constructive dialog, and just now ended up (above, not in the Twitter thread) describing people on the other side as ignorant and racist. This is not a productive way to build dialog.</li>
</ul>
<div>
I have not found politics on Twitter to be a constructive use of my time, though often entertaining. For functional programming, mathematics, networking, teaching CS, and the like, twitter still seems fine, though many people, like me, tweet on one or more of those topics and on Trump's kleptocracy. To help me reduce the temptation to tweet on politics, I guess I will unfollow people who tweet largely about politics. It's not that I disagree with them, but that I don't think it's useful on the whole.</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-72943662608847264642016-09-17T15:44:00.000-04:002016-09-17T15:44:46.718-04:00Hints for Writing Unix Tools<a href="https://monkey.org/~marius/unix-tools-hints.html">https://monkey.org/~marius/unix-tools-hints.html</a><br />
<br />
Worth re-reading every few months.Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-10455803045333856722016-03-26T14:19:00.000-04:002016-04-07T04:44:58.509-04:00Trying to be a Mac User--Decision to Give UpIn November I went all-in on switching from Linux to the Mac. Linux quality is ever-declining, and I had a laptop on which Linux Mint was almost completely unusable. But Mac usability is surprisingly poor, and I expect to return to Linux, mostly completely.<br />
<br />
This is the first of a series of short articles on Mac usability deficiencies. From Wikipedia, <a href="https://en.wikipedia.org/wiki/Point_and_click#Fitts.27s_Law" target="_blank">https://en.wikipedia.org/wiki/Point_and_click#Fitts.27s_Law</a>:<br />
<br />
------------------------------------------<br />
<h2>
<span class="mw-headline" id="Fitts.27s_Law">Fitts's Law</span></h2>
<a href="https://en.wikipedia.org/wiki/Fitts%27s_law" title="Fitts's law">Fitts's law</a> can be used to quantify the time required to perform a point-and-click action.<br />
<img alt="T = a + b \log_2 \Bigg(1+\frac{D}{W}\Bigg)" class="mwe-math-fallback-image-inline tex" src="https://upload.wikimedia.org/math/e/7/e/e7e6cee6e7664d150f8db606c7f6fc02.png" /> where:<br />
<br />
<ul>
<li><img alt="T" class="mwe-math-fallback-image-inline tex" src="https://upload.wikimedia.org/math/b/9/e/b9ece18c950afbfa6b0fdbfa4ff731d3.png" /> is the average time taken to complete the movement.</li>
<li><img alt="a" class="mwe-math-fallback-image-inline tex" src="https://upload.wikimedia.org/math/0/c/c/0cc175b9c0f1b6a831c399e269772661.png" /> represents the start/stop time of the device and <img alt="b" class="mwe-math-fallback-image-inline tex" src="https://upload.wikimedia.org/math/9/2/e/92eb5ffee6ae2fec3ad71c777531578f.png" />
stands for the inherent speed of the device. These constants can be
determined experimentally by fitting a straight line to measured data.</li>
<li><img alt="D" class="mwe-math-fallback-image-inline tex" src="https://upload.wikimedia.org/math/f/6/2/f623e75af30e62bbd73d6df5b50bb7b5.png" /> is the distance from the starting point to the center of the target.</li>
<li><img alt="W" class="mwe-math-fallback-image-inline tex" src="https://upload.wikimedia.org/math/6/1/e/61e9c06ea9a85a5088a499df6458d276.png" /> is the width of the target measured along the axis of motion. <img alt="W" class="mwe-math-fallback-image-inline tex" src="https://upload.wikimedia.org/math/6/1/e/61e9c06ea9a85a5088a499df6458d276.png" />
can also be thought of as the allowed error tolerance in the final
position, since the final point of the motion must fall within <img alt="\pm\frac{W}{2}" class="mwe-math-fallback-image-inline tex" src="https://upload.wikimedia.org/math/8/1/b/81b6ad9aecfb8f30b1af0e731c0659e4.png" /> of the target's centre.</li>
</ul>
<div>
------------------------------------------</div>
<div>
<br /></div>
<div>
Why is this important? Regardless of where a window is on the screen, OS X places the menu in the far upper left. Mousing to the menu is more time-consuming than if the menu were attached to the window itself, putting OS X at a disadvantage compared to other popular desktop operating systems, especially those with large screens.</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-85313529705576596572015-04-30T12:54:00.000-04:002015-05-04T11:15:43.558-04:00Considering a Chromebook? Get Something Better<span style="color: red;"><b><i>This is a draft in progress.</i></b></span><br />
<br />
The old Samsung netbook I'd been using for delivering lectures recently died, and I replaced it with an Asus C200 Chromebook with 4 GB RAM and 32 GB flash. For a week or two, I thought I just had to acclimate. Since then, I've known it was simply a mistake.<br />
<br />
The C200 itself is a nice piece of hardware. Chrome OS is a bad idea poorly-implemented.<br />
<br />
What I like:<br />
<ul>
<li>Long battery life.</li>
</ul>
<div>
What I dislike:</div>
<div>
<ul>
<li>Storage management is inflexible. I wanted to store a bunch of documents on my machine prior to a long meeting in a room with questionable Wi-Fi. Chrome OS does not support storing files locally in anything resembling a modern file system. Flash is treated as a cache, and does not preserve directory structure.</li>
<li>In said meeting, I discovered that I was unable to open a number of DOCX files and any RTF files. Some DOCX files opened fine. So, in the middle of the meeting, Chrome was suggesting that I install extensions. Seriously?</li>
<li>No Java SDK, so I cannot run simple programs from the command line. I need to ssh to a remote server and run them there. This is an extra time step I'd rather not take at the beginning of class each day. And it presupposes network connectivity.</li>
<li>The provided command line has none of the standard Unix network tools, making another class of examples I often give in class awkward at best.</li>
<li>There is no good PDF viewer. I want to go full screen and advance a page at a time. Is this so hard or unusual?</li>
<li>There is no way to modify the screen timeout. Sometimes in the middle of a lecture, the machine will go to sleep. Then, unless one is quick, it may be necessary to log back in to the machine. In the middle of a lecture. There is an app, Keep Awake, that can keep the screen on, but one has to remember to enable it at the beginning of a lecture and disable it at the end. Forgetting to disable Keep Awake can result in a very low battery the next day. Can't they automate this?</li>
<li>Google loves light characters on gray backgrounds. Very often from an angle or at a short distance, items on the screen are much less readable than they could be.</li>
<li>No Haskell or Scala, meaning the Chromebook is useless for simple software development. Somehow when I heard it was based on Linux, I didn't investigate further--I was in a hurry.</li>
<li>The charger runs very hot. This is an Asus C200 issue, though, and not specific to Chrome OS.</li>
</ul>
<div>
My path from here (probably after exams end and post-<a href="http://www.degoesconsulting.com/lambdaconf-2015/" target="_blank">LamdaConf 2015</a>):</div>
</div>
<div>
<ul>
<li>Blow Chrome OS away and install Linux.</li>
<li>Problem: if I'd bought a cheap laptop, I'd have a hard drive much bigger than 32 GB to work with.</li>
</ul>
</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com1tag:blogger.com,1999:blog-5143758400146642567.post-33187893545764975842014-10-04T15:07:00.001-04:002015-06-30T22:16:46.214-04:00December 2013 Trip to NicaraguaWent to Nicaragua with friends last December. Here are links to the various (incomplete) photo albums. One more will be added soon.<br />
<ul>
<li>Nicaragua <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay1BWIAndLeonSParqueCentral">Day 1</a>: BWI and León's Parque Central </li>
<li>Nicaragua <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay2Leon">Day 2</a>: León </li>
<li>Nicaragua, <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay3LeonLeonViejoAndLasPenitas">Day 3</a>, León, León Viejo, and Las Peñitas </li>
<li>Nicaragua <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay4GranadaBaseball">Day 4</a>, Granada & Baseball </li>
<li>Nicaragua <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay5LagoNicaragua">Day 5</a>: Lago Nicaragua </li>
<li>Nicaragua <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay5ParqueNacionalVolcanMasaya">Day 5</a>: Parque Nacional Volcan Masaya </li>
<li>Nicaragua <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay5ApoyoLagoonAndEveningInGranada">Day 5</a>: Apoyo Lagoon and Evening in Granada </li>
<li>Nicaragua <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay6GranadaAndButterflyPreserve">Day 6</a>, Granada and Butterfly Preserve </li>
<li>Nicaragua <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay7ConventSanFranciscoAndGranadaWaterfront">Day 7</a>, Convent San Francisco and Granada Waterfront</li>
<li>Nicaragua, <a href="https://picasaweb.google.com/115193484993692308912/NicaraguaDay8Managua?noredirect=1" target="_blank">Day 8</a>, Managua</li>
</ul>
<ul>
</ul>
<div>
<span style="font-family: inherit;"><span style="font-size: 17px; line-height: 18.8159999847412px;"><br /></span></span></div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-24262919442443398352014-07-08T11:54:00.000-04:002014-07-08T11:54:22.411-04:00HTTPS Everywhere Rule Sets for UMBC, tools.ietf.orgThe server tools.ietf.org supports TLS, but my browser's HTTPS Everywhere seems unaware of this fact. So I wrote a rule set for that server. I have previously posted <a href="http://martesmartes.blogspot.com/2013/05/https-everywhere-rule-set-for.html" target="_blank">here</a> an HTTPS Everywhere rule set for an oft-used (by me) server at UMBC; for convenience, this is reproduced below.<br />
<br />
<span style="font-family: inherit;"><ruleset name="tools-ietf"></span><br />
<span style="font-family: inherit;"> <target host="tools.ietf.org" /></span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"> <rule from="^http://tools\.ietf\.org/" to="https://tools.ietf.org/" /></span><br />
<span style="font-family: inherit;"></ruleset></span><br />
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<div>
<span style="font-family: inherit;"><ruleset name="userpages-UMBC"></span></div>
<div>
<span style="font-family: inherit;"> <target host="userpages.umbc.edu" /></span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;"> <rule from="^http://userpages\.umbc\.edu/" to="https://userpages.umbc.edu/"/></span></div>
<div>
<span style="font-family: inherit;"></ruleset></span></div>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Where do these rules go? See the <a href="https://www.eff.org/https-everywhere-node" target="_blank">EFF</a> docs or my <a href="http://martesmartes.blogspot.com/2013/05/https-everywhere-rule-set-for.html" target="_blank">prior description</a>.</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-81760624756002859972014-05-18T17:55:00.001-04:002014-06-24T17:51:50.019-04:00Geek Clock: They can do Better<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWK4TW8_Bx6nnt-NOoD7x-I-KviOLA_93dWM5XNDjCkON1fYlzV8IChZV9e0IjRm40eZqmSK0W_y7veAY3Nzb4ymTno2BNmXWXa563yWJZJ0TKfgrRBSuEa5oZDsgBdGkE9suH9zcpNYU/s1600/Blb2t6YCAAEAn1j.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWK4TW8_Bx6nnt-NOoD7x-I-KviOLA_93dWM5XNDjCkON1fYlzV8IChZV9e0IjRm40eZqmSK0W_y7veAY3Nzb4ymTno2BNmXWXa563yWJZJ0TKfgrRBSuEa5oZDsgBdGkE9suH9zcpNYU/s1600/Blb2t6YCAAEAn1j.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Let's start at 1 o'clock and work our way around in a clockwise fashion.<br />
<ul>
<li>tan π/4 would be cleaner.</li>
<li>round(∏) is fine, but how about ⌊π⌋ instead?</li>
<li>Log 55 is ambiguous, misleading, and inexact--and who capitalizes a log function? Most people will assume the base is 10, except computer scientists might first think 2. But clearly this is intended to be natural log. So, why not say what you mean? ln 55. For precision, this could be wrapped in a floor function. So, my suggestion: ⌊ln 55⌋</li>
<li>16/2 is boring. How about <span style="font-family: Verdana, sans-serif;">2</span><sup><span style="font-family: Verdana, sans-serif;">3 </span></sup>instead?</li>
<li>Similarly, 3x3 would be better-written <span style="font-family: Verdana, sans-serif;">3</span><sup><span style="font-family: Verdana, sans-serif;">2</span></sup>.</li>
<li>g? Do they mean 9.8 m/s/s? How about <span style="font-family: Verdana, sans-serif;">12</span><sub><span style="font-family: Verdana, sans-serif;">8</span></sub>?</li>
<li>For 11, is that 0b? 06? Make it clear: 0xb or b_16. Add a leading zero if you want--I don't care.</li>
<li><span style="font-family: Verdana, sans-serif;">1100</span><sub><span style="font-family: Verdana, sans-serif;">2</span></sub> is fine for 12.</li>
</ul>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-44422765107928949862014-02-17T11:56:00.002-05:002014-07-08T16:05:38.062-04:00Java's java.util.Date ClassTeaching Java programming to novices forces me to sometimes revisit the basics in my own understanding, or the edges of what I understand.<br />
<div>
<br /></div>
<div>
java.util.Date has come up a couple times this semester, and I thought I would verify the behavior of Date for dates at and before 1970-01-01. Here's my simple test code:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">//Time-stamp: <2014-02-17 11:14:34 jdm></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">import java.util.Date;</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">public class TimeZero {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> public static void main(String[] args) {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> final int yearsAgo = Integer.parseInt(args[0]);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> final double msAgo = yearsAgo</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> * 365.25 // days per year</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> * 24 // hours per day</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> * 60 // minutes per hour</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> * 60 // seconds per minute</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> * 1000; // ms per second</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> final Date d = new Date((long) -msAgo);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> System.out.println(d);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> } // main()</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">} // class TimeZero</span></div>
</div>
<div>
<br /></div>
<div>
I'm neglecting leap seconds in my calculation of ms before 1970-01-01 (called msAgo). Assuming that a year averages 365.25 days is also not quite right, but since 2000 was one of those leap years divisible by 400, it's pretty close for recent years. Providing zero as input acts as expected (once one takes the time zone difference between here and Greenwich into account):</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">> java TimeZero 0</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Wed Dec 31 19:00:00 EST 1969</span></div>
</div>
<div>
<br /></div>
<div>
Three years earlier seems to be about right, given that 1968 was a leap year:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">> java TimeZero 3</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Sun Jan 01 01:00:00 EST 1967</span></div>
</div>
<div>
<br /></div>
<div>
1000 years before 1970 looks good:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">> java TimeZero 1000</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Sat Dec 18 19:00:00 EST 969</span></div>
</div>
<div>
<br /></div>
<div>
Let's look around near the beginning of CE and the end of BCE (boundary conditions):</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">> java TimeZero 1967</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Tue Dec 19 01:00:00 EST 2</span></div>
</div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">> java TimeZero 1968</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Sun Dec 18 19:00:00 EST 1</span></div>
</div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">> java TimeZero 1969</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Sat Dec 18 13:00:00 EST 1</span></div>
</div>
<div>
<br /></div>
<div>
This seems odd, but the Gregorian calendar does not have a year zero (see https://en.wikipedia.org/wiki/Gregorian_calendar) and Date.toString() does not include CE/BCE indication. I played around with calendars in my locale to get the era, but cal.get(Calendar.ERA) returns an int, which makes no sense whatsoever, and the problem isn't interesting enough to spend more time on.</div>
<div>
<br /></div>
<div>
However, I am willing to say the Java Date and Calendar hierarchies are entirely too complicated for day-to-day uses. This is one of the few places where I endorse using non-standard class libraries.</div>
<div>
<br /></div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-92131997589319543352013-09-08T14:52:00.000-04:002013-10-30T20:40:03.697-04:00Common Fate of Android Tablets, or a Quick 2013 Nexus 7 ReviewI'm on my third Android tablet. Or fourth, but who's counting?<br />
<div>
<br /></div>
<div>
My first tablet was a Samsung Galaxy 5 bought in September 2012. This was mis-marketed as an MP3 player, which it did fine, but 5" was a great size for a handheld GPS device walking through cities, and fit easily into most pockets. It included an FM receiver, rear and front facing cameras, etc. I liked it. The big drawbacks were that it was too small for most reading or surfing activities, and it didn't have enough RAM to upgrade past Android 2.3.5. In December I managed to find the one place on Charles Ave where there was a drop-off between the sidewalk and the adjacent turf, stepped wrong, and fell, landing on my shoulder and on the Galaxy that had slipped out of my chest pocket. No Gorilla glass on this one.</div>
<div>
<br /></div>
<div>
I replaced it with a Nexus 10, decided that was too big, and replaced that immediately with a 2012 Nexus 7.</div>
<div>
<br /></div>
<div>
The Nexus 7 was overall fine, but the sound quality of the built-in speakers was terrible and produced insufficient volume to listen to podcasts or streaming radio from just a few feet away or with any background noise. The UI was sluggish. Touch a search area, and wait a few seconds before the keyboard appears. Type a key, and wait a few seconds before the character appears on the screen. No built-in FM receiver, but with TuneIn, this is not usually a big deal. Other than the speakers, the largest deficiency was the lack of a rear-facing camera. Got QR Droid? You won't be using it on this thing. I also found 16 GB to be slightly restrictive, but of course there is AndFTP's sftp feature, and my home desktop runs an sftp server, so moving stuff back-and-forth was a breeze--a great improvement over plugging in the USB cable and hoping Linux decides to recognize the device. Anyhow, I get around 20Mb/s between my Nexus and desktop via 802.11 (and an Ethernet hop). The one time I had two droids downloading from the server concurrently I got 30Mb/s measured at the server. Not bad.</div>
<div>
<br /></div>
<div>
I liked the size of the Nexus 7: fairly easy to hand-carry, and I picked up a small messenger bag that can carry that and a few other things while I wander about listening to podcasts.</div>
<div>
<br /></div>
<div>
Friday I dropped my Nexus 7. Even though it was in a decent M-Edge cover, the screen cracked, and much of the screen no longer behaves as a touch screen. No Gorilla glass on this one, either.</div>
<div>
<br /></div>
<div>
So I picked up a 2013 Nexus 7. I have not had it long, but my initial impression is that Asus did a great job. The sound quality is okay, but importantly it can kick out enough volume to be easily heard from several feet away. The UI is more responsive than the older Nexus 7. The rear-facing camera is a great addition. 32 GB of flash memory is a big improvement over my past 16 GB--I won't have to juggle among movies on the device.</div>
<div>
<br /></div>
<div>
I'll probably write more about the 2013 Nexus 7 later.</div>
<div>
<br /></div>
<div>
Aside: the guy from the Office Depot (la oficina de la marihuana) really, really wanted to sell me a protection plan for the Nexus. He went so far as to tell me I'd probably want to replace the battery in a year or so. Despite my tendency to break things, I never buy protection plans, as they are usually pure profit for the seller.</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-5551904523677966652013-08-25T23:35:00.003-04:002013-08-25T23:50:38.011-04:00Slightly Interesting Javascript BenchmarkI have an Asus CG5275 desktop, and decided to try out the Mandelbrot JavaScript benchmark at <a href="http://alexey.radul.name/ideas/2013/cleverness-of-compilers/" target="_blank">http://alexey.radul.name/ideas/2013/cleverness-of-compilers/ </a>with the three browsers I use most, Chrome 29.0.1547.57, Firefox 23.0, and Opera 12.16. I expected Opera to be the slowest, and was not disappointed.<br />
<div>
<br /></div>
<div>
The mild surprise was that Firefox was almost four times as fast as Chrome. Here are my timings on the Asus with the above-mentioned URL and browsers:</div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><b>Browser Size Time Relative</b></span></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Chrome 29.0.1547.57 500x500 9562 ms 3.86</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Firefox 23.0 500x500 2478 ms 1</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Opera 12.16 500x500 19464 ms 7.85</span></div>
</div>
<div>
<br /></div>
<div>
Opera took just about twice as long as Chrome, and Firefox was almost 4 times as fast as Chrome. This is on an Intel i5 at 3.2 GHz running Linux Mint 15, Mate, kernel 3.8.0-29-generic. It's a 4-core machine, which makes me curious about the almost 4x speedup of Firefox vs.. Chrome.<br />
<br />
<i><span style="color: #38761d;">[ Note added about 15 minutes after original posting: Mate's System Monitor makes it appear that all three versions use just a single core. No real surprise--this is JavaScript, after all. ]</span></i></div>
<div>
<br /></div>
<div>
<br /></div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-69898883342311358472013-07-23T10:24:00.000-04:002013-08-25T23:54:41.551-04:00Scrollbars a page at a time, not a huge jump at a timeI've been really annoyed by Rhythmbox scrollbar behavior of late: when I click in the "trough" of the scrollbar, instead of moving the view by about a page up or down, it moves a distance corresponding to the point in the trough clicked. This is pretty bad for large text areas, such as a large music library. I complained to the Rhythmbox folks and Jonathan Matthew <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704434" target="_blank">replied</a> that this is default gtk behavior. This struck me as odd since I haven't noticed it in other applications, however Jonathan was right.<br />
<div>
<br /></div>
<div>
Google led me to a Gentoo <a href="http://forums.gentoo.org/viewtopic-t-948904.html" target="_blank">site</a> where ebichu was having the same issue, and posted the solution. I can't thank him there since I don't have a gentoo.org password, but he or she deserves thanks. The fix is to add a line to <span style="font-family: Courier New, Courier, monospace;">/etc/gtk-3.0/settings.ini:</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">[Settings] </span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">gtk-primary-button-warps-slider = false</span></div>
</div>
<div>
<br /></div>
<div>
So they apparently call this slider warping. Very user-hostile.</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-61732788588040960942013-07-21T12:28:00.001-04:002013-07-21T12:28:23.930-04:00Mindspring's 14 Deadly SinsWorth keeping in mind and adapting for just about any business. From Wikipedia, http://en.wikipedia.org/wiki/MindSpring and credited to Mike McQuarry:<div>
<br /></div>
<div>
<div>
THE 14 DEADLY SINS OF MINDSPRING (or ways that we can be just like everybody else)</div>
<div>
<ol>
<li>Give lousy service--busy signals, disconnects, downtime, and ring no answers.</li>
<li>Rely on outside vendors who let us down.</li>
<li>Make internal procedures easy on us, even if it means negatively affecting or inconveniencing the customer.</li>
<li>Joke about how dumb the customers are.</li>
<li>Finger point at how other departments are not doing their jobs.</li>
<li>Customers can't get immediate "live" help from sales or support.</li>
<li>Poor coordination across departments.</li>
<li>Show up at a demo, sales call, trade show, or meeting unprepared.</li>
<li>Ignore the competition; they are far inferior to us.</li>
<li>Miss deadlines that we commit to internally and externally.</li>
<li>Make recruiting, hiring, and training a lower priority because we are too busy doing other tasks.</li>
<li>Look for the next job assignment, instead of focusing on the current one.</li>
<li>Office gossip, rumors, and politics.</li>
<li>Rely on dissatisfied customers to be your service monitors.</li>
</ol>
<div>
I took the liberty of correcting the grammar in two places: 'jobs' in 5 was singular, and 9 contained a comma splice. Also, Wikipedia used a hyphen rather than a dash in 1; since it's unclear if this was Wikipedia's error or Mindspring's, I did not correct the Wikipedia page.</div>
</div>
</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com1tag:blogger.com,1999:blog-5143758400146642567.post-42631046658416418202013-07-18T23:48:00.001-04:002016-04-09T20:09:00.051-04:00Texas? New York? Lewis Black nails it. <a href="https://vimeo.com/70914835" target="_blank">Link</a> [ Note: the YouTube video has been deleted multiple times, so try the Vimeo one just above.<br />
<br />
<div style="background-color: black; width: 520px;">
<div style="padding: 4px;">
<iframe frameborder="0" height="288" src="http://media.mtvnservices.com/embed/mgid:arc:video:thedailyshow.com:b73da50a-f86f-4eb5-be52-3394e4e80059" width="512"></iframe><br />
<div style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 0px; margin-top: 4px; padding: 4px; text-align: left;">
<b><a href="http://thedailyshow.cc.com/">The Daily Show</a></b><br />
Get More: <a href="http://thedailyshow.cc.com/full-episodes/">Daily Show Full Episodes</a>,<a href="http://www.comedycentral.com/indecision">Indecision Political Humor</a>,<a href="http://www.facebook.com/thedailyshow">The Daily Show on Facebook</a></div>
</div>
</div>
<br />
Deceased YouTube link replaced with one directly to the Daily Show, 2014-07-08.Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-46596725052217416642013-06-23T19:34:00.000-04:002013-06-23T19:34:28.864-04:00Full-Disk Encryption, Linux Mint 15Plaa's instructions for full-disk encryption at http://community.linuxmint.com/tutorial/view/1166 work fine for Linux Mint 15. This is for a new installation, or a new Mint partition. Do it.<div>
<br /></div>
<div>
For convenience, I have reproduced his instructions here:</div>
<div>
<br /></div>
<div>
<div>
(1) Boot your system using the Linux Mint 15 live CD or USB stick.</div>
<div>
</div>
<div>
(2) Open a terminal and enter the following commands:</div>
<div>
<br /></div>
<div>
$ sudo apt-get remove ubiquity</div>
<div>
$ sudo apt-get update</div>
<div>
$ sudo apt-get install ubiquity</div>
<div>
$ sudo ubiquity</div>
</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com2tag:blogger.com,1999:blog-5143758400146642567.post-72831343361213280002013-06-12T13:14:00.001-04:002014-01-16T11:33:30.416-05:00We are Twitter's Twits, not their CustomersI've been disturbed by the invasive nature of many, many android apps. For example, here are the permissions requested by the Twitter app:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSuYnSHm8vNdSDDkR4kn1a7Ga9OehYxmIfXskeZeENdVyjYQGnObfJYQGVaPa3z-50Qsp3ln6_kF-LPuR_ABR-B2U6FdmqZQshnjl3XjecbP081cPpAmUPkwCrIPcR66-tBmm8i53atEc/s1600/BMfvRX7CEAI9gm5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSuYnSHm8vNdSDDkR4kn1a7Ga9OehYxmIfXskeZeENdVyjYQGnObfJYQGVaPa3z-50Qsp3ln6_kF-LPuR_ABR-B2U6FdmqZQshnjl3XjecbP081cPpAmUPkwCrIPcR66-tBmm8i53atEc/s640/BMfvRX7CEAI9gm5.png" height="640" width="400" /></a></div>
<br />
<ul>
<li>Why does Twitter need my location? They don't.</li>
<li>Why does Twitter need access to my accounts (note plural)? They don't. Why would I want to hand this over to them? That would be simply stupid.</li>
<li>Why would my contacts want me to hand their information over to Twitter? The naive ones may not to think to care, but most would likely prefer that I did not.</li>
<li>Why does Twitter need access to my Google service configuration? They don't. </li>
</ul>
<div>
Clearly, we are not Twitter's customers, but rather Twitter's twits. Why use their app when you can simply log in to their service via browser?</div>
<br />
Additionally, there are some ads that are simply blatant phishing attempts:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqIMuo4kR2x_JiS5-OzsjCS82cgoVPVU9yXhBu2LmJX5NglFxp77WRR0vvcbCu1q7N6mG7PWstbFdnS2UuByqbMHn0BgOVra1Qa7qTVsP0vJEKMqFvjFhQztpli-YkOSDFp5eLX4IZ3ns/s1600/Screenshot_2013-05-28-10-25-37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqIMuo4kR2x_JiS5-OzsjCS82cgoVPVU9yXhBu2LmJX5NglFxp77WRR0vvcbCu1q7N6mG7PWstbFdnS2UuByqbMHn0BgOVra1Qa7qTVsP0vJEKMqFvjFhQztpli-YkOSDFp5eLX4IZ3ns/s640/Screenshot_2013-05-28-10-25-37.png" height="640" width="400" /></a></div>
<br />
This is from the tunein app, which provides searches for radio stations and radio programs to stream. It's a nice service. It's ad-supported. The ad above, just above the highlighted Related tab, says I have one new message. So if I click that, where does it take me? Not to a message, or, rather, not to a message from anyone I could imagine listening to. It's a phishing ploy.Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-79987586500157937822013-06-10T11:02:00.001-04:002013-06-10T11:02:43.071-04:00Classic CS1 Test Question AnswerQ: What are the primary reasons for using procedures and functions?<br />
<br />
A: The primary reasons for using procedures and functions is for<br />
instability. A function is part of an expression and is used to<br />
determine what the program must do. A procedure is a statement in<br />
itself and the great thing about it is that any variable declared<br />
within a procedure can be referred to from anywhere in the program.<br />
<div>
<br /></div>
<div>
*************</div>
<div>
The date on the file I re-stumbled across this in is December 1996, though it could be older. I suspect this is an answer I received on a test, but it may have been something going around the Internet at the time.</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-43840625338030357382013-06-03T23:40:00.001-04:002013-06-03T23:52:33.789-04:00UMBC Frogs, Over a Stream Near a Pond, 2013-05-11 17:30<p>
This plays well in Firefox, but on my Linux system neither Opera nor Chrome can deal with it.
</p>
<embed height="50" src="https://userpages.umbc.edu/~jmartens/media/2013-05-11_17-28-05.wav" width="100"></embed>
<p>
However, you can access the media stream directly at <a href="https://userpages.umbc.edu/~jmartens/media/2013-05-11_17-28-05.wav">https://userpages.umbc.edu/~jmartens/media/2013-05-11_17-28-05.wav</a>.
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-38870219655706450652013-05-28T23:52:00.001-04:002013-05-28T23:52:41.806-04:00Comcast and Verizon in Competition AgainI understand that Comcast and Verizon have opened restaurants across the street from one another, that their prices are identical, that each wait staff is apathetic, and, though each serves a full menu, every diner is forced to order everything. Also, prospective customers find menus in their junk mail and left at their homes daily.<br />
<div>
<br /></div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-70392086364490224672013-05-19T19:05:00.000-04:002013-08-26T00:00:58.575-04:00About that RantSo at <a href="http://martesmartes.blogspot.com/2013/05/killall-plymouth.html">http://martesmartes.blogspot.com/2013/05/killall-plymouth.html</a> I ranted. How about something positive: XFCE. I blew away MATE, LXDE, etc., on my office 32b LUBUNTU 12.10 system and replaced it with XFCE. Now I'm running 64b Xubuntu 13.04 at home (at boot it still thinks it's Lubuntu): uninstall Mate, uninstall LXDE, install Xubuntu, and do an in-place upgrade to 13.04.<br />
<br />
LXDE was pretty solid, not annoying little bug after annoying little bug like Mate or Cinnamon. However, it was very primitive, and customization took effort, effort takes time, and I don't have much time for this stuff (so why am I writing this?).<br />
<br />
XFCE also seems pretty solid, and customization is pretty straightforward. Often there is not a menu choice to make the change I want to make, but a little time in RTFM mode and things become straightforward. I'm going to stick with this for awhile.<br />
<br />
In a sense being a Windows user is easier: the environment is terrible, Microsoft and other Windows application vendors bleed customers by 1000 cuts, but people put up with it because they don't know any better. Are the user environments any better on the Linux side? Maybe, maybe not. There has long been a strong "make it like windows" ethic among Linux developers, and Ubuntu has decided to make your desktop UI no better than a tablet. But at least there are choices, and XFCE and LXDE are sufficiently different from Gnome 3 and even from Mate that the choices are significant.Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-30128584395849106802013-05-19T11:48:00.002-04:002013-05-19T11:52:08.710-04:00killall plymouth<b><i>[ The below was written spring 2012, but somehow never got posted. It still captures my sentiments, so I thought I'd post it now. I've abandoned Mint for now and am using Xubuntu. ]</i></b><br />
<br />
Yet again I find myself debugging Linux Mint 13. There's a tool, plymouth, that is supposed to provide splash screens on boot--who the heck cares about that? Well, I care, since well after boot plymouthd is still running, holding RAM, and eating CPU.<br />
<br />
Googling reveals that others have had problems<br />
<br />
<rant><br />
The whole Ubuntu OS family is annoyingly buggy, and yet people are wasting time with things like splash screens and other useless bells and whistles rather than just fixing the crappy software base<br />
<ul>
<li>Last night I plugged in my Kindle, and Mate tells my I've plugged in a music player. WTF? I want it mounted as a thumb drive so I can use standard Unix tools.</li>
<li>Recently I've had to wrestle with cameras on Mint insisting on being opened with special, clumsy apps rather than just being mounted as thumb drives--which is effectively what they are. Even if I can get a file browser in there, it has crippled functionality. And what the hell is the path of the mount point? Nope, I either have to waste time figuring this useless crap out, use the crappy, logically useless, camera software, or just copy my pictures to a Windows machine, and then copy them to my real computer.</li>
<li>A friend used to have trouble with sound on Ubuntu. I just shrugged--computers have done sound for a couple decades. Now with my 64b Linux Mint 13 system, sound worked, then it stuttered continuously, and then it worked, and now it's completely dead. I don't have time to fritter away on this tripe.</li>
</ul>
</rant>Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0tag:blogger.com,1999:blog-5143758400146642567.post-46605281283454498972013-05-19T11:45:00.000-04:002013-05-19T11:45:03.408-04:00Amusement in Advertising from GoogleWeb access seemed sluggish this morning, so I hopped over to <a href="http://www.speedtest.net/" target="_blank">http://www.speedtest.net/ </a>to look at the results. They were okay:<div>
<br /><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihq7aML3yK-30GmGbz-3i1VWIANCeH3ItwOiDoZs9_o3xaJfE3DLaBCQ8Vo0sMfiqsf6DX2eu2XUzujwYnSJYX7LllXdKE_09QzIbSPUh7gVr44kEsLvXLYZ4tHR3ZBXQYw_L3hDqUVQ8/s1600/2013-05-19-113236_688x445_scrot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="411" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihq7aML3yK-30GmGbz-3i1VWIANCeH3ItwOiDoZs9_o3xaJfE3DLaBCQ8Vo0sMfiqsf6DX2eu2XUzujwYnSJYX7LllXdKE_09QzIbSPUh7gVr44kEsLvXLYZ4tHR3ZBXQYw_L3hDqUVQ8/s640/2013-05-19-113236_688x445_scrot.png" width="640" /></a></div>
<div>
<br /></div>
<div>
However, this was with Firefox, and the ad suggested results would be faster with Chrome. Really? I have Chrome, and use it often. Here are my Chrome results:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixf1yeP1KJ8ji80tRZfd8J7TgatpuC1WKAMeE2AMbDWaHAGe7_62ZVM7lIqPSKTmsMXU0AVOszyoRZfUwUWrA_LlZZ7H2hhj6dr9z3sn_ReSP24BSBt2tQ6s5OwRxVYjjI3Jcw3RKHL2c/s1600/2013-05-19-113304_681x438_scrot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="409" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixf1yeP1KJ8ji80tRZfd8J7TgatpuC1WKAMeE2AMbDWaHAGe7_62ZVM7lIqPSKTmsMXU0AVOszyoRZfUwUWrA_LlZZ7H2hhj6dr9z3sn_ReSP24BSBt2tQ6s5OwRxVYjjI3Jcw3RKHL2c/s640/2013-05-19-113304_681x438_scrot.png" width="640" /></a></div>
<div>
<br /></div>
<div>
Faster? My throughput with Chrome was just a little slower but the ping times suggest a lower RTT with Chrome, which could possibly suggest a faster scripting implementation. However, this was from two different servers, one reportedly in Frederick and the other in DC, and just one shot each. Perhaps a more detailed study is warranted, but not now.</div>
<div>
<br /></div>
</div>
Jeff Martenshttp://www.blogger.com/profile/13850434739505918547noreply@blogger.com0