Fender Rumble 100 frequency response curves


This post is by evan from snax


Click here to view on the original site: Original Post




I bought a Fender Rumble 100 bass amplifier and was curious about the frequency response. I couldn’t find anything online so I measured it myself with REW and a UMIK-1.

Below are normal, vintage, and contour settings with all EQ knobs at the center position. The volume was set low and the mic was place a few feet in front of the amp. The amp was a few inches from a wall to the rear, and a foot from a wall to the right.

Fender Rumble 100 Response Curves.png

Presumably the curves change as volume increases, or if it’s positioned away from walls. I wanted to use the amp as a monitor as well as for bass so I stopped measuring after this.

I plan to return it and try a Roland KC-200.

Fender Rumble 100 frequency response curves


This post is by evan from snax


Click here to view on the original site: Original Post




I bought a Fender Rumble 100 bass amplifier and was curious about the frequency response. I couldn’t find anything online so I measured it myself with REW and a UMIK-1.

Below are normal, vintage, and contour settings with all EQ knobs at the center position. The volume was set low and the mic was place a few feet in front of the amp. The amp was a few inches from a wall to the rear, and a foot from a wall to the right.

Fender Rumble 100 Response Curves.png

Presumably the curves change as volume increases, or if it’s positioned away from walls. I wanted to use the amp as a monitor as well as for bass so I stopped measuring after this.

I plan to return it and try a Roland KC-200.

mcable gaming edition review


This post is by evan from snax


Click here to view on the original site: Original Post




I got a Nintendo Switch and was very frustrated with the graphics quality. Aliasing and poor texture filtering abound in Zelda BOTW and Mario Kart 8. I think this is primarily an issue with the games, not a limitation of the Tegra X1 platform, but we need to fix it all the same.

bring in the cables

This led me to purchase a strange device I had wondered about for some time, the Marseilles Networks mCable Gaming Edition. The mCable is a video processor similar to a Darbee, but in a very unusual form factor: a “smart” HDMI cable powered by USB.
mCable_Gaming__46472.1501756796The cable includes an ASIC that applies anti-aliasing at pixel edge boundaries, and slightly modifies the color balance. There may also be some softening filters to reduce posterization.

1080p 60fps sources are post-processed but remain 1080p. The mcable does upscale 60fps sources at resolutions below 1080p to 1080p,

Regular - BOTW - 1
Regular - BOTW - 1 - Zoom
MCable - BOTW - 1
MCable - BOTW - 1 - Zoom.png
Regular - Mario Kart 8 - 2 - 720p
Regular - Mario Kart 8 - 2 - 1080p
MCable - Mario Kart 8 - 2 - 720p
MCable - Mario Kart 8 - 2 - 1080p

Continue reading “mcable gaming edition review”

standalone sinatra jar with jruby


This post is by evan from snax


Click here to view on the original site: Original Post




For Fauna, we needed to migrate the website (a Sinatra app) from Heroku to our own servers in AWS us-west-2. I wanted to get off MRI and bundle it up as a JAR as part of this process.

dad, why

We already deploy the core database as a monolithic JAR, so it made sense to deploy the website as a monolithic JAR as well. This conforms to our constraint-driven development methodology.

We also wanted to avoid having to set up a J2EE webserver to host a single WAR, but rather stick to a self-contained JVM per app. It turned out to be within the realm of straightforward.

the jar

Building a JAR from a Rack app requires three things:

  1. Put your code into /lib so Warbler adds it to the $LOAD_PATH.
  2. Rename your rackup so Warbler can’t find it and builds a JAR instead of a WAR. I put Continue reading “standalone sinatra jar with jruby”

a programmer’s guide to healing RSI


This post is by evan from snax


Click here to view on the original site: Original Post




I am not a doctor. This blog is not intended to substitute for professional medical advice. See your general practitioner to discuss your symptoms and treatment, as well as an orthopedic specialist and a licensed physical therapist if you are able, before making any changes that may impact your health.

I have struggled on two separate occasions with ongoing and debilitating repetitive stress injury in both my hands. For me, healing my RSI required solving a relatively complex interaction of ergonomic, physiological and psychological problems.

My understanding is that this combination of factors is very common, in varying degrees. Maybe you have just one cause. Or maybe two, or maybe three (like me). This makes the process of getting well much more mysterious and stressful than it otherwise would be.

RSI is not a specific injury, but rather a chronic pain syndrome. Once the syndrome is in place, there may no longer be

Continue reading “a programmer’s guide to healing RSI”

hello heroku world


This post is by evan from snax


Click here to view on the original site: Original Post




I’ve been investigating various platform-as-a-service providers, and did some basic benchmarking on Heroku.

I deployed a number of HTTP hello-world apps on the Cedar stack and hammered them via autobench. The results may be interesting to you if you are trying to maximize your hello-world dollar.

setup

Each Heroku dyno is an lxc container with 512MB of ram and an unclear amount of CPU. The JVM parameters were -Xmx384m -Xss512k -XX:+UseCompressedOops -server -d64.

The driver machine was an EC2 m1.large in us-east-1a, running the default 64-bit Amazon Linux AMI. A single httperf process could successfully generate up to 25,000 rps with the given configuration. Timeouts were set high enough to allow any intermediate queues to stay flooded.

throughput results

In the below graphs, the response rate is the solid line ━━ and the left y axis; connection errors as a percentage are the dashed line ---- and the

Continue reading “hello heroku world”

ideal hdtv settings for xbox 360


This post is by evan from snax


Click here to view on the original site: Original Post




My XBox 360 broke, and since my new one supported HDMI, I reworked the connection to the TV (a Samsung PN50A450 plasma). It’s tricky to get the best performance out of the combination so I wanted to mention it here.

scalers

Even though the HDMI connection is digital, both the XBox and the TV have hardware scalers that degrade the signal. The conversion chain works like this:

Game resolution (for Battlefield 3, 704p) → XBox HD resolution (for standard HD, 720p) → TV native resolution (for this Samsung, 768p)

Remember the XBox is essentially a Windows PC and games can choose whatever resolution they please. Now, in a normal PC, the resolution requested by the game would be transmitted directly to the monitor, and the monitor’s scaler would scale it. If the game chooses the monitor’s native resolution then there is no scaling.

Also remember that a 720p-labeled TV

Continue reading “ideal hdtv settings for xbox 360”

memcached gem performance across VMs


This post is by evan from snax


Click here to view on the original site: Original Post




Thanks to Evan Phoenix, memcached.gem 1.3.2 is compatible with Rubinius again. I have added Rubinius to the release QA, so it will stay this way. 

The master branch is compatible with JRuby, but a JRuby segfault (as well as a mkmf bug) prevents it from working for most people.

vm comparison

Memcached.gem makes an unusual benchmark case for VMs. The gem is highly optimized in general, and specially optimized for MRI. This means it will tend to not reward speedups of “dumb” aspects of MRI because it doesn’t exercise them—contrary to many micro-benchmarks.

                                          user     system      total        real
JRuby-head
set: libm:ascii                       2.440000   1.760000   4.200000 (  8.284000)
get: libm:ascii                       [SEGFAULT]

RBX-head
set: libm:ascii                       1.387198   1.590912   2.978110 (  6.576674)
get: libm:ascii                       2.076829   1.705302   3.782131 (  7.237497)

REE 1.8.7-2011.03
set: libm:ascii                       1.130000   1. Continue reading "memcached gem performance across VMs"

simplicity


This post is by evan from snax


Click here to view on the original site: Original Post




Maximizing simplicity is the only guaranteed way to minimize software maintenance. Other techniques exist, but are situational. No complex system will be cheaper to maintain than a simple one that meets the same goals.

‘Simple’, pedantically, means ‘not composed of parts’. However! Whatever system you are working on may already be a part of a whole. Your output should reduce the number and size of parts over all, not just in your own project domain.

Electra at the Tomb of Agamemnon, Frederic Leighton

I’ve started asking myself, “does this add the least amount of new code?” A system in isolation may be quite simple, but if it duplicates existing functionality, it has increased complexity. The ideal change is subtractive, reducing the total amount of code: by collapsing features together, removing configuration, or merging overlapping components.

Better to put your configuration in version control you already understand, than introduce a Continue reading “simplicity”

performance engineering at twitter


This post is by evan from snax


Click here to view on the original site: Original Post




A few weeks ago I gave a performance engineering talk at QCon Beijing/Tokyo. The abstract and slides are below.

abstract

Twitter has undergone exponential growth with very limited staff, hardware, and time. This talk discusses principles by which the wise performance engineer can make dramatic improvements in a constrained environment. Of course, these apply to any systems architect who wants to do more with less. Principles will be illustrated with concrete examples of successes and lessons learned from Twitter’s development and operations history.

slides

Performance Engineering at Twitter on Prezi

This is the first time I’ve used Prezi; the non-linear flow is compelling.

see it again sam

I will be giving the same talk this fall at QCon São Paulo and QCon San Francisco, so you can catch it there, and I think eventually the video will be online. This was also my first time speaking publicly in two years. Tons of new things to share with the world!

distributed systems primer, updated


This post is by evan from snax


Click here to view on the original site: Original Post




Well, it’s been a long time. But! I have five papers to add to my original distributed systems primer:

coordination

CRDTs: Consistency Without Concurrency Control, Mihai Letia, Nuno Preguiça, and Marc Shapiro, 2009.

Guaranteeing eventual consistency by constraining your data structure, rather than adding heavyweight distributed algorithms. FlockDB works this way.

partitioning

The Little Engines That Could: Scaling Online Social Networks, Josep M. Pujol, Vijay Erramilli, Georgos Siganos, Xiaoyuan Yang Nikos Laoutaris, Parminder Chhabra, and Pablo Rodriguez, 2010.

Optimally partitioning overlapping graphs through lazy replication. Think of applying this technique at a cluster level, not just a server level.

Feeding Frenzy: Selectively Materializing Users’ Event Feeds, Adam Silberstein, Jeff Terrace, Brian F. Cooper, and Raghu Ramakrishnan, 2010.

Judicious session management and application of domain knowledge allow for optimal high-velocity mailbox updates in a memory grid. Twitter’s timeline system works this way.

systems integration

Dapper, a Large-Scale Continue reading “distributed systems primer, updated”

object allocations on the web


This post is by evan from snax


Click here to view on the original site: Original Post




How many objects does a Rails request allocate? Here are Twitter’s numbers:

  • API: 22,700 objects per request
  • Website: 67,500 objects per request
  • Daemons: 27,900 objects per action

I want them to be lower. Overall, we burn 20% of our front-end CPU on garbage collection, which seems high. Each process handles ~29,000 requests before getting killed by the memory limit, and the GC is triggered about every 30 requests.

In memory-managed languages, you pay a performance penalty at object allocation time and also at collection time. Since Ruby lacks a generational GC (although there are patches available), the collection penalty is linear with the number of objects on the heap.

a note about structs and immediates

In Ruby 1.8, Struct instances use fewer bytes and allocate less objects than Hash and friends. This can be an optimization opportunity in circumstances where the Struct class is reusable.

A Continue reading “object allocations on the web”