<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Pj's Pinnwand</title>
    <description>Pj's Pinnwand is similar to a blog except it isn't a blog because 'blog' is a lame word.</description>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#8</guid>
      <title><![CDATA[My workaround for &quot;cp code.c test.c&quot;]]></title>
      <author>Anonymous</author>
      <pubDate>Thu, 24 Sep 2015 21:07:32 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/my_workaround_for_cp_code_c_test_c.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I used to do this accidentally all the time.&nbsp; My solution is this:<br><br>edit code.c<br>gcc -o code code.c && ./code<br><b>sh<br>cp code.c test.c<br>exit</B><br>edit code.c<br>gcc -o code code.c && ./code<br><br>This way it doesn't get stuck in your bash history.&nbsp; It's ugly, but it has saved me numerous times.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#50</guid>
      <title><![CDATA[Bullying]]></title>
      <author>Anon2</author>
      <pubDate>Wed, 2 Jun 2021 23:36:55 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/bullying.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Wow. Just Wow. Blame the victim. 'He said he was sorry'. Oh, now everything is fine, him bullying me the next day and the next was okay.&nbsp; What a moron that lady is.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#51</guid>
      <title><![CDATA[New Blog Software -- Update your Atom/RSS feed readers.]]></title>
      <author>Pj</author>
      <pubDate>Mon, 21 Feb 2022 12:16:43 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/new_blog_software_update_your_atom_rss_feed_readers.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">So I haven't made a post here in 2.5 years.<br><br>The problem was that I discovered Discord, and it just makes posting images (and even videos) so easy that I started posting all of my thoughts there, so that like 6 people could read them.&nbsp; The reach sucked, but the ease-of-use combined with my general laziness made the problem persist.<br><br>To get myself back to posting on the internet, I wrote some new blog software that makes it easy for me to post pictures and videos.&nbsp; It's not as easy as the &quot;paste the image here&quot; of Discord, but Discord had some negatives too, and on balance I think my new platform is superior.&nbsp; You can read more about the new software (and see some pictures) in <a href="/blog/1">a post about it on the new blog</a>.<br><br>I know some people have this blog in their Atom/RSS feed readers, as I can see the requests in the access log.&nbsp; So this post is to inform you all of the new blog's location:<br><br><center><a href="https://www.ecstaticlyrics.com/blog/">https://www.ecstaticlyrics.com/blog/</a></center><br><br>On that page you'll also find the link to the new blog's Atom/RSS feed.<br><br>As for what you missed out on, I plan to start copying the more interesting posts out of Discord and into my new blog, as I want to have that content on my web site, not buried away in the scroll-back history of a Discord channel.&nbsp; So don't worry about subscribing to my Discord.&nbsp; My days of posting my thoughts there are now over, and everything that is there that is worth seeing will appear on the new blog in the future.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#33</guid>
      <title><![CDATA[raspberry pi are crap and a waste of money and natures resources]]></title>
      <author>campfireguy</author>
      <pubDate>Thu, 21 Sep 2017 19:37:59 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/raspberry_pi_are_crap_and_a_waste_of_money_and_natures_resources.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I have many raspberrys, and I am beginning to see trought them. <br><br>Raspberry pis are crappy little computers with an endless ways to use them, but itself the pi is so crappy that you cannot do anything with it. Anything that will work decently.<br><br>You are not the only one.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#15</guid>
      <title><![CDATA[Quick question!]]></title>
      <author>nate</author>
      <pubDate>Tue, 15 Dec 2015 20:48:59 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/quick_question.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Hello there sir. I believe you are very knowledgable of the alesis micron. I own one which I love dearly as I have incorporated it into my shows quite marvelously. I'm curious whether or not you have anytime to discuss potential solutions or even perhaps buying a repaired one from you if any such thing existed? Your time and response would be a huge gift as I have been on this journey for quite some time. Hope to talk soon, thank you :)<br><br>Nate<br><br>natenathan88@gmail.com<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#17</guid>
      <title><![CDATA[Source Code for my PCB Editor]]></title>
      <author>Pj</author>
      <pubDate>Sat, 19 Dec 2015 20:25:34 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/source_code_for_my_pcb_editor.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I was going to keep my PCB editor to myself, using the distinctive design as my personal &quot;trademark&quot; for my own PCBs that I might sell, but honestly, when have I ever been so motivated to do anything?<br><br>I'm far more concerned that a hard drive failure might cause me to lose the code.&nbsp; It took me months to get the algorithms that move the tracks around to behave reasonably.&nbsp; I'd hate to have to do all of that shit over again.<br><br>So here's the code:  <a href="stuff/2015-12-19_PCB_Editor.tgz">2015-12-19_PCB_Editor.tgz</a><br><br>If anyone wants to modify it, we'll say it's released under my <a href="/antiviral/">antiviral license</a>, except for the stb_image.c within the archive whose own license I obviously have no desire to modify.<br><br>As for how it works, prepare to be horrified:<br><br>PCB data is saved in &quot;save.c&quot; as C source code.&nbsp; This is #include into the main &quot;pcb.c&quot; such that, when you recompile the executable, you create an executable that just has your PCB in it to begin with when you start the program.&nbsp; It's presently compiled with the FT240X board above, in case anyone wants to play with it.<br><br>The user interface is such that even I can't use it without a cheat-sheet:<br><br>The arrow keys scroll the screen around.&nbsp; Page up and page down change the zoom level.&nbsp; Number keys 1 through 4 change the current layer.&nbsp; The - and = keys change the current pad or track size, depending on which mode it is in.&nbsp; It has four modes of operation, switched by pressing F1 through F4.&nbsp; <br><br>F1 is &quot;Pad Mode,&quot; in which left click will create a new pad, and right click will select an existing pad for editing purposes.&nbsp; When creating a pad, it is created with the current pad radius (press - or = to adjust) and on the current layer (press 1 through 4 to adjust).&nbsp; You can type some text to label it, but this text is just a label, it won't appear on the final PCB, and it's only visible when the current layer is 1 or 2, it disappears when set to layers 3 or 4 so that it doesn't interfere with viewing the silkscreen layers.&nbsp; You can rotate the text with the &quot;home&quot; and &quot;end&quot; keys.&nbsp; You can delete the pad by pressing the &quot;delete&quot; key while it is in editing mode.&nbsp; Pressing enter removes the pad from editing mode.<br><br>F2 is &quot;unanimated track mode&quot;, where you can simply draw lines with the mouse.&nbsp; This is intended for drawing the silkscreen layer.&nbsp; Holding the left mouse button allows you to draw a track.&nbsp; Clicking the right mouse button deletes the closest track to the mouse pointer that is in the current layer.&nbsp; <br><br>F3 is &quot;pad move mode&quot;.&nbsp; You start by click-and-drag to form a box around a bunch of pads.&nbsp; Then use WASD to move those pads around.&nbsp; Holding shift will move them faster.&nbsp; Q and E will rotate them as a group.&nbsp; Pressing G will align them to the current grid.&nbsp; Another left click, for seemingly no reason, will de-select the pads, causing nothing more to happen when you press WASD until you draw another box.&nbsp; This is quite confusing, so I'll probably make it so that another left click just lets you draw another box to select new pads, or perhaps to add to the current selection.<br><br>F4 is &quot;animated track mode.&quot;  You start by left-clicking on a pad, then slowly move the mouse towards another pad, and then left-click on it.&nbsp; The track will slowly move to find the shortest path between those two pads.&nbsp; <br><br>Pressing &quot;.&quot; will toggle the visibility of the individual track points, which are constantly moving from source pad to destination pad.&nbsp; In doing so, each point inevitably ends up taking a shortcut towards the next point, which is what causes the tracks to become shorter.&nbsp; They are then repulsed by other tracks in the same layer and by pads in the same layer or on all layers.&nbsp; (the smallest pads are on a specific layer, intended for making surface mount pads)  Animated tracks on the silkscreen layers will repulse the board outline (the blue track you can't interact with), whereas unanimated tracks do not.<br><br>F5 toggles grid snap mode.&nbsp; When in F1 mode, when grid snap mode is enabled, the arrow keys will move the screen by one grid unit, making it easy to create a lot of pads with just the keyboard.&nbsp; Grid size is changed by [ and ] keys.&nbsp; <br><br>F6 saves the current PCB to &quot;save.c&quot;.&nbsp; The entire program must then be recompiled in order to &quot;load&quot; this saved file.&nbsp; Simply restarting the program will obviously leave you with the last version of the PCB that was compiled into it.<br><br>F7 through F12 control the animation of the tracks.&nbsp; F7 & F8 control how much distance is between each animated point in the tracks.&nbsp; F9 & F10 control the speed of the points.&nbsp; F11 & F12 control the strength of the repulsive force that pads and other track points create.&nbsp; Also, O and P control the clearance between tracks and pads that the program aims for.&nbsp; I tried to make these controls &quot;safe&quot;, but it is entirely possible that changing them will cause the track points to move in such a way that they all (literally all of them, not just a couple of them) tangle up within each other, so you should never play with these controls without saving the PCB first so that you can restore it if that happens.&nbsp; <br><br>Pressing &quot;M&quot; causes the entire PCB to be mirrored.&nbsp; This is so that you can draw silkscreen text on the back of the board without having to learn to draw text backwards.&nbsp; Similarly, pressing &quot;R&quot; causes it to rotate 90 degrees so that you can write at other angles.&nbsp; I suppose that mathematically this may slightly disturb the position of pads, but as all of the math is done with &quot;float&quot; variables, I can't imagine the error ever becomming sufficient that components no longer fit their pads.<br><br>Finally, IJKL work like arrow keys to shift the entire design on the screen.&nbsp; This is because the darker black on the screen (whose size is compiled into the code) is the maximum size of the PCB that DirtyPCBs will create, and so to ensure that the design still fits, it needs to be arranged within that square.&nbsp; As I would work on designs, I'd find them move out of that square, but still have plenty of space on the other side.&nbsp; IJKL allwws the whole design to be shifted in the coordinate space easily.<br><br>Oh, and the Gerber files are created when you press F6 to save, in a subdirectory named &quot;Gerbers.&quot;  <br><br>Also, I'm pretty sure I just explained all of that for absolutely no one but maybe myself in the future.&nbsp; If anyone actually ends up using this software, I'd love to hear about it.&nbsp; Indeed, if I don't, then I probably won't bother to keep it up-to-date if I make future changes.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#14</guid>
      <title><![CDATA[Layout]]></title>
      <author>phaelonimaire</author>
      <pubDate>Sat, 7 Nov 2015 00:30:38 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/layout_(1).html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Before I have boards made (with new footprints), I print the layout on paper and try to put the parts on that, first.&nbsp; That is, when I remember to do it.&nbsp; I've made a lot of surface mount footprints over the years, and the datasheets aren't always enough.&nbsp; The most difficult footprint I've drawn so far is one for a SODIMM (For this thing: <a href>Toradex SODIMM Computer Module</a> )<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#30</guid>
      <title><![CDATA[I Wrote My Own Synthesizer]]></title>
      <author>Pj</author>
      <pubDate>Mon, 20 Mar 2017 21:08:11 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/i_wrote_my_own_synthesizer.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">&gt; <font color="gray">I expect the only solution I'll ever find is to create my own audio device and write my own audio software to utilize it, but as that is a significant undertaking, I wouldn't recommend you hold your breath while waiting for my solution.&nbsp; Hell knows if I'll ever do it.</font><br><br>I'd forgotten I mentioned that here.&nbsp; Anyway, it turns out ALSA is entirely capable of doing the job, it's just that no one is bothering to do it properly.&nbsp; So I just had to write <a href="http://www.ecstaticlyrics.com/music/synthesizer/">my own synthesizer</a> to get reliable low-latency audio.<br><br>&gt; <font color="gray">Probably you'll just have to wait until the year 2100 when computer science has improved to the point that people have some fucking idea what the hell they're doing.</font><br><br>Seems I was quite right about that.&nbsp; I posted <a href="https://www.reddit.com/r/linuxaudio/comments/5pnv7o/minimal_latency_and_zero_xruns_without_realtime/">a link to my synthesizer on Reddit</a>, only to have it bashed by some idiot who was ignoring my synthesizer's actual performance so that he could focus on every made-up-on-the-spot reason he could think of as to why my approach isn't such a good idea.&nbsp; He insisted that Jack's approach is better because Jack can theoretically produce the same results with less CPU usage, disregarding the decade of experience we have proving that Jack can't produce the same results at all.&nbsp; <br><br>I fucking hate people.<br><br>I was hoping to inspire some change, since to be a complete solution, it really needs to be turned into a general audio daemon and it needs a sequencer and a better synthesizer designed to use it, but with my sleep disorder causing a serious deficit in my productive efforts, I can't do everything all by myself.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#36</guid>
      <title><![CDATA[dog turd better than this shit]]></title>
      <author>Anonymous</author>
      <pubDate>Fri, 23 Feb 2018 00:56:19 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/dog_turd_better_than_this_shit.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">fucking garbage piece of shit device waste of money<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#25</guid>
      <title><![CDATA[I'd been meaning to post an update about that...]]></title>
      <author>Pj</author>
      <pubDate>Tue, 24 May 2016 06:38:13 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/id_been_meaning_to_post_an_update_about_that.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I solved the voltage issues by cutting a USB cable to 3 inches, then connecting a 2.5 mm coax connector to it, so that the 5 volts had to run through a minimum of thin wiring.&nbsp; (My power supply itself has wiring as thick as a lamp cord, as it's able to output 3.5 amps.)  It's stupid that I had to do that, but it solved the problem.<br><br>I eventually figured out that the filesystem problems were due to the Pi not liking my SD card.&nbsp; The manufacturers of these things like to say that it's the card's fault, but I now have two cards that don't work in two of my devices, but swap them around and each is happy with the card that the other doesn't like.&nbsp; I think it's just a problem with device makers not testing their devices with very many cards.&nbsp; I noticed during my brief period of playing with them in Z80 computers that even among the very similar set of cards I had, they each had slightly different behaviors, so it took some time to develop a robust piece of code that was able to work with all of them.&nbsp; I think a lot of device manufacturers just write their code using just one kind of card, then declare any card that isn't compatible with their code to be broken.<br><br>I also found that the problem with MythTV is that, despite the fact that I obtained a version compiled specifically for the Pi, its default video output method (buried somewhere in its many menus) wasn't one that can work on the Pi.&nbsp; So I changed it to something else and it was finally able to play video without stuttering.&nbsp; None of the how-to guides I found mentioned this, though they all mentioned buying the MPEG hardware decoding license, which is something I didn't have to do.<br><br>So my mother has been using it to watch MythTV for the last six weeks.&nbsp; <br><br>It seems to lock up once every few days.&nbsp; The screen goes black and it won't respond to pings.&nbsp; After trying various things to help it out (adding a low ESR 1800 uF 6.3v capacitor, adding heat sinks despite no over-temperature indicator) it continued to do so, so I just told her to unplug it and plug it back in when that happens, which is stupid, but I don't know what else to do.<br><br>I bought some infrared sensors to try to use with MythTV.&nbsp; After six hours I gave up and told my mother she'd just have to keep using the keyboard.&nbsp; Again, my efforts were hindered by a lack of documentation, e.g.:<br><br>&gt; <font color="red">Everything i was looking for it's on forums and blogs on internet.</font><br><br>There's not one iota of official documentation for seemingly anything Pi-related.&nbsp; All of it is written by people who just fucked with it for a while, happened upon something that worked, and then documented how they think they made it happen.&nbsp; It's a complete mess.<br><br>My first problem with LIRC was that LIRC wants a pin number, but nothing says whether it wants the header pin number or a GPIO pin number, which is important since they're completely different.&nbsp; After figuring out that it wanted GPIO pin numbers, I chose a pin and put the sensor on it.&nbsp; After getting absolutely nothing out of it for a while, I began to wonder whether there were any restrictions about which GPIO pins could be used with LIRC.&nbsp; I searched for official documentation, or anything at all, that gave any indication of what pins were usable or whether it was even the case that only some pins were usable.&nbsp; I found absolutely nothing.&nbsp; So I just guessed that was the problem, tried a different pin, and what do you know:  It now half-ass worked.<br><br>However, after hours more, I found it constantly telling me &quot;sorry, something went wrong,&quot; which is an error message so useless that it makes me want to beat someone's head into a brick wall.&nbsp; I tried searching the internet for what the message means, but no one ever says what it means, and seemingly I'm the only person to ever wonder what it means.<br><br>Worse, it seemed to be stateful.&nbsp; LIRC would half-ass work until I was about half-way through the process of recording codes for a new remote, then it would spit out that message, and if I restarted it, it wouldn't work right anymore.&nbsp; I had to restart the Pi before it would return to normal.&nbsp; <br><br>In the end, I gave up and told my mother she'd just have to continue using the keyboard attached to a USB extension cord, which runs across the living room floor creating a trip hazard.&nbsp; I might try again in the future, but for now, I'm so pissed off that I think I need a month to cool down before I try again.<br><br>&gt; <font color="red">This is the first complain i've ever read about Raspberry and OSMC.</font><br><br>I know.&nbsp; I've read no complaints either, which is why I felt the need to get my experience out there.<br><br>I suspect that much of the reason for the lack of complaints is that the Pi is largely targeted for beginners, who are likely to assume that any difficulties they have are just the pain of learning.&nbsp; So if it takes an inordinate amount of time to make something happen, they're just more proud of themselves when it finally works, and if it doesn't, they just assume they're too dumb to make it work.&nbsp; So there's nothing for them to complain about.<br><br>Another factor is that most people like me probably just don't ever buy one.&nbsp; I've known about the thing for years, but always thought the thing seemed a tad stupid.&nbsp; For electronics projects, people seemed to do little more with it than make LEDs blink, and over the years it has had multiple stupid design issues, e.g. the original one lacking any screw holes, then I think another one had major overheating issues, etc.&nbsp; Then they can't seem to come up with any use to advertise it for other than &quot;education,&quot; and they can't even explain how it's useful for that.&nbsp; So there's warning signs all over this thing telling people to stay the fuck away from it.<br><br>However, I needed something to connect to my mother's T.V. so that she could use MythTV with OTA television, so she could dump her expensive cable, and at the time this seemed like the only way to make it happen short of spending $300 to put together a cheap computer.&nbsp; Had I known I had the option of obtaining a used computer from Microcenter for only $100, I definitely would have went that route instead, and so no one would have ever seen my complaints either.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#39</guid>
      <title><![CDATA[rapsberry pis are shit]]></title>
      <author>Anonymous</author>
      <pubDate>Fri, 29 Jun 2018 01:33:54 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/rapsberry_pis_are_shit.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">fuck rasopeberry pi, the endless changing of m,enus and instructions makes doing anything with it impossible,, its fucking junk and its going back, never had more time wasted by a a scam in my life,, they are forver tweaking and changing it ffs..<br>took me an hour to find how to enable the camera due to them moving the fucking menu in rapsi config,, i really thin thye think they are clver but its essentailly a programming cult,,, as is all programming..<br>but the instructions giving rgarding terminal commands and the ,language?&gt;<br>i want to change asetting,m should be fucking checkbox,,, but no im in some menu withy shit i dont undertsand,,, all i want to do is make the fucking camera work,, fuck raspberry, it could be easy but they really dont want that, they want youto keep learing new programming lingo that serves no fucking pupose whatever... fucke em.., its junk.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#23</guid>
      <title><![CDATA[The Raspberry Pi: I wish I could go back in time and not buy it.]]></title>
      <author>Pj</author>
      <pubDate>Wed, 6 Apr 2016 08:03:40 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/the_raspberry_pi_i_wish_i_could_go_back_in_time_and_not_buy_it.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I needed something to serve as a MythTV front-end so that I could get my mother off of cable television, something which she can no longer afford after retirement.&nbsp; So I thought &quot;maybe this might be a good use of one of those Raspberry Pi things,&quot; and a quick search on the internet revealed that it supposedly works.<br><br>Of course, it was also $50 to get a Raspberry Pi 3 and a power supply (I already had an SD card left over from something else), and I hate to spend $50, so I looked up what else I might be able to do with the Pi in case the MythTV project didn't work out, to justify spending so much.&nbsp; <br><br>Since it runs Linux I figured I'd be able to write C code for it, so that sounded good.&nbsp; ...and it has that GPIO connector.&nbsp; However, looking into the connector, I found a major lack of documentation.&nbsp; The web site for the Pi says little more than &quot;it's great for education.&quot;  After some digging I found there are two libraries, one of which is GPL, and the other...&nbsp; Well, I forget what, but something about it pissed me off too.&nbsp; Strangely they were both third-party libraries.&nbsp; It seems the Pi manufacturer can't be bothered to provide their own library for their own GPIO connector.&nbsp; Probably they're too busy talking about how great the Pi is for education.<br><br>So I thought &quot;well, I'd been wanting to make a portable audio recorder, and with Linux at its disposal and a 32 GB SD card, perhaps it could do that.&quot;  However, there's no audio input connector, and while there are a couple of audio boards available, they require a custom OS and they're expensive and, well, fuck.<br><br>So it seemed the only use I'd ever find for this thing was as a MythTV front-end.&nbsp; So I debated whether to buy it, but ultimately decided to, as the only alternative was to acquire used computers for free, which is hard to do, and my mother's house has three televisions so I'd need three computers.&nbsp; If I could make the Pi work, that'd only be $150, which isn't much more than a month of cable TV, so it'd be easy enough to come up with, whereas three computers would cost probably $900, or six months of cable, which isn't so easy to come by.<br><br>So I ordered one on Ebay and, after it arrived, I began downloading several OS images to try.<br><br>The first day of attempting to get it to work was entirely wasted due to insufficient power.&nbsp; While I had a 3.5 A power supply, the Pi has a micro USB connector for power input, despite the fact that it can never receive this power from a computer since it requires 2.5 A, and thus it obviously does no communication with a computer over this connector either.&nbsp; Anyway, it took some time to figure this out, as the thing just kept doing stupid shit and the rainbow square it puts in the corner of the screen to indicate low voltage means fuck-all to someone who isn't familiar with the system and doesn't know it isn't supposed to be there, particularly when they can't get past the fucking installer and so they figure it's just a part of the installer or maybe the OS, like an activity indicator or something.&nbsp; Amusingly, when I finally looked it up on the internet, I found a comment that said &quot;a lot of USB cables have wiring that's too thin.&quot;  No shit, they're USB cables.&nbsp; They're not supposed to carry more than 500 mA.<br><br>I eventually fixed that problem by cutting a perfectly good USB cable down to 3 inches and soldering a 2.5 mm coax connector to that, so that I could connect my 3.5 A power supply over a shorter length of USB cable.&nbsp; This allowed it to run without displaying the &quot;low voltage&quot; rainbow square.<br><br>The next day I received the power supply I had ordered for it on Ebay.&nbsp; It was only 2.0 A, but I figured that'd be enough since some of that power was certainly meant to drive USB peripherals, right?  Well, I dunno.&nbsp; The damn thing doesn't work with that power adapter, so it either always needs 2.5 A, that adapter can't supply 2.0 A, or the wiring in its cable is of too high a resistance to keep the Pi happy.&nbsp; So I switched back to my chopped-up USB cable.<br><br>I tried several ways of installing MythTV, one called &quot;OpenELEC,&quot; another called &quot;OSMC,&quot; and another which consisted of installing some MythTV packages onto &quot;Raspbian.&quot;<br><br>All of these failed until I realized the Pi didn't like my SD card.&nbsp; It mostly worked with it, but always eventually caused filesystem errors.&nbsp; So I switched to a new card.&nbsp; <br><br>I tried the old card in other things.&nbsp; In my SJ4000 camera, it causes all sorts of hell, in that the camera cannot format the card, but it can write video to it, but then after you stop recording it misunderstands the sector size and displays an error about it.&nbsp; However, the data is on the card if I stick it in a computer to play it back.&nbsp; In my GoPro Hero, it seems to work just fine.&nbsp; ...and that's weird since my SJ4000 is currently using a card which occasionally causes my GoPro Hero to lock up, but which works just fine in the SJ4000.&nbsp; ...or it was, but that card is now in the Pi.&nbsp; As much as every manufacturer of anything likes to blame SD cards for failures, it seems to me that the problem is actually just that they don't test their devices with very many cards.&nbsp; All of these cards work just fine if I plug them into a computer.&nbsp; Anyway...<br><br>The OpenELEC approach I never got to work.&nbsp; In particular I wasted at least three hours trying to figure out how to install a PVR plug-in, only to eventually figure out that all I had to do was reboot the Pi so that the stupid thing would check again to see that it had some.&nbsp; After enabling the MythTV plug-in, I then spent another 15 minutes trying to figure out how to access it before it occurred to me to try the same reboot trick, at which point a &quot;TV&quot; menu suddenly appeared.&nbsp; However, I never was able to actually get it to play any videos.<br><br>The OSMC approach worked much better, but the player it has is quite strange.&nbsp; In particular, when using the arrow keys to skip around in the recording, rather than working the way that MythTV does, where the right arrow skips ahead 30 seconds and the left arrow goes back 5 seconds, in OSMC the arrow keys skipped different intervals depending on how many times they are pressed.&nbsp; There was a delay after I pressed them, seemingly to wait and count how many times I was going to press them, then it would skip, taking a second or so to get going again.&nbsp; This was going to make skipping commercials a positively miserable experience, so I decided I had to find something else.<br><br>So I tried installing MythTV in Raspbian.&nbsp; It's a special version of Debian, but it doesn't have MythTV packages by default.&nbsp; Instead you have to download them from some dude and install them.&nbsp; Apparently you also have to purchase an MPEG license for the Pi, which costs only $2 or so, but takes 48-72 hours to receive, so I skipped that step to see how the rest works.<br><br>It doesn't work well.&nbsp; When playing any recording, it immediately pops up errors about audio not working, taking them down just a few seconds later just to make sure you don't have enough time to actually read them.&nbsp; It said something about AOOSS failing, which I can only guess stands for &quot;Audio Output Open Source Sound,&quot; which sounds like the last thing that should be attempted in modern Linux.&nbsp; <br><br>I then looked into audio settings, but after figuring the menu had locked up for about five minutes, I eventually realized that the problem was that it was simply failing to highlight buttons and stuff as I tabbed through the MythTV settings.&nbsp; So attempting to adjust the settings was borderline impossible.<br><br>So, I dunno, maybe if I buy that MPEG license, the audio comes out of the hardware MPEG decoder and works that way?<br><br>Well, I'm not going to find out, because of the real show-stopper problem:  Once I install the MythTV package, if I reboot the Pi, it fails to get into the GUI.<br><br>The worst part of all of this is that, in figuring out the damn thing just wasn't going to work, I spent hours downloading various images, hours more copying them to SD cards, testing, trying to find instructions for doing shit, wondering how it was that apparently no one was having the problems I was having, etc.&nbsp; The most pain-in-the-ass aspect was that I had the MythTV back-end set up in a Linux VM on my mother's computer running Windows 7, but when I needed to write a new image to the SD card, I had to reboot to Linux, on account of there not being a disk image writing tool for Windows.&nbsp; ...which is a point where OSMC wins since it comes with its own &quot;installer&quot; that writes the image to the disk, but the others just give you binary images, one of them linking to an image writing tool which doesn't work and thankfully so as the reviews for it all indicate that it frequently fucks up and writes the image to the wrong drive.&nbsp; ...and then, God forbid I need to look up on the internet how to use any Pi software, as I then need to swap HDMI cables back to the PC so I can search the internet, then swap back to the Pi to test shit, then back to the PC to look for more help, etc.&nbsp; Honestly, monitor swapping makes the fact that the Pi has an HDMI connector feel more like a negative than a positive.<br><br>Anyway, at this point I just want to beat it to dust with a hammer.&nbsp; However, the cock-sucking piece of shit cost me $45, so I can't do that.&nbsp; That's too much money to have go to waste.&nbsp; Just off the top of my head I can think of four things I elected not to buy this week because I didn't really want to spend the money that would have been far more useful to have than this stupid fucking Raspberry Pi.<br><br>At this point I can't think of what else to do other than to buy that MPEG license on the off-chance that somehow the failure to boot the GUI after installing MythTV is somehow related to not having that license, but I hate to waste $2 and another day of my life on this piece of shit.<br><br>My back-up plan was to give it to my nephew to use as a computer, but from what I've seen, if I did that, he'd be calling me to come fix it every few days until finally, out of frustration, I took it from him and beat it to dust with a hammer, at which point he probably wouldn't be too happy.&nbsp; So I can't give it to him.&nbsp; At least not without &quot;I reserve the right to confiscate it and set it on fire,&quot; but then I wouldn't expect that to turn out well either, so I can't let him have it.<br><br>So I guess if I can't make it work and I can't return it, I'll just beat it to dust with a hammer.&nbsp; Honestly, it's the only fitting thing I can think of to do with it.&nbsp; In particular since, to keep it at all for whatever dumb-fuck thing it might actually be usable, I'd have to invest in another SD card hoping to end up with one it likes.<br><br>Oh, and while the thing does have screw holes, they're not much bigger than a toothpick.&nbsp; I ended up mounting it to a piece of wood by drilling holes in the wood and hammering toothpicks into the holes since I couldn't find any screws that fit through those tiny fucking holes.&nbsp; Everything about this thing is just so damned fucking PITA.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#11</guid>
      <title><![CDATA[Permanent bash history]]></title>
      <author>crunge</author>
      <pubDate>Thu, 8 Oct 2015 04:46:51 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/permanent_bash_history.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I have one use for saved base history. I log into my server, hit up arrow, and it pulls up &quot;screen -rdU;exit' most of the time.<br><br>You can also set HISTFILE to /dev/null.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#24</guid>
      <title><![CDATA[i think it's your problem]]></title>
      <author>facuz</author>
      <pubDate>Tue, 24 May 2016 04:24:05 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/i_think_its_your_problem.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">1 year ago i bought a Raspberry Pi 2 at only 35€ more or less.<br>I installed OSMC and in 15 minutes all was working good.<br>Everything i was looking for it's on forums and blogs on internet.<br>I spent some days to understand what to install and how to obtain the best from my Raspberry, but now i have my amazing mediacenter always connected to my TV and i use it almost everyday, without any problem.<br>I added RetroPie to OSMC so i can play retrogames with my kids thanks to 2 wireless gamepads, and i installed a torrent client too and some other stuff so my raspberry now is also a download server for movies, TV series and music.<br>I never faced the problem you mention, and everyday i think that buy that Raspberry has been the best idea i had.<br>This is the first complain i've ever read about Raspberry and OSMC.<br>  <br>     Stefano<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#45</guid>
      <title><![CDATA[Don't beat yourself up.]]></title>
      <author>A brother</author>
      <pubDate>Wed, 15 Jul 2020 09:02:33 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/dont_beat_yourself_up.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I used to work in IT and data security starting back in 2002 &quot;THE YEAR OF THE LINUX DESKTOP!&quot; when my buddies were recompiling Gentoo daily to get a CD drive to work and I was still reinstalling Windows XP monthly to make it clean. <br><br>Back then if you had a problem with XP millions of other people had the same problem and there were fixes.<br><br>If you had a problem with Debian, BDS, or any of the &quot;mainstream&quot; distros &quot;read the documentation&quot; &quot;search the forum&quot; &quot;this issue has already bean addressed&quot;.<br><br>2019 the world is further from a Linux desktop than we've ever been. &quot;If it doesn't work, you're the problem&quot; has certainly been effective.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#38</guid>
      <title><![CDATA[I wouldn't so much blame it on Linux]]></title>
      <author>Pj</author>
      <pubDate>Thu, 7 Jun 2018 09:17:49 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/i_wouldnt_so_much_blame_it_on_linux.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I use Linux as my main OS.&nbsp; It is a bit of a PITA, but I prefer it to Windows because I can eventually get it to do what I want, whereas with Windows, if it doesn't already do what I want, then I might as well forget about what I want.<br><br>The problems I had with the Pi are mostly due to poor design of the hardware and software.&nbsp; I can install Linux on a PC and, while I don't much like the default configuration, it does work, and I could use it that way.&nbsp; I expect the same from software for the Pi, but instead, for whatever reason, a version of MythTV specifically for the Pi doesn't install with a configuration that's compatible with the Pi.&nbsp; It's just ridiculous.<br><br>Linux itself has its problems, but they're not nearly as bad as the Raspberry Pi.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#16</guid>
      <title><![CDATA[I guess my email is broken...]]></title>
      <author>Pj</author>
      <pubDate>Wed, 16 Dec 2015 20:11:12 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/i_guess_my_email_is_broken.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">&gt; I own one which I love dearly<br><br>How that could happen is beyond my understanding.&nbsp; The thing is truly a piece of shit.&nbsp; The only part of it that is of any value is the keyboard module.&nbsp; I've removed it and made a MIDI controller out of it, but the rest of the device has collected dust for years, and despite being almost unused, almost every part of it is now broken.&nbsp; The volume knob produces static when turned, when some of the buttons are pressed it behaves as if other buttons are pressed, the pitch wheel is also defective (despite that I never use it because I think pitch wheels are stupid), the power jack connector has worn out, and even looking past all of the hardware faults, the device itself is rather lame in that, while it can technically produce the sound of multiple instruments at once, it doesn't do so in a way that resembles how MIDI devices usually operate, and even if it did, the sound of most instruments programmed into it is greatly dependent upon the effects processor, of which there is only one, and so when using multiple instruments at once, you can only apply the proper effects of one of them, and so all of the rest sound quite lame.&nbsp; <br><br>The thing truly is a complete piece of shit.&nbsp; Do yourself a favor and fall in love with something else.<br><br>&gt; I'm curious whether or not you have anytime to discuss potential solutions<br><br>There is a wonderful application called <a href="http://zynaddsubfx.sourceforge.net/">ZynAddSubFX</a>.&nbsp; However, every time I've tried it on Windows, it's had significant lag between note-on events and the actual sound being produced.&nbsp; The lag can be reduced to almost nothing by running it in Linux, but then you have to deal with Linux sound issues, resulting in it being unreliable, only working when the phase of the moon is just right.<br><br>Unfortunately, while every game in the days of DOS was able to figure out that you can get real-time response out of audio simply by writing into the DMA buffer, I've discussed the issue with some Linux people and they're strangely under the impression that writing to a DMA buffer that is in use might cause the computer to crash or something.&nbsp; So they're unwilling to do that, and so instead the approach taken in Linux is to minimize the size of the buffer, causing the whole experience to be a trade-off between too much lag and too many buffer under-runs.<br><br>I expect the only solution I'll ever find is to create my own audio device and write my own audio software to utilize it, but as that is a significant undertaking, I wouldn't recommend you hold your breath while waiting for my solution.&nbsp; Hell knows if I'll ever do it.<br><br>Probably you'll just have to wait until the year 2100 when computer science has improved to the point that people have some fucking idea what the hell they're doing.&nbsp; Perhaps then something as simple as real-time synthesis of audio will be possible on a PC.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#43</guid>
      <title><![CDATA[NATPOS updates, and the lack thereof...]]></title>
      <author>Pj</author>
      <pubDate>Wed, 26 Jun 2019 23:04:27 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/natpos_updates_and_the_lack_thereof.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I'm quite amused that people like Natpos.&nbsp; There's two separate services someone has pointed at its download page to watch for updates.&nbsp; ...but I don't know that I'll ever update it.<br><br>I became disinterested in SDR after a while because I couldn't find anything on it that I cared to listen to.&nbsp; Indeed, the only remotely interesting thing I found was a bunch of people being fuckwits on 7.020 MHz, as they were the only ones who cared to occasionally have a real discussion.&nbsp; All of the other hams are just having mindless conversations about their antennas.&nbsp; <br><br>So when I rearranged my house like 18 months ago I never hooked the antenna back up and a few months ago the antenna broke so I just took it down rather than repair it.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#1</guid>
      <title><![CDATA[Documentary shows an incompetent school dealing with bullying.]]></title>
      <author>Pj</author>
      <pubDate>Sun, 16 Nov 2014 13:06:49 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/documentary_shows_an_incompetent_school_dealing_with_bullying_(1).html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">An excerpt from a documentary on bullying that aired on PBS a month ago (which I just now got around to watching on the DVR):<br><br><a href="http://www.youtube.com/watch?v=LtoJL1NgeSQ">YouTube</a>, or if that fails, <a href="http://www.pbs.org/independentlens/bully/">the film's web site</a>, click the clip that is 2:08 in length, with the thumbnail of the kid in the red and white striped shirt.<br><br>Honestly, I'm shocked as hell that they were able to record that.&nbsp; Not at all surprised that it happened, since that shit happened to me all the time from 6th to 8th grade.&nbsp; What surprises me is that you'd think that people who aren't doing anything about bullying in their schools would have some fucking clue that they're not doing anything about bullying in their schools and not let filmmakers in to record their incompetence so that everyone can see it.<br><br>I just don't understand how people can be that fucking stupid.&nbsp; If I hadn't seen that same kind of insanity when I was in school, I'd probably be pointing to the obvious editing points in the video and insisting they are taking something out of context.&nbsp; It just doesn't make any sense that someone can be intelligent enough to form sentences and yet be as stupid as this woman is.<br><br>The clip is from a movie titled &quot;Bully&quot; which aired as an episode of &quot;Independent Lens&quot; on PBS.&nbsp; Unfortunately it doesn't appear to be available to view online.<br><br>...but the film had plenty more where that came from.&nbsp; At one point, one administrator is talking to various kids on a bullied kid's bus, after being forced to confront the issue when the filmmakers decided they couldn't just keep recording it and not saying anything, and so they showed his parents who then went to the school to listen to more of this woman's bullshit.&nbsp; Afterwards she gets someone else to investigate, seemingly not because she wants to, but because she realizes that if she doesn't then all of the other kids will realize they can get away with anything.&nbsp; So this other woman interviews all of the kids on the bus, and finally she ends up talking to the bullied kid himself, during which they have this gem of an exchange:<br><br><div class="block"><b>School Bitch</b>: Do you trust us that we'll do something when you tell us that someone is bothering you?<br><br><b>Poor Kid</b>: Well, in 6th grade you did nothing about Teddy sitting on my head.<br><br><b>Kid's Mom</b>: On the bus?<br><br><b>Poor Kid</b>: Yeah, there's a little knob, you can, once you unlock it you can lift up the seats, and he lifted up the seat, put my head in it, and sat on my head.<br><br><b>School Bitch</b>: How do you know I didn't do anything?<br><br><b>Poor Kid</b>: I don't know, 'cause...<br><br><b>School Bitch</b>: Did he sit on your head, after you told me?<br><br><b>School Bitch</b>: I did talk to him, and he didn't do that again, did he?<br><br><i>...and then the response that anyone with two working brain cells should have seen coming a mile away:</i><br><br><b>Poor Kid</b>: No, but he was still doing other stuff after that.</div><br>...and a transcription doesn't even do it justice.&nbsp; I mean, you have to see the video to see the way that the kid feels threatened and just doesn't know what the hell to say in response to &quot;how do you know I didn't do anything?&quot;  You can just tell, he knows he's fucked and nothing is going to change because you can't win an argument with someone who can't fucking think.&nbsp; ...and the fucking death stare she gives him, like &quot;how dare you suggest I failed to address the issue.&quot;<br><br>It's insane.&nbsp; Everyone knows that when the kid said &quot;you didn't do anything&quot; that it meant &quot;whatever the fuck you did it didn't change anything.&quot;  ...but no, it's easier to take the kid literally and tell him all about how you absolutely did do something, and he totally didn't get his head sat on again and he damn well knows it.&nbsp; I'm surprised they weren't able to include additional footage of her forcing him to apologize for being disrespectful, but then his mother was in the room.&nbsp; I guarantee that if she wasn't there then things would have been a lot uglier for him.<br><br>Even the parents take a stab at being incompetent.&nbsp; They seem to care about him, kind of, maybe.&nbsp; I don't know, it just seems like they've phoning in the support.<br><br>Early in the movie, the mother asks him how his day went, and he says everything is fine, then just zombie stares at her for a minute.&nbsp; She then replies with &quot;I'm glad you didn't have any problems today&quot; and follows it up with &quot;Next time I get the whole story, OK?&quot;  Not the worst thing I guess, but I just wanted to fucking yell at her &quot;put the baby down and give the kid a hug.&quot;  The kid is obviously having a hard time and you just kind of bitch at him for not telling you about it?<br><br>Later in the movie, the father is talking with him, and well, the first thing that pisses me off is that he asks &quot;what happened this week on the bus?&quot;  This <i>week</i>?  Oh, fuck you.&nbsp; Your kid is getting beat up on the bus every day and the best you can do is ask him once a week how things are going?  You might as well just tell him &quot;you know what, honestly, I don't really care.&quot;<br><br>Then he goes on to say &quot;...and who knows, next year, this high school kid, instead of picking on you, is gonna then pick on your little sister.&nbsp; ...and what are you going to do about it?&quot;  Oh, fuck you.&nbsp; Just...&nbsp; Fuck you.<br><br>I'm left with the impression that the only reason the kid's parents are talking to him at all is because they're in a movie about bullying.<br><br>Anyway, the whole thing just pisses me off so much that I had to post about it.&nbsp; I just can't get over the dumb bitch telling the first kid that he's just like that bully because he wasn't sincere when she told him to shake hands with the bully after the bully apologized.&nbsp; ...and then asking if he can just try to get along with the bully.&nbsp; <br><br>It's like the administrators are bullies too.&nbsp; They see a problem between two kids, one is obviously weaker than the other, so they solve the problem by attacking the weaker kid.&nbsp; I don't know how else to explain it.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#5</guid>
      <title><![CDATA[Backups and Linux's Bullshit]]></title>
      <author>Pj</author>
      <pubDate>Wed, 2 Sep 2015 18:46:19 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/backups_and_linuxs_bullshit.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Actually, I think I do like to blog.&nbsp; So here's a new wall of text for you to read:<br><br>After linking to the awesome web server I wrote in Perl from my previous blog post, I accidentally deleted it.<br><br>I'd noticed in the access log that occasionally a random IP comes along and requests a bunch of files from /cgi-bin/ (which doesn't exist) presumably looking for exploits.&nbsp; Just for shits, I decided to create the folder and put empty files in there.<br><br>Then I looked at the directory listing, but all of the empty files looked unsatisfying.&nbsp; So I typed this command:<br><br><tt>for i in *; do dd if=/dev/urandom of=$i bs=4096 count=1; done</tt><br><br>Then I thought &quot;what if I toss enough random binary data in there that, by luck, whatever script they're using to parse the output crashes?&quot;  Seemed worth an attempt.&nbsp; So I edited the command to change <tt>count=1</tt> to <tt>count=4096</tt> and went about executing it again.&nbsp; <br><br>However, somehow (and I'm still not sure how, as I had to type <tt>cd ..</tt> twice to get there) I executed the command within the directory that contained the web server itself rather than the folder which contained the bogus files.&nbsp; Thus, I accidentally deleted it while doing something that, even if it had happened the way it was supposed to, would still have been entirely pointless.<br><br>Honestly, the command like is a dangerous place.&nbsp; <br><br>I fuck shit up all of the time by pressing the up arrow to re-execute a previous command, but accidentally pressing enter after returning to the wrong one.&nbsp; Far too often I find myself in a loop like this:<br><br><tt>edit code.c<br>compile code.c && ./code<br>edit code.c<br>compile code.c && ./code<br>edit code.c<br>compile code.c && ./code</tt><br><br>Like any sane person, I don't re-type the commands, I just press &quot;up up enter&quot; each time I find myself at the command line.&nbsp; Then I decide I want to make major changes to code.c, but I'm not sure I want to keep them, so I decide to make those changes to test.c instead.&nbsp; So I type this...<br><br><tt>cp code.c test.c<br>edit test.c</tt><br><br>Then I spend about an hour making those changes to test.c.&nbsp; Finally, ready to test out my changes, I exit the editor and, like I've been doing in all of the previous instances, I press &quot;up up enter&quot; to re-execute the compile command.&nbsp; ...but of course, that just re-executes the cp command, wiping out the last hour of work.&nbsp; Fuck!<br><br>Indeed, every time I find myself removing a bunch of files, and typing a command like this...<br><br><tt>rm -r /this/that/whatever</tt><br><br>I become ultra-paranoid as I'm typing it.&nbsp; Pressing enter accidentally is too fucking easy.<br><br>Computer filesystems are simply too unforgiving of mistakes.&nbsp; They aren't designed for use by humans.&nbsp; Undo is one of the most important features of almost any software.<br><br>Anyway, since I still haven't written <a href="backup_software.html">my awesome backup software</a>, my last &quot;backup&quot; was a few months ago, and the web server is newer than that.&nbsp; So no more awesome little web server.<br><br>Since what prompts me to make &quot;backups&quot; is the realization that I can lose all of my data, I now set about making new &quot;backups&quot; by once again copying my home directory to external media.<br><br>In copying to one disk, I accidentally nudged (and just barely) the USB connector, which prompted the OS to give up and assumed the drive was gone forever, even though it became accessible again almost immediately.&nbsp; <br><br>I'll never understand why the people implementing USB haven't considered the possibility of intermittent outages.&nbsp; Rather than just corrupt the file system, the OS's response to unplugging of removable media that hasn't been dismounted should be a pop-up window that says &quot;plug that thing back in, I ain't done with it,&quot; at which point it merely continues to use it as if it hadn't been unplugged at all.<br><br>After copying my files to the second drive (the one I didn't accidentally unplug) I decided to run a filesystem check.&nbsp; First thing I noted was that it had journal items to replay, which is interesting since that happens at every mount, so those items must have been left over from when I'd just cleanly unmounted the drive a moment ago.&nbsp; How the fuck that happened I have no idea.<br><br>Linux does make it confusing as fuck to unmount media.&nbsp; In Windows, you click unmount, then it tells you when it is safe.&nbsp; Apparently in Linux they decided that was an unnecessary notification since in many cases it appears immediately.&nbsp; So at first they disabled that notification, but sometimes media doesn't unmount instantly, and so you disconnect it too soon.&nbsp; So then they made a pop-up that appears if the unmount is taking more than a few seconds, so then you click unmount, and since you rarely see anything telling you to remove the media, you wait a second, then remove it, and then a split second later a window pops up to tell you that the unmount is taking longer than usual.&nbsp; Their latest incarnation of incompetence is to give you no notification at all, but let you see when the unmount is complete by keeping the icon for the external media in the file browser until the unmount is finished, then the icon disappears.&nbsp; So now, since you don't know this, you unmount, wait 20 seconds (to make sure that the old behavior, where a window pops up to tell you it's taking longer than usual, doesn't occur), then disconnect the drive, at which point a window pops up to say &quot;you shouldn't have done that.&quot;  So you plug it back in to fix the filesystem, but then it says &quot;nope, since you used NTFS (since FAT can't do &gt; 2 GB files and you need to access the media from Windows as well) you need to plug your media into a Windows computer, repair the filesystem, unmount it, mount it and check it again, and only then can you access it from Linux.&quot;  (Seriously.)  Dumb fucks.<br><br>So anyway, I sit there for a while waiting for the icon to disappear, but it never does.&nbsp; So I type &quot;sync&quot; in a console, and a second later it's done, but the icon is still there.&nbsp; So I try the umount command manually, but it's all like &quot;it ain't mounted, bitch.&quot;  So I try typing &quot;sync&quot; a few more times, but I'm left to assume that the dumb fucks only implemented the behavior of the icon disappearing for flash media, under the assumption that hard disks aren't ever actually removed from a system.&nbsp; So I just unplug the drive.&nbsp; <br><br>So I don't know, perhaps it wasn't cleanly unmounted.&nbsp; It's hard to tell when apparently anyone with a stupid idea for how to change the behavior of a GUI used by millions of people can do so without anyone stepping in to say &quot;Jesus fucking Christ, it works the way it is and no one has a problem with it but you.&nbsp; If you don't like the fact that it notifies you that you can remove the media immediately after you unmount it, then just use slower media and write more data to it so that you have to wait.&quot;<br><br>Anyway, the file system check then went on to discover a bunch of errors, which it told me I'd have to use --rebuild-tree to fix.&nbsp; ...and --rebuild-tree warns that I should back up the data first.<br><br>Yes, I needed to back up my backups.&nbsp; Deciding I just didn't care, as I assumed it was unlikely to lose the data and it wasn't my only backup (except for some really old backups, from before I obtained the second external drive), I didn't bother to make a backup of the drive first.<br><br>After that ten hour process, somehow the drive now contained a basic Linux filesystem (busybox + things like /proc/ and /etc/) and a couple of the folders which were on the drive before, but the vast majority of stuff was now missing.&nbsp; Thinking that perhaps that stuff was in a sub-folder now, I looked around, but it wasn't.<br><br>So I decided &quot;fuck it&quot; and created a new filesystem, using ext4 rather than reiserfs as it had been before.<br><br>While doing that, I noticed that the output of the rebuilding process, which was still visible in the command window, indicated that it had put enough files and folders into /lost+found/ that everything I had on the drive was likely in there.&nbsp; However, that folder wasn't on the drive when I'd examined it.&nbsp; Being the whole purpose of that folder, I certainly would have looked there for my files.<br><br>After making the new filesystem, I mounted it, to reveal a totally empty hard disk.&nbsp; This seemed a tad surprising at first, but then I remembered &quot;oh yeah, I just reformatted it.&quot;<br><br>Then, in a command window, I made my way into the directory where it was mounted, as in formatting it I'd chosen a specific volume label and wanted to see that it was mounted under that name rather than a random UUID.&nbsp; Indeed it was.&nbsp; However, I have this habit of typing <tt>ls</tt> even when I don't care to look at what files are present, and I noticed that it didn't indicate an empty drive.&nbsp; It told me that there was single folder, /lost+found/, on the drive.<br><br>I looked up at the folder window, which was still empty.<br><br><b>So I needlessly deleted all of my backups because the motherfucking file browser in Linux hides the lost+found folder!</b><br><br>Undoubtedly this is because ext4, unlike reiserfs, re-creates that folder at every mount whether it has anything to put in it or not, and the authors of the file browser were simply sick of looking at it, so they made it hidden.&nbsp; However, since I was using reiserfs on all of my removable media, I'd never noticed that the folder wasn't being shown since it usually isn't there and so I'd never expected to see it before.&nbsp; Why would it be hidden, when the convention in Linux is that only file names which begin with a period are hidden?<br><br>Well, stupid me for assuming that the file browser is actually going to show me what files are on my disk.<br><br>I guess I really need to write <a href="backup_software.html">my awesome backup software</a>, for seemingly countless fucking reasons.&nbsp; Apparently everything about how my computer works is conspiring against me to cause me to lose data, and so having it written to uneraseable media is the only way to be safe.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#22</guid>
      <title><![CDATA[Automatic Array Limit Checks in C]]></title>
      <author>Pj</author>
      <pubDate>Tue, 22 Mar 2016 21:08:02 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/automatic_array_limit_checks_in_c.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Everyone insists that C cannot have automatic array limit checking without a massive performance penalty.&nbsp; I disagree.<br><br>I'm assuming that the way it would be implemented is with a new pointer type, which I'll describe here, and then provide some example code that implements something similar in order to see just what the performance impact would be.<br><br>To understand how my new &quot;safe&quot; pointers might work, consider how C's existing &quot;complex&quot; float type works.&nbsp; It is in reality a structure of two floats, but the compiler allows it to be used as if it is a simple variable.&nbsp; So you can add them together, multiply them, call functions with them, etc., and it just generates the correct code for those operations, e.g. in the case of multiplying two complex floats, it generates four multiplication operations, an addition and a subtraction, then puts the results into the correct places.&nbsp; It also knows how to allow complex values to interact with ordinary floats, by considering the ordinary floats to be complex floats with a zero imaginary part.&nbsp; The result is seamless integration of something new into the existing language in a way that is very easy to use.<br><br>In the same way, I'd like to see array limit checking integrated as just a new type of pointer:<br><br><tt>safe char array[100];</tt><br><br>When the compiler stumbles upon this code, it would actually create a char pointer and a size_t, placing &quot;100&quot; into the size_t automatically.<br><br>Alternately, you could allocate an array like this:<br><br><tt>safe char array;<br>array = malloc(100);</tt><br><br>Much like a complex float returned from a function actually returns a structure of two floats, the return from this malloc() would be a structure of a char pointer and a size_t that is equal to the size of the memory allocated.&nbsp; In the event that malloc() were used to assign to an ordinary pointer without size data, the compiler would know how to discard the size data and copy only the pointer data automatically, making a cast unnecessary.&nbsp; This is good as it makes it compatible with existing code.<br><br>Then you could use the array like this:<br><br><tt>safe char array[10] = &quot;Cool stuff!&quot;;<br>printf(&quot;String: %s\n&quot;, array);</tt><br><br>This would pass the array pointer and its size to printf() which could then be certain not to read past the end of the array, useful in the case that you failed to put the null character at the end of the string.&nbsp; Note that this would require a format identifier other than 's' since 's' is already designed to accept the unsafe pointers that don't contain a limit, but as it would have a new identifier, there would be no need for a new printf(), as printf() already accepts any data type as an argument.<br><br>You could also call old functions that expect old unsafe pointers like this:<br><br><tt>void old_stuff(char *);<br>safe char array[100];<br>old_stuff(array);</tt><br><br>Here, the compiler would see that the old_stuff() wants a &quot;char *&quot; while our array is a &quot;safe char *&quot;, and it would simply turn our &quot;safe char *&quot; into a &quot;char *&quot; by discarding the size data and passing along only the pointer.&nbsp; This would allow people to immediately use this new data type even before old libraries are updated to use it.&nbsp; <br><br>As for compatibility in the other direction, that would require an explicit cast, to insert the size data either from a constant or from the variable it is being stored in:<br><br><tt>void new_stuff(safe char *);<br>char array[100];<br>int size;<br>size = fread(array, 1, 100, file);<br>new_stuff( (safe char *) {array, size} );</tt><br><br>...or that might also be implemented as a compile-time function...<br><br><tt>void new_stuff(safe char *);<br>char array[100];<br>int size;<br>size = fread(array, 1, 100, file);<br>new_stuff( safe_char(array, size) );</tt><br><br>I've mentioned this idea before on Slashdot and probably Reddit, but of course, people are always like &quot;that would ruin the performance of C code.&quot;  Someone even linked me to some C project that would add limit checks to your C programs, which claimed that they caused a 30% slow-down (or something like that) when added to an executable.&nbsp; If it were that severe then I could see people taking issue with the idea, but frankly, if it slows the code down that much, then I think someone is doing something wrong.&nbsp; <br><br>To demonstrate, I wrote some code in which I implemented a crude form of what I've described above.&nbsp; I created a structure that contains both a pointer and a size.&nbsp; I then created a function to allocate memory for this new pointer type, a function to read from it, and a function to write to it.&nbsp; Since, if it were implemented as I've described above, assignment would be done with the usual '=' operator rather than with functions, I made the functions inline so that the compiler will in-line the limit checking and the assignment, and thus be able to optimize those operations.<br><br>This is the code I ended up with:<br><br><div class="block"><pre>#include &lt;stdlib.h&gt;<br>#include &lt;stdio.h&gt;<br><br>typedef struct {<br>  char *pointer;<br>  int size;<br>} safe_char_pointer;<br><br>static safe_char_pointer safe_malloc (int size) {<br>  safe_char_pointer t;<br>  t.pointer = malloc(size);<br>  t.size = size;<br>  return t;<br>};<br><br>static inline void safe_write(safe_char_pointer x, int i, char c) {<br>  if (i &lt; 0 || i &gt;= x.size) {<br>    fprintf(stderr, &quot;Array limits exceeded!\n&quot;);<br>    exit(1);<br>  };<br>  x.pointer[i] = c;<br>};<br><br>static inline char safe_read(safe_char_pointer x, int i) {<br>  if (i &lt; 0 || i &gt;= x.size) {<br>    fprintf(stderr, &quot;Array limits exceeded!\n&quot;);<br>    exit(1);<br>  };<br>  return x.pointer[i];<br>};<br><br>int main () {<br><br>  safe_char_pointer a = safe_malloc(10);<br><br>  for (int i = 0; i &lt; 10; i++) {<br>    safe_write(a, i, 65 + i);<br>  };<br><br>  safe_write(a, 9, 0);<br>  printf(&quot;Some shit: %s\n&quot;, a.pointer);<br><br>  for (int i = 0; i &lt;= 10; i++) {<br>    int c = safe_read(a, i);<br>    printf(&quot;Byte %d is %d\n&quot;, i, c);<br>  };<br><br>};<br></pre></div><br>So just how much does this hurt the performance?<br><br>I compiled it like this:  <tt>gcc -std=gnu99 -g -O9 -o test test.c</tt><br><br>This is the assembly code of the first for() loop:<br><br><div class="block"><pre>  0040058d  E8AEFFFFFF        call qword 0x400540 <font color="red">This is the call to malloc()</font><br>  00400592  BEA4074000        mov esi,0x4007a4 <font color="red">This is the pointer to the format string used for printf()</font><br>  00400597  C60041            mov byte [rax],0x41<br>  0040059a  C6400142          mov byte [rax+0x1],0x42<br>  0040059e  C6400243          mov byte [rax+0x2],0x43<br>  004005a2  C6400344          mov byte [rax+0x3],0x44<br>  004005a6  4889C2            mov rdx,rax<br>  004005a9  C6400445          mov byte [rax+0x4],0x45<br>  004005ad  C6400546          mov byte [rax+0x5],0x46<br>  004005b1  4889C5            mov rbp,rax<br>  004005b4  C6400647          mov byte [rax+0x6],0x47<br>  004005b8  C6400748          mov byte [rax+0x7],0x48<br>  004005bc  BF01000000        mov edi,0x1<br>  004005c1  C6400849          mov byte [rax+0x8],0x49<br>  004005c5  C6400900          mov byte [rax+0x9],0x0<br>  004005c9  31C0              xor eax,eax<br>  004005cb  E880FFFFFF        call qword 0x400550 <font color="red">This is the call to printf()</font></pre></div><br>In this loop, the limit checks had no effect on the performance at all, as the compiler recognized that the limit was never going to be violated and thus never included the limit checks.&nbsp; It also un-rolled the for() loop and reduced the iterations on the loop to only 9, since the last last position in the array is overwritten after the loop.&nbsp; Clearly this limit-checking isn't slowing down the compiler in this case, as this is exactly the same code it would have created without limit checks.<br><br>So what about the second loop where the limit is violated?<br><br><div class="block"><pre>  004005d0  0FBE4C1D00        movsx ecx,byte [rbp+rbx+0x0]<br>  004005d5  89DA              mov edx,ebx<br>  004005d7  31C0              xor eax,eax<br>  004005d9  BECA074000        mov esi,0x4007ca <font color="red">This is the address of the format string for printf().</font><br>  004005de  BF01000000        mov edi,0x1<br>  004005e3  4883C301          add rbx,byte +0x1<br>  004005e7  E864FFFFFF        call qword 0x400550 <font color="red">This is the call to printf()</font><br>  004005ec  4883FB0A          cmp rbx,byte +0xa <font color="red">Compare variable 'i' to 10</font><br>  004005f0  75DE              jnz 0x4005d0 main+0x50 <font color="red">If it isn't ten, loop back to the beginning.</font><br>  004005f2  488B0D5F0A2000    mov rcx,[rel 0x601058] __TMC_END__<br>  004005f9  BFB3074000        mov edi,0x4007b3 <font color="red">This is the string that contains the error message.</font><br>  004005fe  BA16000000        mov edx,0x16<br>  00400603  BE01000000        mov esi,0x1<br>  00400608  E863FFFFFF        call qword 0x400570 <font color="red">This is the call to fprintf() to write the error message.</font><br>  0040060d  BF01000000        mov edi,0x1<br>  00400612  E849FFFFFF        call qword 0x400560 <font color="red">This is the call to exit().</font></pre></div><br>Here the compiler recognizes that every access except the last one is valid.&nbsp; So it reduces the for() loop to only 10 iterations, then in place of the 11th iteration, it instead places a copy of the code that generates the error message and calls exit().&nbsp; <br><br>The result is that, in every case where the limit was not violated, this limit checking added no new code to the program.&nbsp; Indeed, where the limit was violated, the compiler removed the code for that operation from the program, meaning that using the limit checks actually sped up the execution of the program by some insignificant amount.&nbsp; That's a fine result there.<br><br>Now obviously in more complex programs the compiler is going to occasionally actually have to check the limit.&nbsp; An example is when a function is called in a function in an external object file.&nbsp; So what happens if we do that?<br><br>I created a multi-file example, but rather than put multiple files of code in this post, I'll just make a <a href="stuff/limit_check.zip">download link</a> for it.&nbsp; The above example is in there as well.&nbsp; <br><br>The new code is basically the same as the above example, just that I put the safe_malloc() call in one file, then the safe_char_pointer is passed as a function argument to a function in another file which contains the for() loops and the printf() calls, then each file is compiled separately to ensure that GCC generates a function that works with an array of any length since it doesn't know what the array length will be when it compiles the function.<br><br>The new function isn't so awesome.&nbsp; Basically, the compiler chose to unroll the loop, and each iteration looks roughly like this, just with different values:<br><br><div class="block"><pre>  00000026  0F8EB9000000      jng qword 0xe5 <font color="red">if size is insufficient, jump to error routine</font><br>  0000002c  83FE03            cmp esi,byte +0x3 <font color="red">test size against what is needed for the next iteration of this loop</font><br>  0000002f  C6470243          mov byte [rdi+0x2],0x43 <font color="red">write the value for this iteration of this loop</font><br></pre></div><br>So it is performing the limit check on every iteration of the loop.&nbsp; That's a bummer, as there is no reason it has to do that.&nbsp; <br><br>The exit() involved in the error routine means that, if the limit is violated, what ends up in the array is irrelevant.&nbsp; Thus there is no reason that the array size needs to be checked more than once.&nbsp; ...and the compiler knows that.&nbsp; If I modify the first example so that the first for() loop goes to 11, it creates an executable which has code that first calls malloc(), then calls fprintf(), then calls exit(), with no sign of the for() loop or the rest of the program anywhere.&nbsp; <br><br>The problem seems to be that, while the compiler realizes that if the limit is greater than 9 then it is also greater than everything less than 9, it doesn't consider that perhaps it can perform that comparison to 9 before it performs the comparison to the smaller numbers, and in doing so, avoid all of the other comparisons.&nbsp; Indeed, if I comment out the assignment within safe_write(), the generated code is just a long list of compares and conditional jumps which could quite obviously be optimized by eliminating all but the last one.&nbsp; So either this is an obvious optimization that the compiler simply doesn't yet know how to make, or it is some sort of bug in the optimizer causing it to miss this optimization.<br><br>Anyway, hoping to force the compiler to make this optimization, before the first for() loop I added a safe_write() call that writes to the tenth element of the array, to &quot;trick&quot; the compiler into performing that comparison first.&nbsp; So the code now looks like this:<br><br><div class="block"><pre>void external_function (safe_char_pointer a) {<br><br>  safe_write(a, 9, 0);<br><br>  for (int i = 0; i &lt; 10; i++) {<br>    safe_write(a, i, 65 + i);<br>  };<br><br>  safe_write(a, 9, 0);<br>  printf(&quot;Some shit: %s\n&quot;, a.pointer);<br><br>  for (int i = 0; i &lt;= 10; i++) {<br>    int c = safe_read(a, i);<br>    printf(&quot;Byte %d is %d\n&quot;, i, c);<br>  };<br><br>};</pre></div><br>Upon compiling that code, I get this:<br><br><div class="block"><pre>  00000032  83FE09            cmp esi,byte +0x9 <font color="red">compare array size to 9</font><br>  00000035  55                push rbp<br>  00000036  53                push rbx<br>  00000037  0F8EB5000000      jng qword 0xf2 <font color="red">if size is not greater than 9, jump to error routine</font><br>  0000003d  4889FD            mov rbp,rdi<br>  00000040  4889FA            mov rdx,rdi<br>  00000043  C60741            mov byte [rdi],0x41<br>  00000046  C6470142          mov byte [rdi+0x1],0x42<br>  0000004a  C6470243          mov byte [rdi+0x2],0x43<br>  0000004e  4189F4            mov r12d,esi<br>  00000051  C6470344          mov byte [rdi+0x3],0x44<br>  00000055  C6470445          mov byte [rdi+0x4],0x45<br>  00000059  BE00000000        mov esi,0x0<br>  0000005e  C6470546          mov byte [rdi+0x5],0x46<br>  00000062  C6470647          mov byte [rdi+0x6],0x47<br>  00000066  31C0              xor eax,eax<br>  00000068  C6470748          mov byte [rdi+0x7],0x48<br>  0000006c  C6470849          mov byte [rdi+0x8],0x49<br>  00000070  4883C501          add rbp,byte +0x1<br>  00000074  C6470900          mov byte [rdi+0x9],0x0<br>  00000078  BF01000000        mov edi,0x1<br></pre></div><br>That's what I expected it to do to begin with.&nbsp; It put one check at the beginning of the function for the limit, and if it succeeds, it proceeds to the un-rolled for() loop, this time without limit checks.&nbsp; It also skips writing the value from that initial call to safe_write() since it knows it is overwritten by the for() loop.&nbsp; Thus the performance penalty here is one compare and one conditional jump, exactly what you'd get if you were to implement the limit checks manually by passing a size along with every pointer and simply checking the size at the top of the function.<br><br>Anyway, that's an optimization that I think the compiler authors could easily implement when adding support for this new pointer type with limit checking, and with that, the performance penalty of limit checks would be almost non-existent.<br><br>...but I know people won't think that's good enough.&nbsp; Any performance penalty is too much for some people.&nbsp; The way I look at it, I can buy a faster computer, but I can't buy a more secure one.&nbsp; So even if something like this cut my computer down to half speed, I'd be loving every minute of it as I finally feel confident enough to open the SSH port on my router.<br><br>...and besides, in cases where people really don't care about security, they can just disable the limit checks with a compiler flag.&nbsp; Meanwhile, the fact that the limit checks are even an option will mean that some people will use them and so bugs will be discovered and fixed.&nbsp; The result of that will be that software is safer even when compiled without the limit checks.<br><br>Hopefully this idea will catch on someday.&nbsp; I've noticed that I sometimes spot people repeating ideas I was talking about five to ten years ago.&nbsp; I don't know if the ideas started with me or if they were independently discovered (certainly no one seemed to like the ideas when I was talking about them, so I assume it's the latter), but either way, it's nice that stuff isn't doomed to never improve.&nbsp; So I expect C will eventually have pointers like this, it just might be five to twenty years before it happens.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#46</guid>
      <title><![CDATA[Can't but agree]]></title>
      <author>Kuba</author>
      <pubDate>Fri, 29 Jan 2021 04:23:47 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/cant_but_agree.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">You're of course right on both counts: people on Internet can be very insane.<br><br>In most circuits, fuses protect from catastrophic failures where something goes really wrong and drawing those 20A from an outlet in your kitchen, just because the panel breaker will allow it won't mean it's a bit much for an 18AWG power cord (for example).<br><br>As for Art of Electronics: it's a tad overrated book. At one time I went through the less trivial circuits and built them, one by one, paying attention to what was going on. Many didn't work as claimed, and not because of some silly mistake in the book, but because clearly nobody bothered to actually build them as described/shown.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#18</guid>
      <title><![CDATA[xhxKvAYGtCZBljzzl]]></title>
      <author>Anonymous</author>
      <pubDate>Sat, 20 Feb 2016 21:49:27 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/xhxkvaygtczbljzzl.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">[ spam content deleted ]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#4</guid>
      <title><![CDATA[Links to My Web Site]]></title>
      <author>Pj</author>
      <pubDate>Tue, 1 Sep 2015 07:09:19 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/links_to_my_web_site.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I know what the problem with my blog is.&nbsp; I don't like to blog!<br><br>Today I thought I might take some renders I had and post them to Reddit.&nbsp; Then I thought &quot;fuck that, I'll make a blog post.&quot;  ...but then I thought &quot;fuck that, I'll make a web page.&quot;  Yes, it's web pages I like to make, not blog posts.<br><br>...and I've made a few this year, but the four readers of my blog (honestly, I haven't checked in a while, it might be zero now) may not have seen them since much of my website is indexed only via sitemap.cgi, and even the parts that I did add to the <a href="/">main site index</a> I didn't bother to mention on the blog.&nbsp; <br><br>So here's a list of the hidden pages on my web site:<br><br><a href="/blender/progress/">/blender/progress/</a> - An example of how a blender scene slowly progresses from ugly crap to rather awesome.&nbsp; I'm really not sure there's any point in this web page, but I felt the urge to create it.<br><br><a href="/grammar/articles">/grammar/articles</a> - When and how to use articles in English grammar.<br><br><a href="/pinnwand/messages/stuff/">/pinnwand/messages/stuff/</a> - While not exactly hidden, this directory in which I toss all of the images used on my blog is sort of interesting.<br><br><a href="/notes/vm86.html">/notes/vm86.html</a> - How to use Linux's vm86() system call!  AFAIK this is the only documentation for it that exists anywhere.<br><br><a href="http://awesome.ignorelist.com/image_gallery/">http://awesome.ignorelist.com/image_gallery/</a> - This was on my web site until a few minutes ago, when I realized it's an ideal candidate to go on my home web server, where the large files and pointless nature make it compatible with my lower-cost and lower-reliability web hosting.&nbsp; Anyway, it's just some pictures I put in a gallery after deciding I wanted to write a script to generate image galleries.<br><br><a href="http://awesome.ignorelist.com/fisheye/">http://awesome.ignorelist.com/fisheye/</a> - Hey look, another image gallery.&nbsp; This one I created in response to someone on Reddit asking about &quot;fisheye removal,&quot; as I felt the need to demonstrate that fisheye is actually a good thing.&nbsp; Each image is shown four times.&nbsp; The first is the original output of a GoPro hero.&nbsp; The second image is the result of a &quot;fisheye removal&quot; program I wrote.&nbsp; The third is the same, but without any cropping, making it even more apparent just how distorted the edges of &quot;normal&quot; projections are.&nbsp; The fourth is another projection I made that I call &quot;lat-lon&quot; since each pixel's location is the longitude and latitude of the angle out of the camera's lens into the scene, which I think is a rather nice compromise since it preserves vertical straight lines (horizontal ones seem to be less appalling) while not being as distorted as normal projections.&nbsp; Anyway, after putting this together and writing a post about it, it occurred to me that I was wasting my time because people on Reddit are stupid, so I immediately deleted the post.<br><br><a href="/secret/z80pics/">/secret/z80pics/</a> - I really should add these to my other Z80 pages.<br><br>BTW, did you know there are other Z80 pages?  I actually added them to the <a href="/">main site index</a> but they are relatively new, so maybe you haven't seen them.&nbsp; They're awesome.&nbsp; ...and <a href="/electronics/USB/FT240X/">this one</a> isn't linked from the main index, just linked from the pages that are.&nbsp; I also added <a href="/electronics/Z80/sarcasm/">documentation for Sarcasm</a> to the page about Sarcasm.&nbsp; My favorite is the page on <a href="/electronics/Z80/system_design/">Z80 System Design</a>.<br><br><a href="/electronics/8052/orgasm/">/electronics/8052/orgasm/</a> - Yes, I've stolen every good name for an assembler.<br><br><a href="/reviews/gopro_hero_vs_sjcam_sj4000/">/reviews/gopro_hero_vs_sjcam_sj4000/</a> - I bought a GoPro Hero, then quickly decided it wasn't good enough, and so I bought a less expensive SJ4000.&nbsp; I feel compelled to make sure everyone knows that GoPro isn't all that great.&nbsp; Not bad, but for the price, it should be better than it is.<br><br><a href="/bullshit/check_call_restrictions/34.html">/bullshit/check_call_restrictions/34.html</a> - This one time I got pissed off at a vague error message on a prepaid cell phone.<br><br><a href="/bullshit/sciencelab.com/">/bullshit/sciencelab.com/</a> - This other time I got scammed by a web site.<br><br><a href="/music/Alesis_Micron/control_knob_repair/">/music/Alesis_Micron/control_knob_repair/</a> - The Alesis Micron is a piece of shit, but just in case you own one, here's how to fix the first part of it that's going to break.&nbsp; ...and I'm not kidding.&nbsp; This is the most popular page on my entire web site by a wide margin.<br><br>Anyway, given that I don't like blogging, I think I'll fill my &quot;I must post to Slashdot and Reddit&quot; urges by writing web pages about stuff and just use this blog as an RSS feed for changes to my web site.&nbsp; After all, when I post something good, I don't want it lost in a pile of bullshit, I want it properly indexed so that people can find it.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#26</guid>
      <title><![CDATA[Oh wow, most of that &quot;update&quot; was repeated information...]]></title>
      <author>Pj</author>
      <pubDate>Tue, 31 May 2016 09:03:27 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/oh_wow_most_of_that_update_was_repeated_information.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I guess I should have read my original post before replying.&nbsp; I didn't realize I'd come so close to making it work before writing the original post.<br><br>Anyway, the real shit in all of this is that I have no clue what the hell I did to fix this:<br><br>&gt; <font color="red">Once I install the MythTV package, if I reboot the Pi, it fails to get into the GUI.</font><br><br>I know I did <i>something</i> to make it so that I could reboot the piece of shit and it would boot a second time, I just don't remember what the hell it was.&nbsp; Maybe I downloaded an older version of MythTV and it didn't cause that problem?<br><br>Urgh!  I need to stop thinking about that piece of shit.&nbsp; It just makes me so pissed.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#28</guid>
      <title><![CDATA[It's &quot;you're a fag,&quot; not &quot;your a fag.&quot; Learn to grammar.]]></title>
      <author>Pj</author>
      <pubDate>Wed, 18 Jan 2017 00:16:03 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/its_youre_a_fag_not_your_a_fag_learn_to_grammar.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">People are really butt-hurt over me not liking the Raspberry Pi.&nbsp; It's like the Pi is a part of their identity and so by insulting the Pi, I am insulting them personally.<br><br>As for Pi updates:  <br><br>Poor television signals resulted in my mother no longer having a use for it, so I brought it home and it sat around for about six months, before I finally decided to give it to my nephew, since he has no computer in his bedroom, but has a T.V. he can connect it to.&nbsp; Gave him a mouse and keyboard too.<br><br>I'm pretty sure my nephew isn't using it.&nbsp; It can't play any of his computer games, or any game he'd be interested in.&nbsp; At best he could watch YouTube on it, but he can already do that with his PS4.&nbsp; To what extent he does Facebook, he has a cell phone that he uses.&nbsp; So I guess he's just storing it for me.&nbsp; <br><br>He tells me that his friends are impressed that something so tiny is a computer, so I guess it works for impressing people, but I'm sure they'd be less impressed were to try to use it for anything.<br><br>Did I mention all of the libraries for the I/O pins are GPL?  Fuck you if you don't like the GPL, because if you create something with a Pi, you have to license your code as GPL.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#42</guid>
      <title><![CDATA[NATPOS is AWESOME! Just like T2!]]></title>
      <author>T2au66yrOldFart</author>
      <pubDate>Wed, 26 Jun 2019 22:44:03 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/natpos_is_awesome_just_like_t2.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Built it after two days of trying as linux novice but worth the trouble. The SCAN is the thing that makes it my favourite on Linux, so want more scan features added if you cbf. Just OBS'd it to a few of my FB pages today letting everyone know what fuckwits operate on aussie UHF CB most of the day. Not sure why I bother but have to do something all day. Wifes not happy with my addiction to T2 since 2002.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#12</guid>
      <title><![CDATA[New PCBs]]></title>
      <author>Pj</author>
      <pubDate>Wed, 4 Nov 2015 19:15:21 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/new_pcbs.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I made some fun PCB software.&nbsp; You draw tracks and it forms them out of little segments which it then optimizes by drawing them as tightly together as possible while keeping them as far away from everything as necessary.&nbsp; Way the hell nicer than EasyTrax which is what I was using before, and also KiCad which I've looked into on several occasions but just can't get past the point where I ask &quot;why the fuck do I have to draw a schematic in order to create a PCB&quot; and thus I don't know the first thing about how to use.&nbsp; In mine, no schematic is necessary.&nbsp; You place pads, then draw tracks, and then you're done.&nbsp; It even creates the board outline for you, once again by simply making it as small as it can be while maintaining proper clearance around everything.&nbsp; The only thing it doesn't do is silkscreen text, as you have to draw it all by hand, but it makes for an interesting effect I think.<br><br>So I made a new break-out board for the FT240X, since my old one was a bit large, and I wanted a version where the USB connector is on the left instead of the right.&nbsp; Since DirtyPCBs has no issue with panelized designs, I put both into a single PCB which I could order for $14.<br><br><center><img src="stuff/new_pcbs/ft240x_edit.png"></center><br>While most people put little perforation holes between the boards so they can be easily broken apart, I don't like the way this looks, mostly because DirtyPCBs is seemingly incapable of doing non-plated holes.&nbsp; So I decided I'd just slice the boards apart with my Dremmel's diamond-coated cutting tool since I could make it nice and smooth that way.<br><br>I also made a Z80 board.&nbsp; I decided I wanted to do my design that is programmable via USB even when it contains a blank EEPROM, but found that wiring all of the logic gates together was a total bitch.&nbsp; I did it, but was displeased with the results enough that I looked into programmable logic and figured out <a href="/electronics/ATF22V10C/">how to program the ATF22V10</a>, as it was the cheapest programmable logic I could find.&nbsp; So then I designed the board with the ATF22V10 connecting everything together, and with an ATtiny13A performing as a reset chip.&nbsp; Since this board was larger, ordering it cost $25.<br><br><center><img src="stuff/new_pcbs/z80_edit.png"></center><br>So I ordered them and 3 to 4 weeks later I received these:<br><br><center><img src="stuff/new_pcbs/bare_pcbs.jpg"></center><br>I got 11 copies of each board, so each FT240X board cost me 64 cents, and each Z80 board cost me $2.27.<br><br>Here's some more pics on a more attractive wood background:<br><br><center><img src="stuff/new_pcbs/bare_z80_front.jpg"></center><br><center><img src="stuff/new_pcbs/bare_z80_back.jpg"></center><br><center><img src="stuff/new_pcbs/new_ft240x.jpg"></center><br>Here's the FT240X board populated with parts, along with my previous larger design:<br><br><center><img src="stuff/new_pcbs/all_three.jpg"></center><br>The main issue with the old one was that it was so large that it didn't leave much room to connect wires above and below it.&nbsp; The new ones have more space above and below.&nbsp; <br><br>...and I just love that I have left and right versions of the board now.&nbsp; On one occasion I tried taking the old design and just turning it up-side-down.&nbsp; Despite realizing that all of the pin connections were now backwards, I still managed to attach power to it in reverse and fry the thing, and so I've been reluctant to try that again.&nbsp; However, these two versions have identical pinouts, just the USB connector is on the opposite side of the board, and so I don't have to worry about wiring them incorrectly.<br><br>Here's the Z80 populated with parts:<br><br><center><img src="stuff/new_pcbs/assembled_z80_front_view.jpg"></center><br><center><img src="stuff/new_pcbs/assembled_z80_top_view.jpg"></center><br>Unfortunately I made a few mistakes on this board.&nbsp; <br><br>The holes for the DC power connector are too small and spaced incorrectly.&nbsp; I noticed this the moment I looked at the boards, but strangely didn't notice when I printed out a copy of the board to see its size and test-fit the FT240XS on its pads.&nbsp; I should have test fit the DC power connector as well, but didn't.&nbsp; However I was able to make it fit by drilling two of the holes larger and removing the third pin (which is unused) from the DC power jack.<br><br>A few of the connections to the ATF22V10 are incorrect.&nbsp; Had I bothered to compile the code for the chip before ordering the boards, I would have realized it could never work the way I had it wired.&nbsp; So to make it work I had to cut three traces so that I could connect them to different pins, as well as connect two other pins together.&nbsp; You can see a few pieces of trace wire soldered to a few tracks between the Z80 and the ATF22V10 in the photo, though they then disappear under the socket of the ATF22V10.&nbsp; <br><br>Anyway, after those corrective efforts, the board does work.&nbsp; I suppose I could fix the design and re-order it, but I really have no clue what the fuck I'm going to do with this thing anyway.&nbsp; So to whatever extent that I really want more of these things, I think I'll just fix up the boards I already have and use them.&nbsp; The repairs don't really take that long to make.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#20</guid>
      <title><![CDATA[Testing that moderation works...]]></title>
      <author>Totally not Pj</author>
      <pubDate>Tue, 23 Feb 2016 18:12:26 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/testing_that_moderation_works.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">...and I guess also that I didn't break the RSS feed.&nbsp; <br><br>The way this forum works is weird.&nbsp; It's all static files.&nbsp; So once something is in the RSS feed, it's there forever, except for a small Perl Storable database which stores its contents so that it can be re-created without having to parse the RSS feed.&nbsp; So I took a hex editor to that, and hopefully didn't break it in the process, otherwise I'll have to delete it and start over with an empty RSS feed.<br><br>I really should rewrite this forum, but I don't care...<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#9</guid>
      <title><![CDATA[Omit from history]]></title>
      <author>crunge</author>
      <pubDate>Sat, 26 Sep 2015 06:20:49 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/omit_from_history.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">You can set bash to treat a leading space as a signal to omit a command from history.<br><br>https://www.technovelty.org/linux/skipping-bash-history-for-command-lines-starting-with-space.html<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#37</guid>
      <title><![CDATA[I HEAR YOU LOUD AND CLEAR]]></title>
      <author>Anonymous</author>
      <pubDate>Thu, 7 Jun 2018 09:10:30 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/i_hear_you_loud_and_clear.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">First off, I like your site...it looks like you built it with Django which DOES totally rock. <br><br>I hear you man, Linux can be an OVERWHELMING confusing pain in the ass just to install something as simple as a video driver for God's sake. sudo this, apt that....plus a bunch of other stuff NO ONE understands but of course they pretend like they do.<br><br>I'm just glad I'm not the only one who has wasted so much time tinkering around with bullshit hardware\software only to find that you know for all the bad shit about Windows you can just install the OS and it'll pretty much instinctively do everything you want without a bunch of grief and heartache.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#44</guid>
      <title><![CDATA[Math in C makes me sad.]]></title>
      <author>Pj</author>
      <pubDate>Fri, 23 Aug 2019 03:31:43 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/math_in_c_makes_me_sad.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">This is just so wrong...<br><br>10 &gt;&gt; -3 == 0<br>10 &gt;&gt; -2 == 0<br>10 &gt;&gt; -1 == 0<br>10 &gt;&gt; 0 == 10<br>10 &gt;&gt; 1 == 5<br>10 &gt;&gt; 2 == 2<br>10 &gt;&gt; 3 == 1<br><br>Obviously 10 &gt;&gt; -1 should be 20, and 10 &gt;&gt; -2 should be 40.&nbsp; Once again I'm disappointed with C's ability to do math.<br><br>The reason I came to this was that I want to do a set of things many times, but the first thing I want to do every time, the second I want to do every other time, the third I want to do every 4th time, etc.&nbsp; So I figured I'd just do this:<br><br><pre>for (int time = 0; time &lt; 100; time++) {<br>  for (int thing = 0; thing &lt; 10; thing++) {<br>    if (time &gt;&gt; (thing - 1) & 1) continue;<br>    // do the thing here<br>  };<br>};</pre><br>It still works since bit 0 is not set in the number 0, but I'm bothered that it works not because the shift right operator will shift left when given a negative number, but instead because it's just like &quot;Ugh, IDK what a negative number means, so, whatever.&nbsp; Zero.&quot;  ...but that's the kind of nonsense I expect from C, which is why I figured I'd better printf() some results before assuming it works correctly.<br><br>In math, the rules are usually defined so that there's consistency in the results, as the idea is that the results of operations should be natural, not something we just made up.<br><br>Take exponents for example:  2^2 means 2*2=4, 2^3 means 2*2*2=8, 2^4 means 2*2*2*2=16, and obviously 2^1=2.&nbsp; So what is 2^0?  Well, mathematicians looked at the other exponents and realized that as the exponent is reduced by 1, the result is divided by 2.&nbsp; So continuing with that, 2^0 = 2^1 / 2, and so 2^0 = 1.&nbsp; Similarly, 2^-1 = 2^0 / 2, and so 2^-1 = 0.5.&nbsp; They then looked at the curve that all of these answers create for guidance as to what stuff like 2^0.5 should be, and eventually figured out methods to calculate those results as well.&nbsp; <br><br>Now imagine exponents weren't already defined in mathematics, but instead a compiler author was the first person to implement them.&nbsp; In that case, 2^0 would probably be 0 since it means &quot;zero twos multiplied together&quot;, and 2^-1 would just throw an error.&nbsp; If it accepted non-integers at all, it would probably implement them the way that a child might guess that they work, e.g. 3^1.5 = 3 * (half of 3) = 4.5.&nbsp; <br><br>...and it would then be like that forever.&nbsp; No matter how many good arguments people may make for why it should work differently, the compiler author will always excuse their mistake with &quot;it doesn't matter how it works as long as it is documented&quot; and refuse to change it because &quot;it'll break too many existing programs.&quot;  Sometimes someone even created a standard that specifies the incorrect behavior and so they'll cite that standard as why it is correct, because following a standard is for some reason more important than doing something that makes sense.<br><br>So that's where we're at.&nbsp; What the &gt;&gt; operator does with negative numbers doesn't make sense, and so it will never make sense, and sadly that really doesn't make it unique when it comes to math in C.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#31</guid>
      <title><![CDATA[Steel Pan Toy]]></title>
      <author>Pj</author>
      <pubDate>Thu, 6 Apr 2017 21:35:04 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/steel_pan_toy.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Having recently acquired a cheap 3D printer from eBay (only $175), I've been 3D printing a lot of stuff lately.&nbsp; <br><br>One day I was thinking about how I've always wanted a small pocket-size musical instrument, and decided I should make one.<br><br>In thinking about what form I wanted this instrument to take, I remembered that my nephew plays a steel pan in the school band, which has all of the notes arranged in a circle, which seemed ideal for a small hand-held device.&nbsp; So I inquired as to the exact layout of the notes.&nbsp; Turns out he plays <a href="https://www.google.com/search?tbm=isch&amp;q=steel+pan+tenor">a tenor pan</a>, which in itself has several layouts, differing both in how many notes are in the inner ring, and which note is the lowest note.&nbsp; His has 5 notes in the center and a low C.&nbsp; <br><br>For the very first 3D print of this, which unfortunately I have no photo of, I simply traced the outline of the note areas in Blender and made buttons that exactly matched them.&nbsp; However, this unfortunately resulted in crazy large buttons on the outside vs. buttons too tiny to press on the inside.&nbsp; It was clear that I would have to do something more abstract.<br><br>So this became the first version I built:<br><br><center><a href="stuff/steel_pan_toy/version_1.jpg"><img src="stuff/steel_pan_toy/small_version_1.jpg"></a></center><br>It uses an ATtiny48 microcontroller.&nbsp; The sound is simple square waves, but it can play two notes at once.<br><br>The buttons are simple &quot;tactile buttons,&quot; not unlike <a href="https://www.digikey.com/product-detail/en/c-k/PTS645SL50-2-LFS/CKN9092-ND/1146781">these</a>, though the ones I used came from eBay for one-tenth the price.&nbsp; I just 3D printed a button top that's centered over the switch with a small brim that extends under the top plate and it works like a charm, whether I press it from the center or the edges or the corners.&nbsp; I was surprised at how easy it was.<br><br>However, I wasn't quite happy with the button shape yet.&nbsp; I decided that I'd make each button have an equal surface area, and wrote a script to constantly tweak values until the surface areas were all equal.<br><br>I also went about designing a case to contain the whole thing, so that it could be a portable hand-held device.<br><br>This is the second version:<br><br><center><img src="stuff/steel_pan_toy/version_2.jpg"></center><br>The button in the center is a &quot;setup&quot; button.&nbsp; Pressing it causes it to produce the A above middle C, which is 440 Hz.&nbsp; Then pressing one of two other buttons adjusts the AVR's &quot;osccal&quot; register, thus allowing the instrument to be tuned.&nbsp; I also added a few other options.&nbsp; You can choose between notes that play until the button is released, or notes that have a short constant length, to better resemble what you get with an actual steel pan.&nbsp; I also added an option to produce two tones for each note, one a few cents too high, the other a few cents too low.&nbsp; I'd always liked this sound, but now I seem to find it's too much, and prefer to keep it in the mode where it plays just a simple square wave.&nbsp; Finally, it's possible to transpose the instrument between 7 different octaves, though at least 2 of those are unusuably too high or too low.<br><br>Also interesting is the battery life:  It can produce sound for 20 continuous hours, and I beleive longer considering that the chip doesn't need the full battery voltage and likely consumes less current as the voltage decreases, and the speaker (which consumes most of the current) definitely requires less current when given less voltage.&nbsp; I imagine I've played one of these for over 20 hours, but have yet to have to replace batteries.&nbsp; <br><br>It doesn't have a power switch, because it simply utilizes the ATtiny48's sleep mode, entering into sleep mode as soon as it stops producing sound, and waking up instantly when any button is pressed.&nbsp; When in sleep mode, it consumes so little current that it would take over 15 years to drain the batteries.&nbsp; <br><br>This strikes me as perhaps the most valuable feature of the AVR series.&nbsp; Had I built this with a Z80, it would have had to have a power switch as my Z80 system wouldn't have such a low-power sleep mode, and it would require a voltage regulator, and thus enough batteries to create 7 volts, or a complex switch-mode power supply, or definitely a switch-mode power supply if I don't want to waste battery power.&nbsp; If I'd built it with a Raspberry Pi, it would not only require a switch-mode power supply, but it would also run less than an hour before needing new batteries.&nbsp; <br><br>In proper musical keyboards, I never use batteries, as it's a given that I'll forget to turn the thing off and thus only get an hour or two of play time out of a set.&nbsp; Since this thing doesn't have to be turned off, the batteries just seem to last forever, which is wonderful.<br><br>I decided to experiment with MIDI output, and also added a crude feature to my synthesizer to display a drawing of a steel pan and indicate which note is the next note in a song I want to learn.&nbsp; This seemed like a great way to learn, and indeed I learned to play the Super Mario Bros song on it, something I can't even play on a piano keyboard, but it would be even better to have the actual buttons light up, so that was my next goal.<br><br>The buttons, unfortunately, proved to not be up to the task.&nbsp; After little more than a week of playing the instrument, I had managed to render some of them so unusable that I had to desolder them and replace them, and it was clear that after another week I was just going to have to replace them all.&nbsp; About two weeks later, I tossed this unit in the trash, as the buttons were so worn that I saw no value in keeping it any longer.<br><br>So, all around, I needed new buttons, as not only were the existing ones not durable enough, but I also wanted LEDs in my buttons and I couldn't figure out how LEDs would be compatible with the tactile switches I was using since ideally I'd want both to be in the center of the button.<br><br>So I went searching for better buttons.&nbsp; As it turns out, almost all of those tactile buttons are rated for a life of 100,000 cycles, which may seem like a lot, but in a musical instrument where a frequently-used note may be pressed once a second, that button is going to last for only 28 hours of play time, which isn't anywhere near durable enough as I would be replacing buttons as often as I replace batteries.&nbsp; <br><br>In other musical instruments, the usual approach is to use silicone buttons, and they're certainly reliable enough as I've never seen one wear out, but it seems that these don't exist in generic form.&nbsp; If you want any at all, you have to pay thousands to have a custom mould produced, plus whatever is the cost of producing the silicone buttons.<br><br>So I <a href="https://www.reddit.com/r/AskElectronics/comments/5t67jg/where_can_i_buy_silicone_buttons_or_any_durable/">asked for advice on Reddit</a>, which produced some suggestions, but none which I really felt were appropriate.&nbsp; I wasn't going to pay <a href="http://www.digikey.com/product-detail/en/e-switch/LL1105AF065Q/LL1105AF065Q-ND/3777946">$0.27 per button</a>, and I still really had no idea how I was going to get LEDs in my buttons, outside of paying <a href="https://www.digikey.com/product-detail/en/e-switch/TL3215AF160RQ/EG5182CT-ND/5181957">$1.07 per button</a>.<br><br>I briefly considered making my own silicone buttons.&nbsp; I found a web site that explained that mixing corn starch with silicone caulk produces something that solidifies in only an hour.&nbsp; This actually works very well, and when combined with 3D printed molds, is cheap and realtively easy.&nbsp; The problem comes with the bit of conductive rubber on the bottom.&nbsp; The same web site suggested mixing in powdered graphite, and this does work, but the amount of graphite required is the absolute limit of how much can be mixed into the caulk before rendering it a mixture that simply won't hold together.&nbsp; Even so, I thought I might be able to mix together a batch that comes out just right, spread it out thin and flat, and let it cure, then cut it into little pieces to toss into the molds and cover with the non-conductive variety.&nbsp; I also considered using something other than conductive silicone.&nbsp; I found that if I roughed up some aluminum foil, and spread silicone on it, when it cured, the foil could not be removed from the silicone with any amount of trying.&nbsp; However, for reasons I don't comprehend, this stops as soon as the other side of the silicone is pressed against a 3D printed button.&nbsp; What silicone wasn't in contact with the plastic was still impossible to remove, but under the button, it peeled off easily.&nbsp; It's truly a crazy result.<br><br>Anyway, it occurred to me that rather than put foil on the bottom of silicone, perhaps I should just put foil on the bottom of 3D printed plastic.<br><br>That would require springs, which at first seemed like a serious problem.&nbsp; Like generic silicone buttons, generic springs don't exist either.&nbsp; My experience with springs in the past had me convinced that nothing short of proper spring steel would work, but I experimented with cutting some brass sheet metal into strips and then rolling it up, and the results seemed springy enough.&nbsp; Also, the LED could be put in the center of the spring, allowing it to show through the center of the button.&nbsp; Combining this with some foil tape used for HVAC purposes, I put together a few test buttons, and after they seemed to work fine, I put together a test pad.<br><br>...and at this point, I guess it's necessary that I create a YouTube account.<br><br><center><iframe width="640" height="360" src="https://www.youtube.com/embed/f5JpT3N3Pgo?rel=0?ecver=1"></iframe></center><br>Well, supposedly that'll embed it.&nbsp; It isn't showing up in the preview, though.&nbsp; Hopefully that's just because Google does something retarded like try to fetch the page embedding the video before allowing it to display, which it can't do until I post it.<br><br>Anyway, as for the construction, it looked like this:<br><br><center><a href="stuff/steel_pan_toy/brass_springs.jpg"><img src="stuff/steel_pan_toy/small_brass_springs.jpg"></a></center><br>I might make a proper PCB someday, but it takes a month for that to happen, and I don't like waiting, so I just built it on some acrylic glass, using thin gauge wrapping wire to form the button contacts.&nbsp; The most absurd part of this is the diodes which I couldn't drill holes for since they couldn't exist on the top surface due to it being all buttons, and so they're held to the glass merely by being soldered to some of that thin-guage wrapping wire which is threaded through holes in the glass.&nbsp; That said, I've built like five this way and none have broken yet.<br><br>Eventually I found the brass springs to not be working out.&nbsp; They're difficult to form and when misformed keep getting stuck in ways they shouldn't, and so I decided to take a stab at making springs from steel wire.&nbsp; This almost worked, the only problem being that the springs were too stiff.&nbsp; So I made some out of copper wire, and those seemed just fine.<br><br><center><img src="stuff/steel_pan_toy/spring.jpg"></center><br>I don't know what the gauge is, but I'm pulling it out of that beige telephone wire that contains four individual wires, red, black, yellow and green.<br><br>The springs go inside of the 3D printed buttons like this:<br><br><center><img src="stuff/steel_pan_toy/small_spring_in_button.jpg"></center><br>These buttons have been used, hence the wear seen in the aluminum foil tape.&nbsp; I've been keeping an eye on that, hoping to predict the expected lifetime of the button.&nbsp; So far they've already proven to last far longer than the tactile switches I was using previously, and while the foil tape does become indented where it contacts the wrapping wire on the acrylic glass, thus far none of the foil tape seems to have broken, so I expect the buttons to last a while at least.&nbsp; Also, if they do wear out, I think it's about a 45 minute job to peel off the old foil and replace it with new, which would be an annoying occasional chore, but not quite as annoying as paying $1.07 per button in my opinion.&nbsp; <br><br>Here's a close-up of the wiring for the buttons:<br><br><center><a href="stuff/steel_pan_toy/button_wiring.jpg"><img src="stuff/steel_pan_toy/small_button_wiring.jpg"></a></center><br>I've added some purple highlighting to show where the foil-backed buttons go.&nbsp; As you can see, the foil conducts between two wires on opposite sides of the LED.&nbsp; I wasn't sure this would work all that well, but figured I could eventually make a PCB with the usual alternating traces arranged in a circle, thus providing many more opportinuties for the two contacts to come into contact, but in practice this seems to work fairly well.&nbsp; The only problem I had was with the buttons on the outer ring, which in later builds seems to have been solved by extending those contacts so that they go past the outer edge of those buttons, as the problem seemed to be that by pressing the button at an angle, it was possible to cause it to come to rest on the acrylic glass without touching one of the wire contacts.<br><br>As for the rest of the construction:<br><br><center><a href="stuff/steel_pan_toy/insides.jpg"><img src="stuff/steel_pan_toy/small_insides.jpg"></a></center><br>First thing to note is that this is a terrible way to attach batteries.&nbsp; In the first version I simply made a box with holes to thread wire through, which sort of worked, but had the problem that adding one battery might then stretch the box to the point that a previous battery no longer made contact with its wire.&nbsp; So in this one I made separate posts for each battery's terminals, which is better, but the connections made are still unreliable.&nbsp; Also, the batteries want to just pop out as there's nothing that holds them in place, so I've been inserting thin pieces of foam to take up the small space between the top of the batteries and the acrylic glass.&nbsp; Next time I redesign I'm definitely using springs.&nbsp; I ordered some from China on eBay to test out, but more than likely I'll just 3D print a form to wrap steel wire around to form the proper spring shape and just do that.<br><br>As for everything else:  I added a 10 pin header connector in order to attach a progamming device, and also for future MIDI connections.&nbsp; The setup button was moved to the top/front to make room for a screw in the center of the keypad, both to provde a little more support, and to keep the acrylic glass against the buttons when it is disassembled to change batteries, so that all of the buttons and springs don't fall out.&nbsp; I also added 3 switches, two to select the volume, and one to allow it to be turned off.&nbsp; It does the automatic sleep mode like the last one, but I figured that if I want to toss this in my pocket, or my nephew wants to put his in his backpack, it would be desireable to actually turn it off so that accidental button presses don't produce noise.<br><br><center><a href="stuff/steel_pan_toy/µcontroller.jpg"><img src="stuff/steel_pan_toy/small_µcontroller.jpg"></a></center><br>The µC was upgraded to an ATmega328P, the same chip used in the Arduino, though I'm not using any Arduino software, but rather it's all assembly code, assembled with a simple AVR assembler I wrote.&nbsp; The upgrade was necessitated by a need for additional EEPROM, in order to store the songs which the device would light up buttons to teach me how to play.&nbsp; Other than the fact that I had to buy new chips, this didn't increase the cost at all, since in the years since I bought my supply of ATtiny48 chips, the ATmega328 has come down in price, and is now only $2 per unit.<br><br>Also I added a 20 MHz crystal, to remove the requirement that it be tuned.&nbsp; Between that, the use of the two serial port pins for MIDI, and the loss of one I/O pin by switching from the ATtiny48 to the ATmega328, I'm now using every I/O pin that the chip has.&nbsp; The only pin not soldered is the ADC reference, as I'm not using the ADC.<br><br><center><a href="stuff/steel_pan_toy/all_three.jpg"><img src="stuff/steel_pan_toy/small_all_three.jpg"></a></center><br>With a working design, I produced two more, one for my nephew, and one for one of my nephew's friends, whom he told me said &quot;I would pay anything for one of those.&nbsp; ...well, not anything, but you know.&quot;  As it turns out, &quot;anything&quot; would be $13 of parts + $61 of labor, if I charged minimum wage for such skilled labor.&nbsp; As that was all too ridiculous, I told my nephew to just let his friend have it for free.&nbsp; I figure if the kid wants one that much, then he should have one.<br><br>Anyway, I did learn to play the stupid thing:<br><br><center><iframe width="640" height="360" src="https://www.youtube.com/embed/NmXnSOWXwKI?rel=0?ecver=1"></iframe></center><br>Huh...&nbsp; YouTube's algorithms figured out the song the video contains and will apparently now show ads on the video to pay royalties for it.&nbsp; FFS, the song is 30 years old at this point, copyright shouldn't even be an issue.&nbsp; Thanks, Disney.<br><br>Anyway, copyright infringement aside, playing this thing isn't very much fun.<br><br>Years ago, out of boredom, I started trying to play my musical keyboard along with songs that I didn't know how to play.&nbsp; At first this went as expected, but after quite a bit of time spent doing this, I actually became fairly good at it, which surprised me since as much as I knew about such skills before this was what I'd learned in school, which was that being able to play a song merely by having heard it was a skill that one was either born with or could never acquire.&nbsp; As usual, my public school education has proven to be misleading.&nbsp; Honestly, these days, if it wasn't something I read in a textbook, I just assume that everything I learned in school was false because, in every instance when I've bothered to verify it, that has turned out to be the case.<br><br>Anyway, while I'm still not incredibly good at it, I'm good enough at it that I don't much bother to &quot;learn&quot; how to play anything anymore.&nbsp; When I want to play, I just turn on my MP3 player and play whatever it plays.&nbsp; Like I said, I'm not great at it, but I'm good enough that it fullfills the goal of amusing me.<br><br>...but I can't do that with this steel pan toy.&nbsp; The note arrangement is abysmal.&nbsp; I understand why it is the way that it is.&nbsp; It places adjecent notes on opposite sides of the pan so that when a note sounds it doesn't so much trigger the other notes that are nearby in frequency, and it keeps all of the notes in a particular key nearby each other which I assume someone considers convienent, but in terms of trying to just play music I don't know how to play, it's a nightmare.&nbsp; If the next note is one semitone higher than the previous, it's 5 buttons clockwise, if it's 2 semitones, it's 2 buttons counter-clockwise, if it's 3 semitones, it's 3 clockwise, if it's 4 semitones, it's 4 counter-clockwise.&nbsp; This by itself isn't the bad part, it only becomes bad when you consider that this borderline random arrangement means that, even if I am intending to hit the correct semitone (though often I'm not), if I'm off by just one button, the note I hear is totally different, and then I'm lost.&nbsp; Add to that the fact that exactly where I transistion between the inner, middle, and outer rings depends on which key the song is in, and it's just exceedingly difficult.&nbsp; I'm sure that, with a lot of practice, I could make some progress, but the simple fact is that this layout isn't conductive to what I want to use it for, and so a redesign is in order.<br><br>So I've decided to just do what I should have done to begin with:  Just put all the fucking notes in a grid layout, in order of pitch.<br><br><center><a href="stuff/steel_pan_toy/new_model.jpg"><img src="stuff/steel_pan_toy/small_new_model.jpg"></a></center><br>This one is still a work in progress, but as you can see, I've put together a test board, hence the ribbon cable which connects to the microcontroller on some solderless breadboard.&nbsp; I have practiced with it for a few hours, and I'm already better at it than I am with the steel pan layout.&nbsp; <br><br>One thing that did surprise me is that, despite the notes being in order, my skill at figuring out songs on a piano keyboard doesn't translate to this new format very well.&nbsp; As best I can tell, there are two reasons for this.&nbsp; <br><br>The first is that, as I've said, I'm not very good at it, and so to be able to do it well, I first have to spend a minute figuring out what key the song is in.&nbsp; At that point I only need a skill accurate to about 2 semitones, and so I can then usually hit the right notes.&nbsp; Exceptions are the Family Guy theme song which doesn't much stick to a particular key, and the SMB1 song which has a lot of accidentals and is overall so random that, even knowing how to play it on the steel pan now, I still couldn't play it on a piano keyboard.&nbsp; Most songs however do stick to one key, and a surprising number stick to a pentatonic scale for the majority of the song.&nbsp; Anyway, with this layout, knowing which buttons belong to a particular key is tricky.&nbsp; It turns out that any key is made up of a checkerboard arrangement of buttons, but with one of the vertical colums you use all of the buttons in that column, and then the checkerboard pattern is inverted on opposite sides of that column.&nbsp; An obvious solution here would be to just arrange the notes like a keyboard, but the buttons are already as small as I want to make them, since any smaller and my fingers won't fit, and I really don't want the thing to become bigger since at this point it's already kind of a stretch to call it &quot;pocket size,&quot; and I do want something I can keep in my pocket.<br><br>The other reason is simply that the increase of pitch wraps around.&nbsp; So a note that's say 3 semitones higher could be to the right, or it could be one row higher to the left, depending on which column the current note is in, whereas on a piano keyboard it's just always 3 keys to the right.&nbsp; So my brain not only has to figure out the relative pitch of the next note, but then has to decide where that note is.<br><br>Even with those problems, I do seem to be making progress towards learning this layout, so I'm going to make a portable version and keep practicing with it.&nbsp; Also I'm hoping that, by nature of it being so difficult to understand which notes belong to a particular key, my brain will finially learn to distinguish neighboring semitones so that it doesn't have to know what key a song is in, which would then allow me to play songs like the Family Guy theme song without so much difficulty.<br><br>Oh, and I guess I should show what it looks like when it's in the mode that teaches you to play a new song.&nbsp; Let's see Google figure out the copyright claim on this one:<br><br><center><iframe width="640" height="360" src="https://www.youtube.com/embed/zTgz_mS1YcU?rel=0?ecver=1"></iframe></center><br>That's <a href="https://www.youtube.com/watch?v=zg2X3Z3cU6I">this song</a>, in case anyone wants to know.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#3</guid>
      <title><![CDATA[People on the Internet are Incredibly Disappointing]]></title>
      <author>Pj</author>
      <pubDate>Mon, 17 Aug 2015 07:43:13 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/people_on_the_internet_are_incredibly_disappointing.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I've spent the last ... well, forever ... writing posts on internet forums.&nbsp; Slashdot mostly, but lately I've involved Reddit too.&nbsp; Reddit is unique in that, whereas on Slashdot there aren't enough moderation points to waste them giving people negative moderation, on Reddit everyone can moderate as much as they like, and so you get to see just how much people dislike what you say.<br><br>Like this comment, which ended up with a score of -22:<br><br><div class="block">It's amusing that <a href="https://www.random.org/">random.org</a> doesn't know where their random numbers come from; that they think they are the result of &quot;atmospheric noise&quot; received by a radio tuned between stations.<br><br>You know how you can tune a television to a station, one which comes in clearly, then disconnect the antenna and see nothing but static? Do you think that static comes from the atmosphere? ...because when the antenna was attached, you saw what was in the atmosphere, and it wasn't static. The television station's broadcast is what's in the atmosphere. So the noise must come from somewhere else.<br><br><a href="https://en.wikipedia.org/wiki/Johnson–Nyquist_noise">https://en.wikipedia.org/wiki/Johnson–Nyquist_noise</a><br><br><a href="https://en.wikipedia.org/wiki/Shot_noise">https://en.wikipedia.org/wiki/Shot_noise</a><br><br>The television's automatic gain will turn up the amplifier gain as high as it needs to in order to receive a signal. However, without the antenna, the noise generated within the components of the amplifier circuit is greater than whatever signal happens to find its way in there, and so the output of the amplifier is just that noise.<br><br>This property of electronic components is used to build random number generators all the time. No one has to attach an antenna and point it towards the atmosphere for the circuits to generate random numbers. They can seal the circuits in lead and they'll still generate random numbers.</div><br>I thought it was a nice post given that it explains the topic in a way that should make its truth obvious to anyone who reads it.&nbsp; Even so, at least 23 people didn't agree.&nbsp; I tried asking for an explaination when I noticed the score was going negative, but no one responded with one, even though the score continued to become more negative after I asked, and so it wasn't as if I asked too late for anyone to respond.<br><br>That wasn't even the most poorly-rated comment, it's just the only one I thought to pick out while I was deleting them all today.&nbsp; There were some other gems in there too, like a bunch of downvotes for suggesting that fuses exist in electronic devices not to protect circuits but rather to protect humans from electrical fires.&nbsp; I can understand that there are always going to be stupid people, but this was in an electronics subreddit and it's a very basic topic.<br><br>There was also the time that that same subreddit was having an orgasm over the new edition of &quot;The Art of Electronics,&quot; for which there was a free chapter available on the internet.&nbsp; So I had a look.&nbsp; At the beginning were some simple power supply schematics one might find on a web site, then it moved on to more complex schematics utilizing various ICs, essentially just what you would find in the &quot;example applications&quot; section of each IC's datasheets.&nbsp; Seeing no value in such a book, I made the mistake of saying as much, and was down-modded to hell for it.&nbsp; Apparently a lot of people absolutely love that book.&nbsp; I can understand why, since if I'd've had access to it back in 1995, I probably would love it too, since I didn't have internet access back then and so information about electronics was hard to come by.&nbsp; However, it isn't 1995 anymore, and so to be worth $110, a book has to include more than what I can find on the internet.&nbsp; ...and that's the point I tried to make with several pages of text, and I thought I made the point quite well, but as was clear from the replies, most of what I'd written hadn't even been read.&nbsp; People would read just enough to see that I was saying something they didn't like, then reply with arguments I had already anticipated and addressed in my original post, and not even deep within, but like second-paragraph stuff.&nbsp; It was insane.<br><br>People on the internet are incredibly disappointing.<br><br>I've tried to reduce my time wasted writing posts on Slashdot and Reddit, but it's a hard habit to break.&nbsp; So far the most success I've had is thinking of the many posts I've spent hours writing only to eventually discard the entire text under the assumption that I wasn't going to convince anyone of anything anyway.&nbsp; ...but that only stops me from writing posts on complex topics.&nbsp; I still waste time writing smaller posts which are equally useless.&nbsp; I think that to really break the habit, I'm going to have to learn to substitute it with posting on my blog instead.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#32</guid>
      <title><![CDATA[Even more battery tests!]]></title>
      <author>Pj</author>
      <pubDate>Fri, 7 Apr 2017 00:14:07 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/even_more_battery_tests.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Seems I killed some of my batteries.&nbsp; I bought some cool 8-cell holders with coax connectors, which allowed me to form them into battery packs that I could plug into the charger or plug into some device to power it.&nbsp; However, I forgot to build into my devices the ability to detect when the batteries were dead, and since they don't all go dead at the same time, some of them were drained to the point that a negative voltage was applied, which pretty much kills them.<br><br>I've taken steps to prevent this in the future by making a little device that plugs onto the coax connector and monitors the voltage, sounding an alarm when it becomes low.&nbsp; This seemed like the best solution since one application is to use the batteries to power cameras when I go on bicycle rides, and in that case I'd rather get a warning and change the battery manually than have it just cut out on me.<br><br>Anyway, this now put me at a shortage of batteries, and unfortunately Walmart wants $10 for 4, and eBay has spoiled me to the point that I can't pay prices like that anymore.<br><br>So I had a look at what eBay has to offer.&nbsp; There are some <a href="http://www.ebay.com/itm/16-pcs-AA-3000mah-NiMH-1-2v-Yellow-Rechargeable-Battery-4-pcs-Plastic-case-/302080383033">very cheap NiMH batteries</a>, but as many reviews and <a href="http://www.ebay.com/itm/8pcs-AA-2A-3000-Actual-300mAh-1-2V-Ni-MH-NiMH-Rechargeable-Battery-Cell-Yellow-/272154776622">some honest sellers</a> state, their capacity is only 300 mAh despite 3000 mAh being printed on the label.&nbsp; Fucking scam manufacturers.<br><br>So I found some with the brand &quot;Lumsing&quot; that were supposed to have a capacity of 2850 mAh, a larger capacity than any previous battery I've purchased, but not an unreasonably high capacity either.&nbsp; They're available from <a href="http://www.ebay.com/sch/i.html?&amp;_nkw=lumsing+2850">many sellers</a>, all of whom I assume are the same since they're all in Plainfield, Illinois.<br><br>I also needed some alkaline batteries for my steel drum toys.&nbsp; As it turns out, Walmart is crazy expensive on batteries too.&nbsp; Duracell and Energizer are about $1 per cell, and Rayovac isn't much cheaper.&nbsp; They do have some generics too, but they're not with the other brands, they're hidden away somewhere past the checkout aisles, which I didn't discover until a later visit.<br><br>Anyway, not finding the generic batteries prompted me to go to the &quot;Everything's $1&quot; store, where I found Sunbeam brand cells, 4 alkaline for $1, or 8 carbon zinc batteries.&nbsp; Curious how these compared to the more expensive Duracell batteries, I put them in my tester too.<br><br>Anyway, I'm tired of graphs, so let's just do this in text:<br><br><tt>Battery 0: 0.191 V, 64 mA, 0.012 W,  9136 J, 2530 mAh<br>Battery 1: 0.114 V, 38 mA, 0.004 W,  9283 J, 2493 mAh<br>Battery 2: 0.050 V, 17 mA, 0.001 W, 11225 J, 2755 mAh<br>Battery 3: 0.053 V, 18 mA, 0.001 W, 11518 J, 2757 mAh<br>Battery 4: 0.070 V, 23 mA, 0.002 W, 11257 J, 2749 mAh<br>Battery 5: 0.052 V, 17 mA, 0.001 W, 11515 J, 2758 mAh<br>Battery 6: 0.094 V, 31 mA, 0.003 W,  8071 J, 2105 mAh<br>Battery 7: 0.027 V,  9 mA, 0.000 W,  2741 J,  959 mAh</tt><br><br>After the concept of &quot;internal resistance&quot; finally clicked for me, I added a &quot;mAh&quot; field to my software, so no more estimating mAh from the Joules.&nbsp; <br><br>Batteries 0 & 1 are old Energizer NiMH cells rated at 2300 mAh, which I tossed in just for comparison.&nbsp; I can't say how they compare to past tests since for some reason their missing the numbers I taped to them so I don't know which cells they are.&nbsp; ...and come to think of it, I forgot to number the new cells.&nbsp; Fuck.<br><br>Batteries 2 - 5 are the new Lumsing cells, rated at 2850 mAh.<br><br>Battery 6 is an alkaline Sunbeam cell.<br><br>Battery 7 is a carbon-zinc Sunbeam cell.<br><br>I have a separate script that tells me how much of the capacity was delivered while the output voltage was still above certain thresholds, namely 1.0 volts, 0.9 volts and 0.8 volts.&nbsp; Here's its output:<br><br><tt>0: 2008.7, 2160.7, 2242.8<br>1: 2028.9, 2195.9, 2267<br>2: 2583.4, 2645.6, 2680<br>3: 2620.4, 2659.4, 2677<br>4: 2567.1, 2619.2, 2640.5<br>5: 2619.5, 2662.7, 2678.1<br>6: 1602.1, 1810.7, 1909.6<br>7: 393.8, 491.1, 563</tt><br><br>Overall, I'd have to say they're not quite 2850, and definitely unlike the Duracell & Energizer which always seem to test better than their rated capacity, but they're not far off, and for being half the cost of those brands and still having a better capacity, they definitely seem like a good deal.&nbsp; I just hope they don't have some other problem, like perhaps that capacity quickly disappears over time.<br><br>As for the alkaline battery, I see that the Duracell alkaline that I tested 2.5 years ago held out for almost 6 hours in the testing device, dumping 8.8 kJ by that point.&nbsp; The Sunbeam alkaline held out for a little over 6 hours, dumping the same 8.8 kJ by the time it dropped below 0.8 volts.&nbsp; I don't have a mAh number for that Duracell since I wasn't doing mAh at the time, but the voltage graph looks pretty similar too, so I'm going to guess the mAh would be the same too.&nbsp; <br><br>Now perhaps there's something to the Duracell batteries to justify their triple cost, like that ten year shelf life they make such a big deal over, but at least in terms of just tossing them in something and draining them right away, it seems that $0.25/cell batteries work just as well as $0.75/cell batteries.&nbsp; So I think from now on I'll just buy the generic alkaline cells.<br><br>The carbon zinc battery isn't so clear, but I'm leaning towards declaring it a waste of money.&nbsp; It does say right on the package &quot;ideal for low-drain devices,&quot; and my battery tester isn't exactly low drain and so the fact that the batteries took a dive right at the start isn't much surprise.&nbsp; However, the interesting thing about the mAh rating is that it ignores the battery's internal resistance.&nbsp; Thus, even though I was draining the battery far too fast, and thus I won't receive the same Joules that I would if I drained it more slowly, the mAh I get out of it should be the same either way.&nbsp; The chemical process inside the battery has so many electrons to move, and it's going to be the same number regardless of whether I drain it slowly or quickly.&nbsp; So a slow drain should produce the same mAh, just at a higher voltage.<br><br>So when we look in the first table at the mAh rating of the carbon zinc cell, it's nearly half of the alkaline's mAh rating, which is in line with the carbon zinc's cost being half of the cost of the alkaline batteries.&nbsp; So they're perhaps as cost-effective as alkaline cells in low-drain devices if you don't care that you're replacing them twice as often, but why bother?  Just get the alkaline batteries which are just as cheap when you consider that they'll last twice as long.<br><br>Still, I may have to perform a low-drain test to verify that, as I'm not certain about it, and there could be money to be saved if it turns out I'm wrong.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#41</guid>
      <title><![CDATA[fuck raspberry pi]]></title>
      <author>Anonymous</author>
      <pubDate>Wed, 26 Jun 2019 22:42:17 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/fuck_raspberry_pi.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">fuck the pi.. FUCK THE PI!!<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#35</guid>
      <title><![CDATA[Raspberry Pi]]></title>
      <author>Anonymous</author>
      <pubDate>Wed, 14 Feb 2018 07:52:43 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/raspberry_pi.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I got a Raspberry Pi, it is rubbish because I expected it to come with some storage media and a os. When I got it, I connected itup and itdidntshow up and I was confused. I then found a SD card and then temporarily installed Raspbian Linux. It was slow as hell, It was actually unusable so I expected that I could get Windows on it. Well you can but I wanted the desktop variant not the IoT. I was furious to find that there was no proper Windows, and I just abandoned it and I am never using Linux, Gimp, Open/LibreOffice again. Windows, Xbox, Microsoft Office are the best and reliable<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#40</guid>
      <title><![CDATA[that's the point]]></title>
      <author>Anonymous</author>
      <pubDate>Sat, 7 Jul 2018 20:41:38 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/thats_the_point.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">raspberry pi is supposed to be a learning tool.. to teach programming.&nbsp; It's not a plug and play device.<br><br><h1 style="color:Tomato;">Moosfet don't abandon MME for god's sake!</h1><br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#10</guid>
      <title><![CDATA[That's awesome...]]></title>
      <author>Pj</author>
      <pubDate>Sat, 3 Oct 2015 13:57:50 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/thats_awesome.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">That totally works, and I'd forgotten how to make it remove duplicates from the history, so that article was double good.<br><br>As for this:<br><br><div class="block">I was recently reading about a case where part of the evidence appears to be a deleted bash history-file. From what I gather, the accused says that the removal was a clean-up job to remove inadvertently stored passwords rather than an attempt to hide nefarious activity.</div><br>Am I the only person who deletes the .bash_history file and, in order to avoid its re-creation, replaces it with a symlink to /dev/null?  It's incredibly rare that I need command history from a previous session, and on those rare occasions it isn't a big deal to simply re-type the command.<br><br>I do the same with the folder that the flash player wants to store its data in.&nbsp; If you delete the folder, it will re-create it, but if you replace it with a symlink to /dev/null, it fails to re-create it, and so its data storage is permanently disabled.<br><br>I have no clue why so much software is designed to store history data forever.&nbsp; Once I close my web browser, I have no need for any history from when it was previously open.&nbsp; If I want to find web sites again, I either make a bookmark or I find it the same way I found it the first time.&nbsp; Aside from the back button and the &quot;restore closed tabs&quot; feature, I don't even use my web browser's history data from its current session, so why anyone would want it to store history data for years is beyond my understanding.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#19</guid>
      <title><![CDATA[Ooh, spam...]]></title>
      <author>Pj</author>
      <pubDate>Tue, 23 Feb 2016 17:52:34 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/ooh_spam.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I was wondering how long I'd get away with the &quot;submit for review&quot; button not actually leading to any sort of review.&nbsp; <br><br>Time to turn that on I guess...<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#27</guid>
      <title><![CDATA[Your a fag]]></title>
      <author>Dingus</author>
      <pubDate>Wed, 18 Jan 2017 00:02:24 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/your_a_fag.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Your a fag.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#2</guid>
      <title><![CDATA[I agree totally]]></title>
      <author>Anonymous</author>
      <pubDate>Mon, 6 Apr 2015 03:52:29 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/i_agree_totally.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I watched it a little while ago and I couldn't believe how the adults were victimizing this little boy even further. He didn't teally communicate with them because he clearly knew that he had no help coming from any of them, at all. I was sickened by them, especially the school officials and heartbroken for him.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#6</guid>
      <title><![CDATA[rdiff-backup]]></title>
      <author>crunge</author>
      <pubDate>Wed, 2 Sep 2015 19:24:35 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/rdiff_backup.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Until you write your own, have a look at rdiff-backup. I use it writing to a drive in an eSATA enclosure (USB enclosures apparently tend to be garbage).<br><br>I've restored from rdiff-backup a couple of times. Once using the restore command, another time just going and grabbing the data from the backups directory because grabbing the most recent one was good enough.<br><br><br>I have this in /etc/cron.daily/rdiff-backup:<br><pre><br>#!/bin/bash<br><br>BACKUP_DEST=/backups<br>RDIFF_PATH=/usr/bin/rdiff-backup<br><br>BACKUP_PATHS=&quot;/usr/local/cfengine /var/lib/cfengine2 /etc /var/home /igor&quot;<br><br>for backup_path in ${BACKUP_PATHS}<br>do<br>        DEST=${BACKUP_DEST}/`echo ${backup_path}| sed -e 's|^/||' -e 's|/|-|g'`<br>        ${RDIFF_PATH} ${backup_path} ${DEST}<br>        ${RDIFF_PATH} --remove-older-than 2W ${DEST} 2&gt;/dev/null<br>done<br></pre><br><br>Also, revision control! If you just want something to keep you from nuking things you want to keep, git is great, branching is cheap and easy. If you just want something dead-simple, RCS is dead simple:<br><br><pre><br>mkdir RCS<br>ci -l code.c<br>&gt; I'm about to try something stupid<br>&gt; .<br>vim code.c<br># Oh yeah, shit was bad<br>co -l code.c<br></pre><br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#34</guid>
      <title><![CDATA[I had 2 PNY Ram memories go bad also]]></title>
      <author>stephen</author>
      <pubDate>Tue, 2 Jan 2018 19:05:49 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/i_had_2_pny_ram_memories_go_bad_also.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">I had problems with my computer. It said memory problems-- both using Microsoft diagnosis and Dell diagnosis. So I am not a technical guy-- I hired a professional computer repair person- from a company--- <br>We tested both RAM memory - and BOTH were bad after about 14 months-- even though the packaging clearly says-- lifetime guaranty. <br><br>I don't think that the RAM memory should last forever-- but 14 months seems like rather BAD results. The original DELL memory 8 GM RAM lasted more than 3 years with no problems. <br><br>The technician said on the one hand -- he thought PNY was generally good. On the other hand- he had never seen in more than a decade of servicing computers- BOTH memory cards go bad.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#7</guid>
      <title><![CDATA[An Update for My File Size Viewer]]></title>
      <author>Pj</author>
      <pubDate>Sun, 6 Sep 2015 06:49:58 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/an_update_for_my_file_size_viewer.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Since it has been incredibly useful to me over the last 1.5 years, and since I've made a few tweaks to it since then, I decided to release a new version of my file size viewer.<br><br>So I made <a href="/software/file_size_viewer/">a web page for it</a>, as well as a Windows version, after realizing that there wasn't much going on in it outside of standard C code and OpenGL.&nbsp; I also fixed it so that it only redraws the screen when necessary, so its CPU usage is reasonable now.<br><br>...and to answer my question in the origional post:  No, I shouldn't eat more motherfucking sugar.&nbsp; I may have written this file size viewer while high on it, but over the next few days, as I continued to eat nothing but candy, I became incredibly depressed.&nbsp; Fuck sugar.<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#47</guid>
      <title><![CDATA[Radio Shack's Books]]></title>
      <author>Pj</author>
      <pubDate>Mon, 1 Feb 2021 03:01:02 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/radio_shacks_books.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">&gt; <i>As for Art of Electronics: it's a tad overrated book. At one time I went through the less trivial circuits and built them, one by one, paying attention to what was going on. Many didn't work as claimed, and not because of some silly mistake in the book, but because clearly nobody bothered to actually build them as described/shown.</i><br><br>Reminds me of my experience with the Forrest M. Mims books that Radio Shack sold.&nbsp; They're regarded by many as excellent, but I don't know why.&nbsp; I guess it has something to do with them being the only thing at Radio Shack and anything being better than nothing, and so people remember them fondly because at least they weren't nothing.<br><br>I remember one circuit I built, some kind of radio transmitter, just burnt itself up.&nbsp; I then looked at the schematic closely and couldn't really see why it would do anything else.<br><br>I note a similar fondness among people on the internet for the 555 timer.&nbsp; I suspect this too has a lot to do with it being one of the few parts available at Radio Shack, as well as being often featured in Radio Shack's books.&nbsp; It's like they had a rule that they wouldn't sell any book that used any part that wasn't available at Radio Shack.&nbsp; <br><br>I've never had good luck with 555 timers, which seems to come down to it not being a well-defined part in terms of operating parameters, with each manufacturer doing their own thing.&nbsp; Indeed, one books I bought at Radio Shack about switch mode power supplies said &quot;if one 555 timer doesn't work, try different ones until the circuit works.&quot;<br><br>Even the one thing I remember fondly from Radio Shack, the &quot;30-in-one&quot; electronics kits, were actually kind of awful.&nbsp; I guess the kits themselves were OK but the manuals were awful in that they didn't really teach anything.&nbsp; As a kid I would build the circuits for fun but there was nothing to be gained by reading the accompanying text, other than instructions as to how to use the circuit once completed.&nbsp; <br><br>It kind of makes me wonder if Radio Shack couldn't have been more successful if it had simply had better educational materials.&nbsp; Who are you going to sell electronic components to when no one knows how to use them?<br>]]></description>
    </item>

    <item>
      <guid>http://www.ecstaticlyrics.com/pinnwand/#29</guid>
      <title><![CDATA[Your a boss]]></title>
      <author>CrashPC</author>
      <pubDate>Wed, 1 Mar 2017 22:45:04 GMT</pubDate>
      <link>http://www.ecstaticlyrics.com/pinnwand/messages/your_a_boss.html</link>
      <description><![CDATA[<base href="http://www.ecstaticlyrics.com/pinnwand/messages/">Couldn´t help it. Found you trough ATF22V10C article. You must be awesome. Hope you stay around. Thanks for sharing your knowledge and the funny stuff. Mostly that!<br>]]></description>
    </item>

  </channel>
</rss>
