<< >>
justin = { main feed , music , code , askjf , pubkey };recent comments
search
Searching for 'pri' in (articles)... [back to index]

April 15, 2020
reapering at home

(youtube link)

This was a quick thing, using REAPER and the JSFX "sequencer megababy" and "super8", recorded and edited in 18 minutes while videotaping (taping hah). I'm going to do a longer version with more explanation of the tools used, I think. Lots of fun.

2 Comments


April 11, 2020
getting through the days at home



This is my first pedalboard. Andy was very very kind to give me The Wave and the Big Muff Pi and Pog, and I always coveted his Sunset. And I also copied his Iridium since it seemed appropriate. Anyway, so much fun. Good for recording and NINJAMming.

I also posted a song (second opinion) below... the drums I recorded when I stopped to check in on my studio, the rest from home. The words were a poem written by my grandfather (in the 90s, I imagine, given some of the references). My family edited and (self)published some of his works on Amazon.

Life keeps going on. Today I was looking at the graphs and timelines of things and got really angry with our state-level leadership (federal is another level of anger and despair). Had Cuomo put PAUSE in to effect a week earlier, think how many lives would've been saved. 15,000 cases before doing anything is way, way too many. California did their stay-at-home order with ~900. Bravo.

There's no use being angry, maybe, and I fully appreciate not having to be responsible for so many other peoples lives. I don't think a lot of politicians think this through -- the responsibility that comes with the power. Cuomo and Bill de Blasio clearly did not. There is no need for me to mention the other person who doesn't take the responsibility seriously. That's another league, and while some people say a malignant narcissist I prefer "bag of shit."

So now, I'm drinking a G+T made with the best grapefruit I can recall having had, making nothing of a perfectly lovely evening at home.

2 Comments


April 1, 2020
another week

Well time keeps on ticking, I guess. I've done as NINJAM-related work in the last week as in the previous 10 years, I think. The jam we had last night (see below) was awesome, I especially like the last track in it.

We started renting a cheap ($20/month) server for hosting some private NINJAM servers. My initial thought was you could request a private NINJAM server via a web interface, then it would launch a new ninjam server process and give you the port number. That seemed like a bit of work, so instead I did something that would be less work.

As the first experiment I ran 50 NINJAM server processes on the one box, and had it as a purely etiquette-based system, where you only join an empty server or a server to which you were invited. It had some usership, though it was hard to tell if people really wanted them as private or if it was just a big farm of more servers.

I thought about modes where you connect to a server, and then can temporarily set a password so only your friends can join. Seemed easy enough, though you might connect to a server you think is empty and have someone beat you to it, and people might hog servers.

One thing I noticed is that the mechanism the NINJAM server uses to decide when to sleep was fine for a few processes, but if you ran 50 of them, all those polling between nanosleeps added up.

Then I thought -- what if you had a server where if you connected with a password, that password would define the room-name you go into (the NINJAM server already has a User_Group object which is basically the whole server). This seemed like a great idea, but it turns out it wouldn't work, because the password challenge/response system doesn't allow identification of passwords, nor would it detect if two users used the same password. I thought about using part of the anonymous username as a server ident, but the downside there is that if you set that, then connected to a different server with the same anonymous credentials, you'd leak your private server name.

So what I finally came up with: the NINJAM server can now run in a lobby-mode, and via chat commands you can create/join private rooms. You can also chat in the lobby with other people who are in the lobby. So you could negotiate "hey want to play an ambient session? let's !join ambient." So you have private rooms (secret roomname), semi-private rooms, etc. Feels pretty fun! Not many users yet, though.

Of course this will all get ruined once someone decides to troll/spam/flood/etc. I'm sure at the very start IRC was amazing and simple, and by the time I left it it was a mess with bots and anti-bots and other things that just ruin everything. Oh well let's enjoy it while it lasts.

(anything to distract from what's happening outside)

Comment...


February 11, 2020
SOB 50

Oops I haven't updated here in months. I posted a thread to Twitter the other night, which I'm now going to post here since it's more appropriate here anyway (I was tired and lazy and on my phone). So here goes (with [edits]):

Yesterday [Saturday, 3 days ago] I did my first 50 mile ultra[marathon]. It was in California, near Malibu [Edit: The race is called the Sean O'Brien 50]. I woke up at 3:30am, left the house at 4:10, picked up @runviper [Edward] at 4:35, arrived at the start at about 5:15, before sunrise. It was cold, 40F [reminded me of home], and since the full supermoon was low on the horizon, dark.

You will see a lot of me making this face in this thread:

The start was supposed to be at 6:00 sharp, though I'm pretty sure it was 30 seconds late:

[That's the organizer with the megaphone, I believe. In the final race information email, there was a really thoughtful paragraph which stuck with me, I'll quote it here:

    I believe we are capable of anything we set our minds to. If you visualize it enough, and work hard you can make it happen. Remember that it's a "gift" that we get to run on the trails. There are people who can't even get out of bed. You "get" to participate in an ultra. Enjoy the experience. Be in the moment, and just have fun. It will all come together on race day if you stay positive, and remember what a blessing it is to do what we do. Not even 1% of the population will ever do what you are going to do in less than 1 week. Pretty awesome when you think of it like that? See ya soon my friends!!
Anyway...]

The first couple miles were crowded enough that I didn’t stop to take a picture. It went up a nice hill which made me feel powerful in my ability to climb it while running, then down the other side, through some more park, and then we arrived at a stream.

It was perhaps a small creek, but big enough that crossing it was tricky. There was a loose rope going across to help. A headlamp went flying and started floating down the water. I had a moment of heroism when I recovered it. I crossed with dry feet. Not bragging. After the creek crossing we started climbing again, and the sky started getting light.


and then the sun rose. Around this time I was able to feel my fingers again. I had thin cherry tree 10-miler branded gloves on but they could only do so much. This was almost an hour in, probably around 4 miles in, having climbed about 1500’

After we ascended another 10 minutes or so, the fog covering the Pacific came into view:




There was a photo-op moment going up over some rocks. Approaching it I figured that round thing would be a microwave dish or something but it was actually a light for a photographer.. I’ll see the results eventually I imagine. [edit: that photo wasn't great and too expensive to buy!]

[The] first aid station was about 7 miles in (hour and 40 minutes after the start). Mmm watermelon and oranges. Also potatoes and salt. Eating felt good. [Spent about 2.5 minutes here]

The next hour or so was mostly single track and had a good amount of variety. The charcoaled wood from the fires of last year offered a contrasting element to the blissful joy of the run.





At about 9am (3 hours elapsed, about 13mi, 3200’ ascent) after crossing above a tunnel, we arrived to the second aid station, which had expanded offerings from the first. Sandwiches! PB&J awesome! In hindsight I should’ve had some candy. Regretting not having candy. Getting warm.


There were drop bags at that aid station... dumped my wool shirt, headlamp, picked up sunblock. [spent about 7 minutes here] Soon enough it got very bright, and less photogenic. (note re: video — Spaceballs reference, had plenty of water):

After another hour or so (10:15am?) we crossed over a pass and could see the marine layer again. ~17 miles and 4300’ climbing cumulative...



10 minutes downhill and we arrived at an aid station. Lemonade, fruit, sandwiches, potatoes, consumed. @runviper made a taco, I questioned his judgment for eating beans, then proceeded to join him. No regrets [on the beans] (for me at least) [regrets on not eating candy]. [spent about 5 minutes here]

At this aid station they explained we were 19 miles in, we just had to do 3 miles down to the next aid station, then 8 more miles back up another trail, then the 19 miles back to the start. Legs felt pretty good... time to descend. Oof.


3 miles, 1500’ of descent, and maybe 30 minutes later, the cracks started to show. That tight IT band thing you feel sometimes? hello


eat eat eat [spent about 7 minutes] then back up the hill with full water, going back to where we were, in 8 miles instead of 3. Hey why is it so steep?



After having climbed 1800’ for an hour, you suddenly realize you’re on top of the wrong mountain [edit: but still on the course -- it is a torturous course], and the aid station is a tiny speck on the horizon. There is a gorge separating you from it.

The aforementioned IT/knee thing made the 800’ descent difficult, especially the steeper parts. So I was actually happy to be climbing again, which was good because there was 1000’ to go for the aid station


These 8 miles were brutal. The sun was strong, it was hot, and seeing the expanse between you and where you need to be was intimidating. And knowing once you get to the aid station, you still have 19 miles to go (which are largely downhill, ugh) After having gotten to the aid station, food [nutella (gnutella) sandwiches, mmm. apparently they had run out of water too, but had since gotten more], ice in the face, etc [spending about 8 minutes], we continue on. There’s a small descent, a few hundred feet later I decide I must stop and get a rock out of my shoe. We are 31 miles in, 7300’ of ascent, it’s 1:40pm, there have been rocks in my shoes all day. I probably also tried to stretch my IT. anyway we climb 600’ to go back over the pass, and look back at the ocean:


Now it’s just a short 6 miles to the bag-drop aid station. At some point around here I started using anti-chafe stuff everywhere i felt twinges. Seemed to work but could’ve been placebo. I was wincing on all of the steeper descent bits, not taking too many photos

Get to the mile 37 aid station, change shirts back to wool, grab headlamp. Eat a little but damn at this point I’m sick of food. [Should've started eating candy. changed socks, win. Drank cold brew coffee from drop bag. Both win. Also did some stretching of the IT. total time here was 13 minutes]



And another 6 miles of mid-afternoon. With 2000’ of ascent (not too gradual, plenty of my new favorite thing at this point: descent)




We get to the final aid stop at around 5pm (that 6 miles took a while!), just 7 miles to go! Stretch again here [spent about 8 minutes here -- total aid station time was about 50 minutes]


After this aid station it really got to be the magic hour:



and the fog and mist:

the full super moon returned, too




the anticlimactic ending is that I stopped taking pictures, we turned on headlamps, I endured the descents, and in the last 2 miles got my feet soaked trying to cross the stream that I had managed to cross dryly in the morning [tweaked an old injury in my arm doing this, though, hanging on to the rope crossing the stream. didn't really realize it at the time, but it became apparent by Monday], and despaired that the trail never seemed to end.

and then finally finished 50ish miles with approx 11,000ft of ascent and 11,000ft of descent, in a bit less than 13 hours. And @runviper [Edward] was kind enough to wait for me to catch up before crossing the finish.

update: Monday: legs feeling pretty good! had some nice walks yesterday and a hike today. much better than post-marathon, which makes sense since most of it was hiking...

update: Tuesday: flew home, had an easy run.



Comment...


April 7, 2019
The Old Man and the C (Live at Rockwood)

(youtube link)

Audio (edited) - The Old Man and the C Live at Rockwood April 6 2019

Comment...


December 12, 2018
(Hobbyist) Music Delivery

I've been recording 1-3 hour (occasionally longer) sessions of music and posting them to the internet as bigass .mp3 files for about 15 years now. As the quality of the music has steadily icnreased, I've also been looking at ways of making it more accessible (very few people can commit to listening to 2 hours of a single mp3). So after the last session, I thought it would be nice to mix it into individual tracks, naming them as I edit the session.

What I determined was that individual tracks were great! I thought about it some more and decided I could have both, generating the bigass mp3 files and indexing them (much as brainal.org does, but more intelligently. And then I realized I could parse the .RPP (REAPER project file) projects from the last 12 years or so, and generate a list of songs (from places where it was clear everything was edited) for each session. It doesn't work totally reliably, as there are plenty of places where two or three songs flow into eachother. But that's OK.

Anyway, so you might have noticed on this page the full jam links have been replaced with individual song/supersong links. We've been going through naming them as appropriate.

The other nice thing about this is that we can pull these feeds into our band websites...

13 Comments


April 25, 2018
super8 live demonstrationish

(youtube link)



Comment...


April 17, 2018
Decanted Youth Live @ Pianos

(so much fun, yay!)
(youtube link)

5 Comments


April 11, 2018
super8 stemsy

(youtube link)

Comment...


April 9, 2018
super8 practicey

(youtube link)



Comment...


April 6, 2018
a quick improvised song

This might be Major Major Major w/ Andy and Sarai (from yesterday's recording)

Side note: my Jams/Full directory now has over 65GB of 192kbps mp3. Apparently that's about 800 hours, or a bit over a month if played continuously. Maybe I should try listening to it all in order.

P.S. I just overhauled brainal.org yay.

1 Comment


April 4, 2018
Show Announcement

NYC readers -- I'm playing with Decanted Youth at Pianos on Tuesday April 17th at 8pm. If you're reading this blog then you probably have an idea of our music, but if not there's a video of a previous show, or you can listen to any of the "rehearsal with sarai and andy" mp3 links throughout.

Comment...


May 12, 2017
linux hacking on an ASUS T100TA

I've been working on a REAPER linux port for a few years, on and off, but more intensely the last month or two. It's actually coming along nicely, and it's mostly lot of fun (except for getting clipboard/drag-drop working, ugh that sucked ;). Reinventing the world can be fun, surprisingly.

I've also been a bit frustrated with Windows (that crazy defender/antispyware exploit comes to mind, but also one of my Win10 laptops used to update when I didn't want it to, and now won't update when I do), so I decided to install linux on my T100TA. This is a nice little tablet/laptop hybrid which I got for $200, weighs something like 2 pounds, has a quad core Atom Bay Trail CPU, 64GB of MMC flash, 2GB of RAM, feels like a toy, and has a really outstanding battery life (8 hours easily, doing compiling and whatnot). It's not especially fast, I will concede. Also, I cracked my screen, which prevents me from using the multitouch, but other than that it still works well.

Anyway, linux isn't officially supported on this device, which boots via EFI, but following this guide worked on the first try, though I had to use the audio instructions from here. I installed Ubuntu 17.04 x86_64.

I did all of the workarounds listed, and everything seemed to be working well (lack of suspend/hibernate is an obvious shortcoming, but it booted pretty fast), until the random filesystem errors started happening. I figured out that the errors were occurring on read, the most obvious way to test would be to run:

debsums -c
which will check the md5sum for the various files installed by various packages. If I did this with the default configuration, I would get random files failing. Interestingly, I could md5sum huge files and get consistent (correct results). Strange. So I decided to dig through the kernel driver source, for the first time in many many years.

Workaround 1: boot with:
sdhci.debug_quirks=96
This disables DMA/ADMA transfers, forcing all transfers to use PIO. This solved the problem completely, but lowered the transfer rates down to about (a very painful) 5MB/sec. This allowed me to (slowly) compile kernels for testing (which, using the stock ubuntu kernel configuration, meant a few hours to compile the kernel and the tons and tons of drivers used by it, ouch. Also I forgot to turn off debug symbols so it was extra slow).

I tried a lot of things, disabling various features, getting little bits of progress, but what finally ended up fixing it was totally simple. I'm not sure if it's the correct fix, but since I've added it I've done hours of testing and haven't had any failures, so I'm hoping it's good enough. Workaround 2 (I was testing with 4.11.0):
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2665,6 +2665,7 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
 				 */
 				host->data_early = 1;
 			} else {
+				mdelay(1); // TODO if (host->quirks2 & SDHCI_QUIRK2_SLEEP_AFTER_DMA)
 				sdhci_finish_data(host);
 			}
 		}
Delaying 1ms after each DMA transfer isn't ideal, but typically these transfers are 64k-256k, so it shouldn't cause too many performance issues (changing it to usleep(500) might be worth trying too, but I've recompiled kernel modules and regenerated initrd and rebooted way way too many times these last few days). I still get reads of over 50MB/sec which is fine for my uses.

To be properly added it would need some logic in sdhci-acpi.c to detect the exact chipset/version -- 80860F14:01, not sure how to more-uniquely identify it -- and a new SDHCI_QUIRK2_SLEEP_AFTER_DMA flag in sdhci.h). I'm not sure this is really worth including in the kernel (or indeed if it is even applicable to other T100TAs out there), but if you're finding your disk corrupting on a Bay Trail SDHCI/MMC device, it might help!

6 Comments


February 20, 2017
monoprint



Comment...


February 20, 2017
monoprint



1 Comment


June 2, 2016
drink n draw gouache


Edit: updated April 9 2018 with less blur, original image:



Comment...


November 11, 2015
monotype prints



Comment...


November 11, 2015
monotype prints



Comment...


October 22, 2015
drink 'n monotype print

retroactively posted Nov 2015

1 Comment


October 22, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 22, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 22, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 14, 2015
an album from this summer

Here, here's a collection of tracks I recently compiled into an album. It has some instrumentals, then some loop-based tracks at the end that have weird vocals on them. Lather, Rinse, and Repeat:

(all CC-BY licensed)

(retroactively posted Nov 2015)



1 Comment


October 13, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 13, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 13, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 13, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 13, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 13, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 7, 2015
drink 'n monotype print

retroactively posted Nov 2015

1 Comment


October 7, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 7, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


October 7, 2015
drink 'n monotype print

retroactively posted Nov 2015

Comment...


June 17, 2015
drink 'n monotype print

(retroactively posted Nov 2015)

Comment...


June 17, 2015
drink 'n monotype print

(retroactively posted Nov 2015)

Comment...


June 17, 2015
drink 'n monotype print

(retroactively posted Nov 2015)

Comment...


June 17, 2015
drink 'n monotype print

(retroactively posted Nov 2015)

Comment...


October 28, 2014
my own private can of worms

First, from a recent 'git log' command:

    commit f94d5a07541a672b4446248409568c20bca9487d
    Author: Justin <justin@localhost>
    Date:   Sun Sep 11 21:52:27 2005 +0000
    
        Vss2Git
    
    diff --git a/jmde/mediaitem.h b/jmde/mediaitem.h*
    new file mode 100644
    index 0000000..52b8a8f
    --- /dev/null
    ++ b/jmde/mediaitem.h
    @@ -0,0 +1,37 @@
    #ifndef _MEDIAITEM_H_
    #define _MEDIAITEM_H_
    
    #include "pcmsrc.h"
    #include "../WDL/string.h"
    
    class MediaItem 
    {
    public:
      double m_position;
      double m_length;
    
      double m_startoffs;
      double m_fade_in_len, m_fade_out_len;
      int m_fade_in_shape, m_fade_out_shape;
    
      double m_volume, m_pan;
    
      WDL_String m_name;
    
      PCM_source *m_src;
    };
    
    class AudioChannel
    {
      WDL_PtrList<MediaItem> m_items;
      double m_volume, m_pan;
      bool m_mute, m_solo;
      WDL_String m_name;
      // recording source stuff, too
      // effect processor list
    
      // getsamples type interface
    };
    
    
    #endif
    
    * Trivia: guess what jmde (JMDE) stands for?
..and to think, back when we used VSS we didn't even have commit messages! Soon after, "AudioChannel" became instantiable and went on to be known as "MediaTrack", and as one would hope many other things ended up changing.

Wow, 9 years have gone by.

I've been having a blast this week working on something that let me make this:

The interesting bit of this is not the contents of the video itself -- 3 hasty first-takes with drums, bass, and guitar, each with 2 cameras (a Canon 6D and a Contour Roam 2) -- but how it was put together.

I've spent much of the last week experimenting with improving the video features of REAPER, specifically adding support for fades and video processing. This is a ridiculously large can of worms to open, so I'm keeping it mostly contained in my office and studio.

Working on video features is reminding me of when I was first starting work on what would become REAPER: I was focused on doing things that I could use then and there for things I wanted to make. It is incredibly satisfying to work this way. So now, I'm doing it in a branch (thank you git), as it is useful for me, but so incredibly far from the usability standard that REAPER represents now (even if you argue that REAPER is poorly designed, it's still 100x better than what I've done this week). You can't go put half-baked, poor performing, completely-programmer-oriented video features into a 9 year old program.

Here is a .gif showing how the video filters work -- the syntax has since been simplified a bit, but basically you have meta-video items which can combine other video items on the fly. So you can write new transitions or customize existing transitions while you work (which is something I love about JSFX).

I'm going to keep working on this, it might get there someday. Former Vegas fans, fear not, REAPER isn't going to become a video editor. I'm just going for a taste...

6 Comments


December 14, 2013
a month later, midi2osc becomes OSCII-bot

midi2osc, as mentioned in the last post, got some updates which made its name obsolete, particularly the ability to send MIDI and receive OSC, so it has now been renamed OSCII-bot. Other mildly interesting updates:

  • OSX version
  • Can load multiple scripts, which run independently but can share hardware
  • Better string syntax (normal quotes rather than silly {} etc), user strings identified by values 0..1023
  • Better string manipulation APIs (sprintf(), strcpy(), match(), etc).
  • match() and oscmatch(), which can be used for simple regular expressions with the ability to extract values
  • Ability to detect stale devices and reopen them
  • Scripts can output text to the newly resizeable console, including basic terminal emualtion (\r, and \33[2J for clear)
  • Vastly improved icon
I'll probably get around to putting it on cockos.com soon enough, but for now a new build is here. Read the readme.txt before using for instructions.

The thing I'm most excited about, in this, is the creation of eel_strings.h, which is a framework for extending EEL2 (the scripting engine that powers JSFX, for one) to add string support. Adding support for strings to JSFX will be pretty straightforward, so we'll likely be doing that in the next few weeks. Fun stuff. Very few things are as satisfying as making fun programming languages to use...

8 Comments


February 28, 2012
twitter

As a bit of an experiment, and after having set up a Twitter feed for Cockos, I'm probably going to start posting more random things (that I wouldn't bother updating this blog for) to twitter.com/lejustinfrankel... All that I have so far is a link to a mp3 I made today. Maybe I'll complain about [insert random API here] from time to time, too. The big meaty stuff will go here, still, though. For example, a discussion I've had with a friend:

Someone really needs to make an open system (think web, or email) for social (or anti-social) content publishing. Imagine a world where all of the content of each user on Facebook can be hosted and delivered by the provider of your choice (or yourself), and where the privacy controls and failures are not controlled by one monolithic company.. *cough* hurry up people *cough*.. The hard part, of course, would be getting such a thing to the size where it is useful, but there should be enough people out there interested. Speaking of which, this Onion video is absolutely brilliant:





9 Comments


December 23, 2011
Big Ideas

I have occasionally found myself in conversation, often in the presence of alcohol, about the ownership and value ideas. This post will attempt to document my current state of mind in these matters.

We routinely say "I have an idea", but I assert that nobody can own an idea. The closest one can come to owning an idea is to have private (possibly exclusive) possession of it. Sitting on an idea (or indeed implementing it and using it privately) could prevent others from implementing the idea, but it also would not prevent them. What is interesting about this, too, is that one would have no way of knowing if they had exclusive possession of the idea, since others could also possess it privately.

I've often heard things such as: "If I have an idea for something great, I should be able to benefit from it." I don't think it is that simple, nor do I think it should be. I like to imagine it from the perspective of conservation of energy. In my opinion, "having an idea" doesn't cost anything -- there's no work done, no trial and error, no refinement, no experimentation, it's purely the creation of an abstract concept. All of the work, all of the energy required to develop the idea into something real, that happens after having an idea. All of the work of implementing (or at least designing an implementation or possible implementation) is the where the value is created, and that is from what a person should be able to derive benefit.

If you suppose for a moment, that someone could have some sort of exclusive right over an idea, what would that actually mean? Could they prevent other people from doing anything that could be conceivably based on that idea? Could they demand a share of any derived revenue, or control? Could they demand credit? For how long? Ugh, chaos follows. The world would grind to a halt due to this complexity. The advantage you get for having an original (or at least somewhat original) idea is a slight head start.

An idea is something that one can benefit from, but that the rest of society also has the same opportunity for benefit. This actually makes me quite happy.

What does one do if they have an idea and want to make it into something real, but have no applicable skills? Hire people. No money? Make non-disclosure agreements or other contracts which will help protect what other people do with the information you given to them, and prevent them from doing other things that could possibly relate to the idea. This is a joke, though, few talented developers will agree to these sort of terms. Both sides need to have something of value to offer, and ideas are not value held by either side, because they are not able to be owned.

A friend brought the subject of Facebook up after seeing The Social Network.

  1. Facebook became huge because of how it was made and marketed.
  2. The idea for Facebook wasn't a new, nor original, idea.
  3. Even if it was some brand new idea, it doesn't matter, since nobody can own the idea.

TL;DR: Ideas are worth a lot to society, but not much to individuals. Execution is the opposite.

Finally, some advice for anybody who wants to make things and profit from them: figure out something you can contribute; ideas aren't enough. If you're content to just contribute to society: publish your ideas, let people use them, and hope for the best.

(also, a related post that I previously linked to and agreed with, but the notion that the worth of ideas differs for society as a whole vs the "owner" is new for me)

7 Comments


April 26, 2011
yet another tame impala bootleg



4 Comments


April 19, 2011
tame impala

I love these guys, I can't wait until next week for their show. Anyway some of their (old?) demos/unreleased tracks have shown up on youtube, and are really wonderful. Such low quality and such good result. Here's a little playlist of some of them I put together:


Also, I would highly recommend their album "Innerspeaker", as well as the EP that has the song "half full glass of wine" on it. Both of those are outstanding.

4 Comments


April 12, 2011
power consumption

I wonder what the total number of kW hours required to say, run the Apollo 11 mission. One factor would be in the fuel required, but I also mean in running the whole operation, manufacturering components, running control rooms, processing fuel, moving the rockets around, etc etc.

Which brings me to the fact that I just got a "Kill-A-Watt", after reading this blog post. I haven't tested everything yet (nor will I ever hah), but here are the results for the things I have:

  • iPhone charger: 0.0W when no iPhone connected, 6W when charging (the classic "you should unplug wall warts when not in use" thing doesn't necessarily apply!)
  • ReadyNAS NV (old sparc model, 3 WD and 1 Seagate 1TB disks): 50W
  • Samsung 24" LCD: 45W, or 0W when in powersave mode
  • Q6600 2.4ghz computer with single 7200rpm disk, GeForce 8600 GT, UAD-1 PCI-E card, idle: 115W, full load (with UAD-1 going): 185W.
  • Sony VPC-Z12 laptop (dual core i7, SSD, 13" 1920x1080 screen, full brightness): 17W when idle in "speed" mode. 35W when idle and charging battery, 77W under full CPU load while charging battery.*
  • Updated: Brother laser printer/scanner/fax: 6W idle
  • Updated: Thinkpad X60 (1.83ghz C2D): idle 23W, 28W with full brightness setting
  • Updated: PS3: 1W off, 100W idle, 120W in RE5.
  • Updated: LG 36" LCD: 0.5W off, 45W on
  • Updated: 24" C2D iMac: 125W idle, screen at full brightness, 146W full load
  • Updated: ZT lunchbox amp: 18W cranked but not playing anything, 23W when playing loud
The biggest thing that struck me is that my laptop, under normal use conditions, is using less power than desktop's monitor ALONE. Wow. I'll test more things soon, I get to reboot once again to remove the Kill-A-Watt from my desktop now.

*I should also mention that this laptop is really wonderful, despite lacking home/end/pgup/pgdown keys, which makes me sad. It weighs only 3LBs, and is fast (i7 dual core, 4 threads, goes up to 3.2ghz or so in singlecore mode automatically), and even has an optical drive built in.

1 Comment


April 9, 2011
a little ditty

Here's a sparse musical improv I made with a friend.

Comment...


December 19, 2010
Joy, from Perl

I've recently started using Perl for text wrangling instead of PHP -- it started after much of my PHP included a lot of preg_replace and preg_match calls, which got me wondering...

There's a certain satisfaction I get from perl that I don't really get from other languages. There's something about the density that makes it quite readable, at least for the author. Here's a script I wrote to automatically add a new build configuration, based on an existing build configuration, with some modifications, to a given .dsp (VC6 project file):

    
    #!/usr/bin/perl
    $sp = "Win32 Release";
    $np = "Win32 Nitpicker";
    $spd="Release";
    $npd="Nitpicker";
    $spdir="/Release/";
    $npdir="/Nitpicker/";
    $libfile = "../../nitpicker/libcmt_nitpick.lib";
    while (<>)
    {
      chomp;
      s/\r$//;
      s/\n$//;
       
    
      print $_ . "\r\n";
      if (/^!ELSEIF .*$sp".*$/ || /^!IF .*$sp".*$/)
      {
        s/^!IF/!ELSEIF/;
        s/$sp/$np/;
        @nc = ($_);
        while (<>)
        {
          chomp;
          s/\r$//;
          s/\n$//;
          if (/^!/)
          {
            my $tmp=$_;
            foreach (@nc)
            {
    	  s/$spd/$npd/g;
    	  s/$spdir/$npdir/g;
    	  if (/^# ADD BASE CPP/)
    	  {
    	    s/\/Z\S *//;
    	    s/\/YX *//;
    	    s/\/FR *//;
    	    s/\/FD *//;
    	    s/$/ \/FR \/FD \/Zi/;
    	  }
              if (/^# ADD CPP/)
    	  {
    	    s/\/Z\S *//;
    	    s/\/M\S *//;
    	    s/\/O\S *//;
    	    s/\/FR *//;
    	    s/\/FD *//;
    	    s/$/ \/FR \/FD \/Zi \/MT \/Ot \/Og \/D "DEBUG_TIGHT_ALLOC"/;
    	  }
    	  if (/^# ADD LINK32/)
    	  {
    	    s/^# ADD LINK32 /# ADD LINK32 $libfile /;
    	    s/\/debug *//;
    	    s/\/out:/\/nodefaultlib:"LIBCMT" \/out:/;
    	    s/$/ \/debug/;
    	  }
    	  if (/^# ADD BASE LINK32/)
    	  {
    	    s/\/debug *//;
    	    s/\/map *//;
    	    s/\/dll /\/dll \/debug /;
    	    s/$/ \/fixed:no/;
    	  }
              print $_ . "\r\n";
            }
            print $tmp;
            last;
          }
          print $_ . "\r\n";
          push(@nc,$_);
        }
      }
      if (/^!MESSAGE.*$sp".*$/ || /^# Name ".*$sp" *$/)
      {
        s/$sp/$np/;
        print $_ . "\r\n";
      }
    }
    
In case anybody is interested, Nitpicker is something we've been working on that is similar to Electric Fence or other memory debuggers, but better suited for our workflow/design/etc. We'll probably GPL it once it matures.

6 Comments


July 13, 2010
Buggy fmod() with Visual C++ 2005/2008 targeting x64

I am posting this in case anybody debugging something needs to find it -- I did find mention of it on some Java related site, but nothing conclusive. This may affect VC2010, too, but I haven't tested it.

While VC 2005/2008 targeting x64 generates SSE code for floating point code, fmod() still uses the x87 FPU, and more importantly it assumes that the divide by 0 exception flag is clear going in (meaning if it is set prior to the call, the call will throw an exception or return #.IND regardless of the input). Apparently they assume that since the compiler won't possibly generate code that would cause the divide by 0 floating point exception flag to be set, then it would safe to assume that flag will always be clear. Or it could be a typo. If you use assembly code, or load a module compiled with another compiler that generates x87 code, this can be a huge problem.

Take this example (hi.cpp):

#include <stdio.h>
#include <math.h>

extern "C" void asmfunc();

int main() {
  asmfunc();
  printf("%f\n",fmod(1.0,2.0));
  return 0;
}

and hihi.asm (compile with nasm -f win64):

SECTION .text

global asmfunc
asmfunc:
  fld1
  fldz
  fdivp
  fstp st0
  ret

Compiling this (cl.exe hi.cpp hihi.obj) and running it does not print 1.0, as it should.

The solution we use is to call 'fclex' after any code that might use the FPU. Or not use fmod(). Or call fclex before fmod() every time. I should note that if you use ICC with VC200x, it doesn't have this problem (it presumably has a faster, correct fmod() implementation).

6 Comments


June 7, 2010
LICEcap!

We've just released a new piece of open source software for Windows, called LICEcap! It allows one to create animated screen captures. I know, there's a lot of software out there that does this already, but none of them are both free and meet my needs, so we made LICEcap.

LICEcap has a nice UI (in that you position/size the window where you want to capture, and can move it around while recording). We support writing to .GIF directly (big thanks/credit/blame to Schwa for getting the palette generation working as well as it does), as well as to a new format called .LCF.

LCF compresses by taking a series of frames, say, 20 frames, and then dividing each frame into slices, approx 128x16px each. Each slice is then compared to the same slice on the previous frame, and (if different) encoded directly after the previous frame. zlib is used to remove redundancy (often slices don't completely change from frame to frame, i.e. scrolls or small updates will compress very well). This is all done in 16bpp, and the end result is quite good compression, and lossless (well, 16bpp lossless) quality. REAPER supports playing back the .LCF files, too. The biggest down side is high memory use during compression/decompression (20 frames of 640x480x16bpp is about 12MB, and for smooth CPU distribution you end up using twice that).

I should mention that the primary reason for us making this tool was the desire to post animated gifs of new features in REAPER with the changelog. Hopefully we'll follow through on that.

On a related note, tomorrow (or soonish), I plan to post my latest additions on how to make OS X applications not perform terribly (new one: avoid avoid AVOID CGBitmapContextCreateImage() like the plague. HOLY CRAP it is bad to use). Apple: please, for the love of God, either make your documentation a Wiki, or hire someone who actually writes (multi-platform) applications with your APIs to write documentation.

9 Comments


January 10, 2010
Today I found this out

(after spending much of the day banging my head against the wall)

#include <stdio.h>
struct test1 {  double b; };
struct test2 { int a; test1 b; };
test2 foo;
int main() 
{
  printf("%d\n",(int)&foo.b.b - (int)&foo);
  return 0;
}
What does this print? On Windows, it prints 8. On OS X (or linux), it prints 4. Which means, if you access foo.b.b a lot, it will be slow. UGH. I guess that's why there's -malign-double for gcc. Now if I can just figure out how to enable that for Xcode...



7 Comments


July 1, 2009
Songage

Another Wiener/Stack enterprise:

The Vacation [4:27] (I've named this without consulting the others)

The last verse is particularly good, IMO, starting about 3:22 in.

Read Dracula last week. Wasn't a huge fan of vampires before reading (Zombies FTW), but really enjoyed it, perhaps since everybody in the book were not terrible vampire fans either..

1 Comment


[ older results... ]



Search comments - Ignore HTML tags
search : rss : recent comments : Copyright © 2020 Justin Frankel