| CARVIEW |
Select Language
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 18 Jan 2026 07:09:56 GMT
Content-Type: text/xml; charset=utf-8
Content-Length: 19971
Connection: keep-alive
Keep-Alive: timeout=50
Referrer-Policy: no-referrer-when-downgrade
X-AWS-Id: kr-bulkws01
X-LJ-Flow-ID: aWx8lNkLm1Ny8tYjU4nO7QAAAAo
Cache-Control: private, proxy-revalidate
Content-Encoding: gzip
Content-MD5: sI2J2fWYC9IfFa5iOntIEQ
Vary: Accept-Encoding,ETag
Content-Security-Policy: default-src 'self' *.livejournal.com *.livejournal.net *.dsp-rambler.ru *.google.com google.com *.rambler-co.ru rambler-co.ru *.rambler.ru rambler.ru *.tiktok.com tiktok.com *.youtube.com youtube.com; script-src 'self' *.livejournal.com *.livejournal.net *.24smi.net *.adfox.ru *.adlooxtracking.com adlooxtracking.com *.adlooxtracking.ru adlooxtracking.ru ad.mail.ru api.giphy.com bs.serving-sys.ru cdn.ampproject.org cdn.jsdelivr.net cdnjs.smi2.ru *.cdn-vk.ru content.adriver.ru *.criteo.com *.criteo.net *.doubleclick.net *.dropbox.com dsp-rambler.ru *.dsp-rambler.ru embed.bsky.app *.exelator.com *.facebook.com *.facebook.net gist.github.com googleads.g.doubleclick.net *.google-analytics.com *.googleapis.com *.google.com google.com *.google.ru *.googlesyndication.com *.googletagmanager.com googletagmanager.com *.googletagservices.com *.gstatic.com id.sber.ru *.instagram.com js.mamydirect.com *.lj.ru mc.yandex.com mc.yandex.ru *.newrelic.com *.nr-data.net *.ok.ru openstat.net pingback.giphy.com *.pingdom.com *.pingdom.net *.pinterest.com *.plista.com privacy-cs.mail.ru *.rambler-co.ru rambler-co.ru *.rambler.ru rambler.ru rb.infox.sg r.mradx.net *.rnet.plus *.rubiconproject.com r.webturn.ru *.scorecardresearch.com sdk.canva.com *.services.livejournal.com smi2.ru ssl.p.jwpcdn.com static.smi2cdn.ru static.smi2.net static.xx.fbcdn.net stat.media telegram.org tiktokcdn-us.com *.tiktok.com tiktok.com tns-counter.ru *.top100.ru top-fwz1.mail.ru tpc.googlesyndication.com *.ttwstatic.com twemoji.maxcdn.com *.twimg.com *.twitter.com *.videos.livejournal.com vk.com *.vk.com vk.ru *.vk.ru *.weborama.fm weborama.fm *.weborama.fr weborama.fr *.weborama.ru weborama.ru *.weborama-tech.ru weborama-tech.ru *.webturn.ru *.webvisor.org *.yahooapis.com *.yandex.ru yandex.ru yastatic.net ymetrica.com *.youtube.com youtube.com z.moatads.com 'unsafe-inline' 'unsafe-eval'; style-src http: https: data: 'unsafe-inline'; img-src blob: http: https: data:; frame-src http: https:; font-src http: https: data:; connect-src 'self' *.livejournal.com *.livejournal.net ad.adriver.ru ad.mail.ru *.ad-tech.ru api.giphy.com bs.serving-sys.ru cdn.ampproject.org *.criteo.com csi.gstatic.com data00.adlooxtracking.com dsp-rambler.ru *.dsp-rambler.ru *.eaglecdn.com event.top100.su export-download.canva.com ext.clickstream.sberbank.ru sdk.canva.com *.g.doubleclick.net googleads.g.doubleclick.net *.google-analytics.com *.googleapis.com *.google.com google.com *.googletagmanager.com googletagmanager.com graph.facebook.com gstatic.com id.sber.ru *.lj.ru lj.stat.eagleplatform.com mc.yandex.by mc.yandex.com mc.yandex.md mc.yandex.ru pingback.giphy.com *.pingdom.net privacy-cs.mail.ru *.rambler-co.ru rambler-co.ru *.rambler.ru rambler.ru rb.infox.sg *.rnet.plus *.services.livejournal.com *.ssp.rambler.ru ssp.rambler.ru static-mon.yandex.net static.xx.fbcdn.net stat.media stats.g.doubleclick.net smi2.net smi2.ru sve.online.sberbank.ru *.tiktok.com tiktok.com top-fwz1.mail.ru *.twitter.com *.webturn.ru *.webvisor.org wss://mc.yandex.ru wss://www.livejournal.com yandexmetrica.com yandexmetrica.com:29010 yandexmetrica.com:30103 *.yandex.net *.yandex.ru yandex.ru yastatic.net ymetrica1.com ymetrica.com *.youtube.com youtube.com; report-uri https://www.livejournal.com/csp_reports; report-to livejournal; media-src http: https: blob: data: storage.mds.yandex.net; frame-ancestors 'self'; worker-src 'self' blob:; object-src 'self' blob: *.livejournal.net youtube.com *.youtube.com; child-src 'self' blob:;
Reporting-Endpoints: livejournal="https://www.livejournal.com/csp_reports"
Last-Modified: Sun, 18 Feb 2018 20:39:50 GMT
X-Varnish: 169378379 139278124
Age: 2735
X-VWS-Id: kr-varn04-new.lj.rambler.tech
ETag: GgZzsI2J2fWYC9IfFa5iOntIEQ
Accept-Ranges: bytes
X-SplitTest: none
Permissions-Policy: browsing-topics=()
Set-Cookie: luid=URNKAWlsh0RWR+NSEg9MAgB=; expires=Thu, 31-Dec-37 23:55:55 GMT; domain=.livejournal.com; path=/; secure; samesite=none
P3P: CP="NON DSP NID ADMa DEVa TAIa PSAa PSDa OUR IND UNI COM NAV"
Kevin Reid's blog
https://kpreid.livejournal.com/
Kevin Reid's blog - LiveJournal.com
Sun, 18 Feb 2018 20:39:50 GMT
LiveJournal / LiveJournal.com
kpreid
3537103
personal
https://l-userpic.livejournal.com/114705443/3537103
Kevin Reid's blog
https://kpreid.livejournal.com/
100
100
-
https://kpreid.livejournal.com/53115.html
Sun, 18 Feb 2018 20:39:50 GMT
Blog moved
kpreid
https://kpreid.livejournal.com/53115.html
Moving to <a target='_blank' href='https://kpreid.dreamwidth.org/' rel='nofollow'>https://kpreid.dreamwidth.org/</a><br /><br />(In the event that you are looking at this post in a distant future where both are abandoned, check <a href="https://switchb.org/kpreid/" target="_blank" rel="nofollow">my web site</a> for the freshest link.)
https://kpreid.livejournal.com/53115.html?view=comments#comments
public
0
-
https://kpreid.livejournal.com/52797.html
Mon, 28 Mar 2016 02:17:40 GMT
Representing the radio spectrum as spatial audio
kpreid
https://kpreid.livejournal.com/52797.html
<h3>Background</h3>
<p>In software-defined radio, there are well-established ways of <strong>visually</strong> representing the signal(s) in the entire bandwidth available from the hardware; we create a plot where the horizontal axis is frequency (using the Fourier transform to obtain the data). Then either the vertical axis is amplitude (creating an ordinary graph, sometimes called <em>panorama</em>) or the vertical axis is time and color is amplitude (creating a <em>waterfall</em> plot).</p>
<p>Here is an example of <a href="https://github.com/kpreid/shinysdr/" target="_blank" rel="nofollow">ShinySDR</a>'s spectrum display which includes both types (y=amplitude above and y=time below):</p>
<p style="text-align: center;"><img src="https://imgprx.livejournal.net/bcff02d5a8a1ee03692f8673be85f415de8c5a02169b3d6873c07400b7c2f5a7/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h0zFmLU7FbjZ7c4R-bntG3DUMiTxUnTxs-pVJUiDTfb05XGx0fjR0461QahjnfNu7D8A:eZTdxT_0flHFLHh-50sssQ" style="max-width: 100%;" fetchpriority="high"></p>
<p>A further refinement is to display in the graph not just the most recent data but average or overlay many. In the above image, the blue fill color in the upper section is an overlay (both color and height correspond to amplitude), the green line is the average, and the red line is the peak amplitude over the same time interval.
<p><strong>We can <em>see</em> signals across an immensely wide spectrum (subject to hardware limitations), but is there a way to <em>hear</em> them meaningfully? Yes, there is, with caveats.</strong></p>
<p>What's pictured above is a small portion of the band assigned to aviation use — they are used primarily for communication between aircraft in flight and air traffic control ground stations. The most significant thing about these communications is that there are a <em>lot</em> of different frequencies for different purposes, so if you're trying to hear “what's in the area”, you have to monitor all of them.</p>
<p>The conventional solution to this problem is a <em>scanner</em>, which is a radio receiver programmed to rapidly step through a range of frequencies and stop if a signal is detected. Scanners have disadvantages: they will miss the beginning of a signal, and they require a threshold set to trade off between missing weak signals and false-triggering on noise.
<p>An alternative, specific to AM modulation (which is used by aircraft), is to make a receiver with very poor <em>selectivity</em>: the ability to receive only a specific channel and ignore other signals. (Historically, when RF electronic design was less well understood and components had worse characteristics, selectivity was a specification one would care about, but only if one lived in an area with closely-spaced radio stations — today, every receiver has good selectivity.)</p>
<p>I'm going to explain how to build an unselective receiver in software, and then refine this to create <em>spatial audio</em> — that is, the frequency of the signal shall correspond to the stereo panning of the output audio. This is the analogue of the spectrum display in audio.
<p>Of course, this is an AM receiver and so it will only make intelligible sound for amplitude-modulated signals. However, many signals will produce <em>some</em> sound in an AM receiver. The exception is that a clean frequency-modulated (FM) or phase-modulated signal will produce silence, because its amplitude is theoretically constant, but this silence is still audibly distinct from background noise (if the signal is intermittent), and transmitted signals often do not have perfect constant amplitude.
<h3>Implementation</h3>
<p>A normal software AM demodulator has a structure like the following block diagram (some irrelevant details omitted). The RF signal is low-pass filtered to select the desired signal, then demodulated by taking the magnitude (which produces an audio signal with a DC offset corresponding to the carrier).
<p style="text-align: center;"><img src="https://imgprx.livejournal.net/5e23aef5522d59e14497ffb09cdf104a5ae6435e6223de9b5bf50f810d586320/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h0zFmLU7FbjZ7c4R-bntG3DUMiTxUnTxs-pVJUiDTfb05XGx0IlBk87UcC2jnfNu7D8A:gsk_rhRKgTE16ULyDuu8dQ" style="width: 100%; max-width: 50em;" loading="lazy"></p>
<p>In order to produce an unselective receiver, we omit the RF filter step, and therefore also the downsampling — therefore demodulating at the RF sample rate. The resulting real signal must be low-pass filtered and downsampled to produce a usable audio sample rate (and because the high-frequency content is not interesting; see below), so we have now “just” swapped the two main components of the receiver.</p>
<p style="text-align: center;"><img src="https://imgprx.livejournal.net/5dda247124fd9d4c4c975879a158d3accdce30f5370dd85230703c44294b786e/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h0zFmLU7FbjZ7c4R-bntG3DUMiTxUnTxs-pVJUiDTfb05XGx0IlBk87UcC2TnfNu7D8A:ND9-_tKlXUxpt1PzZh0zKA" style="width: 100%; max-width: 50em;" loading="lazy"></p>
<p>This simple change works quite well. Two or more simultaneous AM signals can be received with clear stereo separation.
<p>One interesting outcome is that, unlike the normal AM receiver, <em>the audio noise when there is no signal is quieter</em> (assuming AGC is present before the demodulator block in both cases) — this conveniently means that no squelch function is needed.
<p>The reason for this is obvious-in-hindsight: loosely speaking, most of the noise power will be at RF frequencies and outside of the audio passband. In order to have a strong output signal, the input signal must contain a significant amount of power <em>in a narrow band</em> to serve as the AM carrier and sideband. (I haven't put any math to this theory, so it could be nonsense.)
<h3>Adding stereo</h3>
<p>In order to produce the spatial audio, we want the audio signal amplitude, in a single stereo channel, to vary with frequency. And that is simply <a href="https://dsp.stackexchange.com/questions/28033/what-kind-of-filter-would-have-a-sawtooth-frequency-response" target="_blank" rel="nofollow">a filter with a sawtooth frequency response</a>. The signal path is split for the two stereo channels, with opposite-slope filters. (AGC must be applied before the split.)</p>
<p style="text-align: center;"><img src="https://imgprx.livejournal.net/168f53addc7d87dffe94066a7b14c2a428c53cb65cd6acb98a641246daf53d22/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h0zFmLU7FbjZ7c4R-bntG3DUMiTxUnTxs-pVJUiDTfb05XGx0IlBk87UcC2DnfNu7D8A:WZK-MW8AFpiifVzzvk9J4w" style="width: 100%; max-width: 50em;" loading="lazy"></p>
<p>An undesired effect is that near the band edges, since the filter has a steep but not perfectly sharp transition from full-left to full-right, there is a lot of <em>slope detection</em> (output from frequency-modulated signals) that does not occur anywhere else. Of course, </p>
<p>This design can of course be applied to more than two audio channels; using surround sound would avoid the need for steepness of the filter at the edges and map the inherently circular digitized spectrum to a circular space, so it's worth trying.
<h3>Notes</h3>
<p>I've implemented this in ShinySDR (and it is perhaps the first novel <em>DSP</em> feature I've put in). Just click the “AM unselective” mode button.</p>
<p>Some “directions for future research”:
<p>As I mentioned above, this is useless for listening to FM signals. Is some technique which can do the same for FM? Naïvely creating an “unselective FM receiver” seems like it would be a recipe for horrible noise, because to a FM demodulator, noise looks like a very loud signal (because the apparent frequency is jumping randomly within the band, and frequency maps to amplitude of the output).
<p>If we declare that the output need not be intelligible at all, is there a way to make a receiver that will respond to localized signal power independent of modulation? Can we make an unmodulated carrier act like an AM signal? (CW receivers do this using the <a href="https://en.wikipedia.org/wiki/Beat_frequency_oscillator" target="_blank" rel="nofollow">BFO</a> but that is dependent on input frequency.)
https://kpreid.livejournal.com/52797.html?view=comments#comments
shinysdr
radio
sdr
amateur radio
public
0
-
https://kpreid.livejournal.com/52558.html
Sun, 06 Sep 2015 19:27:35 GMT
The actual base of decibels
kpreid
https://kpreid.livejournal.com/52558.html
<p>The usual definition of the decibel is of course that the dB value <var>y</var> is related to the proportion <var>x</var> by
<p style="font-size: 140%; text-align: center"><var>y</var> = 10 · log<sub>10</sub>(<var>x</var>).
<p>It bothers me a bit that there's two operations in there. After all, if we expect that <var>y</var> can be manipulated as a logarithm is, shouldn't there be simply some log base we can use, since changing log base is also a multiplication (rather, division, but same difference) operation? With a small amount of algebra I found that there is:
<p style="font-size: 140%; text-align: center"><var>y</var> = log<sub>(10<sup>0.1</sup>)</sub>(<var>x</var>).
<p>Of course, this is not all that additionally useful in most cases. If you're using a calculator or a programming language, you usually have log<sub><var>e</var></sub> and maybe log<sub>10</sub>, and 10·log<sub>10</sub> will have less floating-point error than involving the irrational value 10<sup>0.1</sup>. If you're doing things by hand, you either have a table (or memorized approximations) of dB (or log<sub>10</sub>) and are done already, or you have a tedious job which carrying around 10<sup>0.1</sup> is not going to help.
https://kpreid.livejournal.com/52558.html?view=comments#comments
math
sdr
public
0
-
https://kpreid.livejournal.com/52312.html
Wed, 17 Jun 2015 15:22:46 GMT
What I've been working on: ShinySDR
kpreid
https://kpreid.livejournal.com/52312.html
<p>As <a href="https://kpreid.livejournal.com/51890.html" target="_blank">vaguely promised before</a>, another update on what I've been working on for the past couple of years:</p>
<p><strong><a href="https://github.com/kpreid/shinysdr" target="_blank" rel="nofollow">ShinySDR</a></strong> (why yes, <a href="https://kpreid.livejournal.com/51386.html" target="_blank">I am terrible at naming things</a>) is a <a href="https://en.wikipedia.org/wiki/Software-defined_radio" target="_blank" rel="nofollow">software-defined radio</a> receiver application.</p>
<p>Specifically, it is in the same space as <a href="https://gqrx.dk/" target="_blank" rel="nofollow">Gqrx</a>, SDR#, HDSDR, etc.: a program which runs on your computer (as opposed to embedded in a standalone radio) and uses a peripheral device (rtl-sdr, HackRF, USRP, etc.) for the RF interface. Given such a device, it can be used to listen to or otherwise decode a variety of radio transmissions (including the AM and FM broadcast bands everyone knows, but also shortwave, amateur radio, two-way radios, certain kinds of telemetry including aircraft positions, and more as I get around to it).</p>
<p>ShinySDR is basically my “I want my own one of these” project (the UI still shows signs of “I’ll just do what Gqrx did for now”), but it does have some unique features. I'll just quote myself from the README:</p>
<blockquote>
<p>I (Kevin Reid) created ShinySDR out of dissatisfaction with the user interface of other SDR applications that were available to me. The overall goal is to make, not necessarily the most capable or efficient SDR application, but rather one which is, shall we say, <em>not clunky</em>.</p>
<p>Here’s some reasons for you to use ShinySDR:</p>
<ul>
<li><p><strong>Remote operation via browser-based UI:</strong> The receiver can be listened to and remotely controlled over a LAN or the Internet, as well as from the same machine the actual hardware is connected to. Required network bandwidth: 3 Mb/s to 8 Mb/s, depending on settings.</p>
<p>Phone/tablet compatible (though not pretty yet). Internet access is not required for local or LAN operation.</p></li>
<li><p><strong>Persistent waterfall display</strong>: You can zoom, pan, and retune without losing any of the displayed history, whereas many other programs will discard anything which is temporarily offscreen, or the whole thing if the window is resized. If you zoom in to get a look at one signal, you can zoom out again.</p></li>
<li><p><strong>Frequency database</strong>: Jump to favorite stations; catalog signals you hear; import published tables of band, channel, and station info; take notes. (Note: Saving changes to disk is not yet well-tested.)</p></li>
<li><p><strong>Map</strong>: Plot station locations from the frequency database, position data from APRS and ADS-B, and mark your own location on the map. (Caveat: No basemap, i.e. streets and borders, is currently present.)</p></li>
</ul>
<p>Supported modes:</p>
<ul>
<li>Audio: AM, FM, WFM, SSB, CW.</li>
<li>Other: APRS, Mode S/ADS-B, VOR.</li>
</ul>
<p>If you’re a developer, here’s why you should consider working on ShinySDR (or: here’s why I wrote my own rather than contributing to another application):</p>
<ul>
<li><p><strong>All server code is Python</strong>, and has <strong>no mandatory build or install step</strong>.</p></li>
<li><p><strong>Plugin system</strong> allows adding support for new modes (types of modulation) and hardware devices.</p></li>
<li><p><strong>Demodulators</strong> prototyped in GNU Radio Companion can be turned into plugins with very little additional code. Control UI can be automatically generated or customized and is based on a generic networking layer.</p></li>
</ul>
<p>On the other hand, you may find that the shiny thing is lacking substance: if you’re looking for functional features, we do not have the most modes, the best filters, or the lowest CPU usage. Many features are half-implemented (though I try not to have things that blatantly don’t work). There’s probably lots of code that will make a real DSP expert cringe.</p>
</blockquote>
<p>Now that I've finally written this introduction post, I hope to get around to further posts related to the project.</p>
<p>At the moment, I'm working on adding the ability to transmit (given appropriate hardware), and secondarily improving the frequency database subsystem (particularly to have a useful collection of built-in databases and allow you to pick which ones you want to see).</p>
<p>Side note: ShinySDR may hold the current record for most popular program I've written by myself; at least, it's got 106 stars on GitHub. (Speaking of which: ShinySDR doesn't have a page anywhere on my own web site. Need to fix that — probably starting with a general <code>topics/radio</code>. Eventually I hope to have a publicly accessible demo instance, but there’s a few things I want to do to make it more multiuser and robust first.)</p>
https://kpreid.livejournal.com/52312.html?view=comments#comments
shinysdr
programs
sdr
amateur radio
public
2
-
https://kpreid.livejournal.com/52068.html
Wed, 21 Jan 2015 04:51:08 GMT
A Visual Introduction to DSP for SDR — now live in your browser!
kpreid
https://kpreid.livejournal.com/52068.html
<p>My interactive presentation on digital signal processing (<a href="https://kpreid.livejournal.com/51890.html" target="_blank">previous post with video</a>) is <strong><a href="https://visual-dsp.switchb.org/" target="_blank" rel="nofollow">now available on the web, at visual-dsp.switchb.org!</a></strong> More details, source code, etc. at the site.</p>
<p>(P.S. I'll also be at <a href="https://www.meetup.com/Cyberspectrum/events/219319947/" target="_blank" rel="nofollow">the next meetup</a>, which is tomorrow, January 21, but I don’t have another talk planned. (Why yes, I did procrastinate getting this site set up until a convenient semi-deadline.))</p>
<p><a href="https://visual-dsp.switchb.org/" target="_blank" rel="nofollow"><img src="https://imgprx.livejournal.net/33df7fc8387796e5c57bee7a5ed4d0a83fd3a811e801d1928bb072104df75eec/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h0yUeRUrNfwtTA41bHgsixC0IkTkhlGQJitVBQmTPNawxRUFMB3wU:2JkDUMpN8EMMnzF2hndv_g" alt="" style="display: block; margin: auto; max-width: 100%;" fetchpriority="high"></a></p>
https://kpreid.livejournal.com/52068.html?view=comments#comments
webgl
web
javascript
web site
3d
video
radio
sdr
public
0
-
https://kpreid.livejournal.com/51890.html
Thu, 20 Nov 2014 18:41:06 GMT
A Visual Introduction to DSP for SDR (video)
kpreid
https://kpreid.livejournal.com/51890.html
<p>I have really failed to get around to blogging what I've been doing lately, which is all <strong>software-defined radio</strong>. Let's start fixing that, in reverse order.
<p><strong>Yesterday,</strong> I went to a <a href="https://www.meetup.com/Cyberspectrum/" target="_blank" rel="nofollow">Bay Area SDR meetup, “Cyberspectrum”</a> organized by <a href="https://twitter.com/spenchdotnet" target="_blank" rel="nofollow">Balint Seeber</a> and gave a presentation of visual representations of digital signals and DSP operations. It was very well received. <a href="https://www.youtube.com/watch?v=DUGr_Z04SKs&t=12m30s" target="_blank" rel="nofollow">This video is a recording of the entire event, with my talk starting at 12:30.</a>
<p style="text-align: center"><lj-embed id="7" /></p>
https://kpreid.livejournal.com/51890.html?view=comments#comments
webgl
web
video
radio
javascript
sdr
3d
public
3
-
https://kpreid.livejournal.com/51492.html
Mon, 13 Oct 2014 17:46:51 GMT
Game idea: “Be Consistent”
kpreid
https://kpreid.livejournal.com/51492.html
<p>Here’s <a href="https://kpreid.livejournal.com/50670.html" target="_blank">another</a> <a href="https://kpreid.livejournal.com/tag/ideas" target="_blank">idea</a> for a video game.</p>
<p>The theme of the game is “be consistent”. It's a minimalist-styled 2D platformer. The core mechanic is that whatever you do the first time, the game makes it so that that was the right action. Examples of how this could work:
<ul>
<li><p>At the start, you're standing at the center of a 2×2 checkerboard of background colors (plus appropriate <a href="https://en.wikipedia.org/wiki/Greeble" target="_blank" rel="nofollow">greebles</a>, not perfect squares). Say the top left and bottom right is darkish and the other quadrants are lightish. If you move left, then the darkish stuff is sky, the lightish stuff is ground, and the level extends to the left. If you move right, the darkish stuff is ground, and the level extends to the right.
<li><p>The first time you need to jump, if you press <kbd>W</kbd> or up then that's the jump key, or if you press the space bar then that's the jump key. The other key does something else. (This might interact poorly with an initial “push all the keys to see what they do”, though.)
<li><o>You meet a floaty pointy thing. If you walk into it, it turns out to be a pickup. If you shoot it or jump on it, it turns out to be an enemy.
<li><p>If you jump in the little pool of water, the game has underwater sections or secrets. If you jump over the little pool, water is deadly.
</ul>
https://kpreid.livejournal.com/51492.html?view=comments#comments
user interface
programming
ideas
games
public
0
-
https://kpreid.livejournal.com/51386.html
Sun, 05 Oct 2014 15:22:05 GMT
Help me name a game keybinding library.
kpreid
https://kpreid.livejournal.com/51386.html
<p><small>(I could say some meta-commentary about how I haven't been blogging much and I've made a resolution to get back to it and it'll be good for me and so on, but I think I've done that too many times already, so let's get right to the actual thing...)</small></p>
<p><img src="https://imgprx.livejournal.net/e7843204a2ef2ff9d2dff52fdafbd199bc85405af1c22207c5e598f0688f0227/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h0zFmLU7FbjZ7c4R-bntG3DUMiTxUnTxk-tVdXmS6TaAZcDhwckx954g:IuW6jnKbYuKCzvE-PUu0yg" style="float: right; max-width: 50%; margin-left: 0.6em;" alt="" fetchpriority="high">When I wrote <a href="https://github.com/kpreid/cubes" target="_blank" rel="nofollow">Cubes</a> (a browser-based “Minecraft-like”), one of the components I built was a facility for key-bindings — that is, allowing the user to choose which keys (or mouse buttons, or gamepad buttons) to assign to which functions (move left, fly up, place block, etc.) and then generically handling calling the right functions when the event occurs.</p>
<p>Now, I want to use that in some other programs. But in order for it to exist as a separate library, <strong>it needs a name.</strong> I have failed to think of any good ones for months. <strong>Suggestions wanted.</strong></p>
<p>Preferably, the name should hint at that it supports the gamepad API as well as keyboard and mouse. It should <em>not</em> end in “.js” because cliche. Also for reference, the other library that arose out of Cubes development I named <a href="https://github.com/kpreid/measviz" target="_blank" rel="nofollow">Measviz</a> (which I chose as a portmanteau and for having almost zero existing usage according to web searches).</p>
<p>(The working draft name is <code>web-input-mapper</code>, which is fairly descriptive but also thoroughly clunky.)</p>
https://kpreid.livejournal.com/51386.html?view=comments#comments
webgl
web
user interface
programming
javascript
cubes
3d
public
4
-
https://kpreid.livejournal.com/50958.html
Tue, 25 Feb 2014 16:23:34 GMT
How to really fix a bug
kpreid
https://kpreid.livejournal.com/50958.html
<p>If you're feeling virtuous:</p>
<ol>
<li>Figure out what's going on.
<li>Figure out why what's going on wasn't immediately obvious.
<li>Make it so that such failures are caught and reported obviously.
<li>Make it so that the rest of the system recovers from such failures.
<li>Write a test for the bug, and a couple more while you're at it.
<li>Write the actual fix.
</ol>
<p>(I ought to do more actual concrete blogging, like what I've been doing lately. This crossed my mind as a light and easy piece — I actually followed part of this procedure yesterday after pushing a version (of what, I'll get to later) that was rather broken.)
https://kpreid.livejournal.com/50958.html?view=comments#comments
public
0
-
https://kpreid.livejournal.com/50726.html
Wed, 24 Jul 2013 03:32:57 GMT
Language design idea: pure name-spaces
kpreid
https://kpreid.livejournal.com/50726.html
<p>One of the nice things about Common Lisp is the pervasive use of (its notion of) symbol objects for names. For those unfamiliar, I'll give a quick introduction to the relevant parts of their semantics before going on to my actual proposal for a “good parts version”.</p>
<p>A CL <dfn>symbol</dfn> is an object (value, if you prefer). A symbol has a name (which is a string). A CL <dfn>package</dfn> is a map from strings to symbols (and the string key is always equal to the symbol's name). A symbol may be in zero or more packages. (Note in particular that symbol names need not be unique except within a single package.)
<p>Everywhere in CL that something is <em>named</em> — a variable, a function, a class, etc. — the name is a symbol object. (This is not impractical because the syntax makes it easy to write symbols; in fact, easier than writing strings, because they are unquoted.)
<p>The significance of this is that <em>the programmer need never give significance to characters within a string name in order to avoid collisions</em>. Namespacing of explicitly written symbols is handled by packages; namespacing of programmatically generated symbols is handled by simply never putting them in any package (thus, they are accessible only by passing references); these are known as <dfn>gensyms</dfn>.
<p>Now, I don't mean to say that CL is perfect; it fails by way of conflating too many different facilities on a single symbol (lexical variables, dynamic variables, global non-lexical definitions, ...), and some of the multiple purposes motivate programmers to use naming conventions. But I think that there is value in the symbol system because it discourages the mistake of providing an interface which requires inventing unique string names.
<p>(One thinking along capability lines might ask — why use <em>names</em> rather than references at all? Narrowly, think about method names (selectors, for the Smalltalk/ObjC fans) and module exports; broadly, distribution and bootstrapping.)
<hr>
<p>So, here’s my current thought on a “good parts version”, specifically designed for an E-style language with deep equality/immutability and no global mutable state.
<p>There is a notion of <dfn>name</dfn>, which includes three concrete types:
<ol>
<li>A <dfn>symbol</dfn> is an object which has a string-valued name, and whose identity depends solely on that string.
<li>A <dfn>gensym</dfn> also has a name, but has an unique identity (<em>selfish</em>, in E terms). Some applications might reject gensyms since they are not data.
<li>A <dfn>space-name</dfn> holds two names and its identity depends solely on that combination. (That is, it is a “pair” or “cons” specifically of names.)
</ol>
<p>Note that these three kinds of objects are all immutable, and use no table structures, and yet can produce the same characteristics of names which I mentioned above. (For implementation, the identity of a name as above defined can be turned into pointer identity using hash consing, a generalization of interning.) Some particular examples and notes:
<ul>
<li>A CL symbol in a package corresponds to a pair of two symbols, or perhaps a gensym and a symbol. This correspondence is not exact, of course. (In particular, there is no notion here of the set of exported symbols in a package. But that's the sort of thing you have to be willing to give up to obtain a system without global mutable state. And you can still imagine 'linting' for unexpected symbols.)
<li>The space-name type means that names can be arbitrary binary trees. If we consistently give the left side a “namespace” interpretation and the right side a “local name” one, then we have a system, I think, where people can carve out all sorts of namespaces without ever fearing collisions or conflicts, should it become necessary. Which probably means it's massively overdesigned (cf. "worse is better").
<li>Actual use case example: Suppose one wishes to define (for arbitrary use) a subtype of some well-known interface, which adds one method. There is a risk that your choice of name for that method conflicts with someone else's different subtype. Under this system, you can construct a space-name whose two components are a large random number (i.e. a unique ID) acting as the namespace, and a symbol which is your chosen simple name. One can imagine syntax and tools which make it easy to forget about the large random number and merely use the simple name.
<li>It's unclear to me how these names would be used inside the lexical variable syntax of a language, if they would at all; I suspect the answer is that they would not be, or mostly confined to machine-generated-code cases. The primary focus here is improving the default characteristics of a straightforwardly written program which uses a map from names to values in some way.
</ul>
<p>(This is all very half-baked — I'm just publishing it on the grounds described in my previous post: in the long run I'll have more ideas than I ever implement, and this is statistically likely to be one of them, so I might as well publish it and hope someone else finds some use for it; if nothing else, I can stop feeling any obligation to <em>remember</em> it in full detail.)
https://kpreid.livejournal.com/50726.html?view=comments#comments
e
programming
ideas
public
2
-
https://kpreid.livejournal.com/50670.html
Mon, 20 May 2013 04:56:02 GMT
Game idea: reverse bullet hell
kpreid
https://kpreid.livejournal.com/50670.html
<p>I have come to realize that I have more ideas for programs than I'll ever have time to write. (This means they're not actually all that significant, on average — see all that's been said on ‘ideas vs. execution’.) But maybe I have the time to scribble a blog post about them, and that's stuff to blog about, if nothing else.
<p>So, a video game idea I had today: reverse bullet-hell shooter.
<p>A regular bullet-hell shooter is a game where you move in a 2D space dodging an immense number of mostly dumb instant-death projectiles launched in mostly predefined patterns, and trying to shoot back with dinkier, but better aimed, weapons. Instead, here you design the bullet pattern so as to trap and kill AI enemies doing the dodging.
<p>The roles seem a bit similar to tower defense, but the space of strategies would be considerably more, ah, bumpy, since you're not doing a little bit of damage at a time and how it plays out depends strongly on the AI's choices.
<p>That's probably the downfall of this idea: either the outcome is basically <a href="https://en.wikipedia.org/wiki/Butterfly_effect" target="_blank" rel="nofollow">butterfly effect</a> random due to enemy AI decisions and you mostly lose, or there are trivial ways to design undodgeable bullet patterns and you mostly win. I don't immediately see how to make the space of inputs and outcomes “smooth” enough.
https://kpreid.livejournal.com/50670.html?view=comments#comments
programming
ideas
games
public
1
-
https://kpreid.livejournal.com/50356.html
Mon, 06 May 2013 14:26:13 GMT
A Portal 2 co-op not-really-a-puzzle
kpreid
https://kpreid.livejournal.com/50356.html
<p style="text-align:center"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=143527824" target="_blank" rel="nofollow">
Death by Turret<br>
<img src="https://imgprx.livejournal.net/83e54388f3d081fc3743fe2ffe1d060f7f2dacaf1431b6956c4d100072de1416/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h03EKNUrYe3Z7A5x3VmNGqH080BUM5HUJ8-VdSn3KGNVQXTApZyk1iqhJa3iWdYL3OtQxz8EYweDa1NrW675EX0E8J5jMiQDk71mrv0zdnfplRWBIdbEDInh9tzQ:8-c56_K9TuUt-3DntQUR0g" alt="" fetchpriority="high"></a></p>
https://kpreid.livejournal.com/50356.html?view=comments#comments
portal
games
public
0
-
https://kpreid.livejournal.com/49950.html
Sat, 20 Apr 2013 23:16:34 GMT
Thoughts on Tron
kpreid
https://kpreid.livejournal.com/49950.html
<p><em>Tron</em> was one of my childhood favorite movies.
<p>Before I watched <em>Tron: Legacy</em>, I reminded myself to not critique it overly harshly compared to the original — after all, there had been the grid bug scene. (Which, if you don’t happen to recall, introduces grid bugs, without any relationship to the rest of the action, which then never appear again.)
<p>Then they had to throw a bunch of philosophical blather in the middle, which I could only think of at the time as “let’s be all profound like <em>The Matrix</em>”.
<p>But, I was just thinking about that, and the closing scene where the <em>very last</em> of the [SPOILER] is going out and about and [SPOILER], and the early scene in <em>Tron</em> in the laser lab (“Not disintegrating — digitizing!”), and:
<p>Imagine an alternate universe (it can’t happen here, they went too long without) where a key scene goes like this:
<blockquote style="font-style: normal;"><b>MENTOR FIGURE:</b> Remember, that which can be digitized, can be <em>copied</em>.</blockquote>
https://kpreid.livejournal.com/49950.html?view=comments#comments
thoughts
fiction
public
0
-
https://kpreid.livejournal.com/49903.html
Sun, 07 Apr 2013 22:46:56 GMT
Update to web resource embedding test page
kpreid
https://kpreid.livejournal.com/49903.html
<p>Yesterday I completely rewrote my <a href="https://switchb.org/kpreid/2007/embedding" target="_blank" rel="nofollow">resource embedding test</a> to cover more cases (especially ones new in HTML5) and be more usable. In the likely event you're not familiar with it, it's a HTML document which embeds many types of resources (images, audio, other HTML, etc.) using all of the possible containers (<code><img></code>, <code><iframe></code>, etc.) to see how browsers react.</p>
<p>The results can be quite interesting; for example, with the current expansion I discovered that JavaScript embedded in a SVG document <em>will not execute</em> if embedded using <code><img></code>, but will with <code><object></code>. (In hindsight, this makes perfect sense given the fundamental design principle of Web security, namely “don't add anything which would obviously make existing sites' security assumptions false”, the assumption here being that it's safe to allow <code><img></code>s as user-generated content.)</p>
<p>Specific new features:</p>
<ul>
<li>Audio, HTML, and plain text content. (Unfortunately, some combinations cause the audio to autoplay; I tried to make it quiet and plain to make up for that.)
<li><code><audio></code> and <code><video></code> containers.
<li>Scripts inside HTML and SVG content, which also attempt to modify <code>window.top</code>.
<li>Fixed-scrolling headers so you don't need a large window to make sense of the large table.
</ul>
<p>Let me know if you've thought of any additional useful cases.</p>
https://kpreid.livejournal.com/49903.html?view=comments#comments
web
web site
public
0
-
https://kpreid.livejournal.com/49597.html
Wed, 27 Mar 2013 00:23:23 GMT
Git workflow fragment: trial merge of branches
kpreid
https://kpreid.livejournal.com/49597.html
<p>Let's say you have two or more independent Git branches, and you want to make sure the combination of them works correctly, but aren't ready to permanently merge or rebase them together. You can do a merge and discard it (either by resetting afterward or using a temporary branch), but that takes extra commands when you're done with the trial. Here's the script I put together to eliminate all unnecessary steps:
<blockquote><pre>#!/bin/sh
set -e
set -x
git checkout --detach HEAD
git merge --no-edit -- "$@"</pre></blockquote>
<p>In a single command, this merges HEAD and any branches given as arguments and leaves you at the merge as a <em>detached HEAD</em>. This means that when you're done with it you can just switch back to your branch (<kbd>git checkout -</kbd> is a shortcut for that) and the merge is forgotten. If you committed changes on top of the merge, <kbd>git checkout</kbd> will tell you about them and you can transplant them to a real branch with <kbd>git cherry-pick</kbd>.
https://kpreid.livejournal.com/49597.html?view=comments#comments
git
programming
public
1
-
https://kpreid.livejournal.com/49179.html
Fri, 22 Feb 2013 05:34:59 GMT
“:”
kpreid
https://kpreid.livejournal.com/49179.html
<p>When Larry Wall was designing Perl 6, he started with lots of community proposals, from which he made the following observation:
<blockquote>I also discovered Larry's First Law of Language Redesign: Everyone wants the colon.</blockquote>
<p>When I was recently trying to redesign E, I found that this holds true <em>even if only one person is involved in the process</em>. One of the solutions considered was having “<code>: </code>” and “<code> :</code>” be two different tokens…</p>
https://kpreid.livejournal.com/49179.html?view=comments#comments
e
thoughts
programming
public
0
-
https://kpreid.livejournal.com/49042.html
Mon, 11 Feb 2013 19:00:24 GMT
Portal 2 puzzles
kpreid
https://kpreid.livejournal.com/49042.html
<p>Here's another thing I've been doing: <a href="https://steamcommunity.com/id/kpreid/myworkshopfiles/?appid=620" target="_blank" rel="nofollow">designing Portal 2 puzzles.</a></p>
<p style="text-align:center"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=68595558" target="_blank" rel="nofollow">
The Cube Goes in the Other Pit<br>
<img src="https://imgprx.livejournal.net/7b54d7a9a2629bff6793bc936a835c6ad837797f6fa547489da949b9860f5450/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h03EKNUrYe3Z7A5x3VmNGqH080BUM5HUJ8-VdSn3KHMVIXSQJby0huqBBc3y-cYbvOzw4A_TJEfTbIRbW9l5IXrE5znEJXMz870m2f10EWeexVUWYaHTXJ6R9tzQ:va8YKTDPagR-WxcEXIeSjw" alt="" fetchpriority="high"></a></p>
<p style="text-align:center"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=125513740" target="_blank" rel="nofollow">
(F)utile Independence<br>
<img src="https://imgprx.livejournal.net/157667e6f5cf7231ad9c53d0efb69229178fdfb365f2c57ce1484e8199993754/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h03EKNUrYdnMTW8hXEmtagGk8iTkR4EwJksUEaxGuKOlUQSANaxEFirRZY2iaZd7yjuA0G90RECUfONbe455UWqj8A5jAhQ0pN0hGZ1zRhfJ0iWBMdZTTU_U0:gbfNEc6uKzcbeekMeIZO-A" alt="" loading="lazy"></a></p>
<p style="text-align:center"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=126384957" target="_blank" rel="nofollow">
Balance, Beam<br>
<img src="https://imgprx.livejournal.net/26b21304583d3401ac58f2af6835616f12ca866857431f56cbf6bc9d3b72ac04/P2WlxyVijxKhim9v8ctQUEMdsf-ah7h03EKNUrYe3Z7A5x3VmNGqH080BUM5HUJ8-VdSn3KHM1McRQVVxUhopxBY2yWeab7Oun5yhklHeUXKRcbIkpIa0D8E60AhQzpPphvk0kUUepFUKWUYbDXMnB9tzQ:lkcwL7ru0OvSkaAS9_ZvDw" alt="" loading="lazy"></a></p>
<p>I’m probably going to keep doing this (as the inspiration strikes) — all feedback welcome!</p>
https://kpreid.livejournal.com/49042.html?view=comments#comments
portal
games
public
0
-
https://kpreid.livejournal.com/48855.html
Mon, 11 Feb 2013 18:51:20 GMT
Status note; web game libraries
kpreid
https://kpreid.livejournal.com/48855.html
<p>I really haven't been posting very much, have I? It's mostly the job occupying most of my “creative energy”, but I've also been doing a little bit of this and that and not ever finishing something to the point of feeling like writing it up.</p>
<p>On the programming-projects front, I'm attempting to extract two reusable libraries from <a href="https://github.com/kpreid/cubes" target="_blank" rel="nofollow">Cubes</a> for the benefit of other web-based games.</p>
<ul>
<li><a href="https://github.com/kpreid/measviz" target="_blank" rel="nofollow">Measviz</a> takes performance-measurement data (frames per second and whatever else you want) and presents (in HTML) a compact widget with graphs; my excuse for not announcing it is that the API needs revision, and I haven't thought of a good toy example to put in the documentation-and-demo page I'm writing, but if you're willing to deal with later upgrades it's ready to use now.</li>
<li>The other library, currently <strong>in need of a good name</strong>, is a generalized keybinding library (generalized in that it also handles gamepads/joysticks, which are completely different). You define the <dfn>commands</dfn> in your application, and it handles feeding events into them. Commands can be polled, or you can receive callbacks on press and release, with optional independent autorepeat. It's currently in need of a name, and also of API cleanup.
</ul>
<p>I've been making some sketches towards a redesign of E (list archive pointer: starting <a href="https://www.eros-os.org/pipermail/e-lang/2012-September/013981.html" target="_blank" rel="nofollow">here</a>), basically to take into account everything we've learned over the years without being constrained by compatibility, but it hasn't gotten very far, partly because language syntax is hard — all options are bad. (The current E syntax is pretty good for usability, but it has some particularly verbose/sea-of-punctuation corner cases, and I'd also like to see a <em>simpler</em> syntax, with more facilities moved into code libraries.)</p>
https://kpreid.livejournal.com/48855.html?view=comments#comments
webgl
programming
javascript
e
programs
life
games
cubes
public
0
-
https://kpreid.livejournal.com/48574.html
Sat, 19 Jan 2013 05:52:14 GMT
This is how things should work:
kpreid
https://kpreid.livejournal.com/48574.html
<code>stdin, stdout, stderr, stdcpu, stdmem, stdfs</code>
https://kpreid.livejournal.com/48574.html?view=comments#comments
thoughts
programming
unix
caps
busy
public
2
-
https://kpreid.livejournal.com/48367.html
Wed, 07 Nov 2012 00:56:57 GMT
How to choose a password optimally
kpreid
https://kpreid.livejournal.com/48367.html
<ol>
<li><p>Premise: Any attack on a password — whether online (login attempts) or offline (hash cracking) — will be designed so that the more likely a given password is, out of the space of all possible passwords, the less work is required to recover that password (unless a trivial amount of work is required to discover any possible password).</li>
<li><p>From (1), there exists a probability distribution of passwords.</li>
<li><p>Premise: There is a (practical) maximum length for passwords.</li>
<li><p>From (3), the set of possible passwords is finite.</li>
<li><p>From (2) and (4), there is a minimum probability in that distribution.</li>
<li><p>Use one of the passwords which has that minimum probability.</li>
</ol>
<p>(There are at least two ways this doesn't work.)</p>
https://kpreid.livejournal.com/48367.html?view=comments#comments
thoughts
programming
security
public
4
-
https://kpreid.livejournal.com/48056.html
Mon, 29 Oct 2012 00:54:31 GMT
Server change
kpreid
https://kpreid.livejournal.com/48056.html
<p>switchb.org web and Subversion services are now running on a different server. Do let me know if you notice something broken.</p>
https://kpreid.livejournal.com/48056.html?view=comments#comments
meta
web site
public
0
-
https://kpreid.livejournal.com/47800.html
Sat, 08 Sep 2012 04:32:31 GMT
GLToyJS now available on the web
kpreid
https://kpreid.livejournal.com/47800.html
<p>My <a href="https://github.com/kpreid/gltoyjs" target="_blank" rel="nofollow">GLToyJS</a> project now has <a href="https://kpreid.github.com/gltoyjs/gltoy.html" target="_blank" rel="nofollow">a live instance</a> so you can play with it without setting up your own server. Caveats: • I don't promise it will remain at this URL or that the parameter format won't change. • There is an automatic 5-minute-interval change to a new random effect which cannot be disabled (but you can undo it by going back). • It doesn't tell you if your browser doesn't have WebGL, it just stops (gray screen).</p>
https://kpreid.livejournal.com/47800.html?view=comments#comments
webgl
web
programs
opengl
3d
public
2
-
https://kpreid.livejournal.com/47403.html
Sat, 08 Sep 2012 04:21:09 GMT
You should play Closure (now out for Mac and Windows)
kpreid
https://kpreid.livejournal.com/47403.html
<p><a href="https://closuregame.com" target="_blank" rel="nofollow">Closure</a> is now available on Mac and Windows <a href="https://store.steampowered.com/app/72000" target="_blank" rel="nofollow">via Steam</a> (previously on PS3). If you like platform puzzle games, or if you like games that play with the nature of the virtual universe, then you need to play this game. Convinced my description is inadequate for a purchase decision? <a href="https://www.newgrounds.com/portal/view/480006" target="_blank" rel="nofollow">Play the free Flash original.</a></p>
<p>I bought it as soon as it came out and while I haven't finished it, I've played through several of the puzzles and it is living up to what I'd hoped it would be. The one thing that bothers me a bit is the loss of the original version's 1-bit aesthetic. (Yes, I said 1-bit, not 8-bit. I'm talking about color depth, not word size.)</p>
https://kpreid.livejournal.com/47403.html?view=comments#comments
games
mac os x
public
0
-
https://kpreid.livejournal.com/47229.html
Fri, 24 Aug 2012 04:49:25 GMT
Software-defined radio
kpreid
https://kpreid.livejournal.com/47229.html
<p>A couple weekends ago, I was musing that among my electronic devices there was no radio — as in AM/FM, not WiFi and Bluetooth and NFC and etc. Of course, radio is not exactly the most generally useful of information or entertainment sources, but it still has some things to be said for it, such as being independent of Internet connections.</p>
<p>Another thing that came to mind was my idle curiosity about <a href="https://en.wikipedia.org/wiki/Software-defined_radio" target="_blank" rel="nofollow">software-defined radio</a>. So, having read that Wikipedia article, it led me to <a href="https://en.wikipedia.org/wiki/List_of_software-defined_radios" target="_blank" rel="nofollow">an article with a neat list of radio hardware</a>, including frequency range, sampling rate (≈ bandwidth) and price. Sort by price, and — $20, eh? Maybe I’ll play around with this.</p>
<p>What that price was for was <em><a href="https://sdr.osmocom.org/trac/wiki/rtl-sdr" target="_blank" rel="nofollow">RTL-SDR</a></em> — not a specific product, but any of several USB digital TV receivers built around the Realtek RTL2832U chip, which happens to have a mode where it sends raw downshifted samples to the host computer — intended to be used to provide FM radio receiving without requiring additional hardware for the task. But there's plenty of room to do other things with it.</p>
<p>I specifically bought the “ezTV”/“ezcap” device, from <a href="https://www.amazon.com/gp/product/B008CCMKAQ/" target="_blank" rel="nofollow">this Amazon listing by seller NooElec</a> (who also sells on eBay, I hear) (note: not actually $20). One of the complications in this story is that different (later?) models of the same device have slightly different hardware which cannot tune as wide a frequency range. (Side note: when buying from Amazon, what you actually get depends on the “seller” you choose, not just the product listing, and as far as I know, any seller can claim to sell any product. If you see a product with mixed “this is a fake!” and “no it's not!” reviews, you're probably seeing different sellers for the same product listing.)</p>
<p>Of course, the point of SDR is to turn hardware problems into software problems — so I then had a software problem. Specifically, my favorite source for unixy software is <a href="https://www.macports.org/" title="The MacPorts Project -- Home" target="_blank" rel="nofollow">MacPorts</a>, but they have an obsolete version of GNU Radio. GNU Radio is a library for building software radios, and it is what is used by the first-thing-to-try recommendation on the Osmocom RTL-SDR page (linked above), <a href="https://www.cgran.org/browser/projects/multimode/trunk" target="_blank" rel="nofollow">multimode.py</a>. The MacPorts version of GNU Radio, 3.3.0, is too old for the RTL-SDR component, which requires 3.5.3 or later. So I ended up building it from source, which took a bit of tinkering. (I'm working on contributing an updated port for MacPorts, however.)</p>
<p>I've had plenty of fun just using it “scanner” style, seeing what I can pick up. A coworker and friend who is into aviation posed a problem — receive and decode <a href="https://en.wikipedia.org/wiki/VHF_omnidirectional_range" title="VHF omnidirectional range - Wikipedia, the free encyclopedia" target="_blank" rel="nofollow">VOR</a> navigation signals — which has led to several evenings of fiddling with GNU Radio Companion, and reading up on digital signal processing while I wait for compiles and test results at work. (It sort-of works!)</p>
<p>This is also notable as the one time in my life where a ferrite bead on a cable actually did something — putting one on the computer end of the USB extension cord noticeably reduced the noise level. (And, of course, there remains a large, metallic hardware problem: antennas!)</p>
<p>(I could say more, such as the detailed fiddling to build GNU Radio, and various useful links, but it's taken me long enough to get around to writing this much. Let me know if you'd like me to expand on any particular technical details.)</p>
https://kpreid.livejournal.com/47229.html?view=comments#comments
audio
programming
electronics
radio
unix
sdr
mac os x
public
0
-
https://kpreid.livejournal.com/46931.html
Sun, 08 Jul 2012 14:15:32 GMT
Status update
kpreid
https://kpreid.livejournal.com/46931.html
<p>Arrived in California a few days ago; setting up assorted arrangements. I start work in a week.</p>
https://kpreid.livejournal.com/46931.html?view=comments#comments
life
google
california
public
0