Work-Life Balance

Everything revolves around it. Whether you know it or not. Even for the people we call workaholics, or lazy. They find balance in their act, whatever us mortals think about them. Everyone is in their "happiness equilibrium", because if this balance breaks, you'll do something about it.

After all, why do you write good code? Why do you make your design solid? Why do you write unit test? All good advices of software engineering seems to be motivated by this. You do quality stuffs because you want to have a good balance in work and personal life. Want to have a better sex life? Write better code! Otherwise you have to spend the night stepping in gdb. Want to play with your kids once you reach home? Again, don't let bugs creep in! Want to do bird photography on weekends? Architect and design the damn thing well, so that you don't have to do another refactoring on the Saturday nights, and then you can't get up on Sunday 5:00am.

There are places which makes you a hero twice. First for rushing to write your feature (with lots of bugs) to meet impossible deadlines. You get a bonus for releasing before schedule. And if it reaches the customer, it is going to hit those bugs in critical time, and then another bonus for staying up overnight to debug them. Unfortunately such places aren't rare, and more unfortunate is they aren't going anywhere too. None in those companies have an incentive to do a clean job.

It is for your own interest, actually. If you didn't care about the pat when you finally debug that weird customer problem (rather be ashamed that there was a bug in the first place), go write un-buggy code!


Reblog this post [with Zemanta]

 

I have repaired comics.el -- now it hits gocomics.com and comics.com, and fetches available comics. The regular expressions are suitably updated from previously broken version.



(eval-when-compile (require 'cl))
(require 'calendar)

(defvar comics-alist
'(;; gocomics.com comics
("born lucky" "bornlucky" comics-ucomics-url-generator)
("calvin and hobbes" "calvinandhobbes" comics-ucomics-url-generator)
("cathy" "cathy" comics-ucomics-url-generator)
("doonesbury" "doonesbury" comics-ucomics-url-generator)
("duplex" "duplex" comics-ucomics-url-generator)
("foxtrot" "foxtrot" comics-ucomics-url-generator)
("for better or for worse" "forbetterorforworse" comics-ucomics-url-generator)
("garfield" "garfield" comics-ucomics-url-generator)
("non sequitur" "nonsequitur" comics-ucomics-url-generator)
("ziggy" "ziggy" comics-ucomics-url-generator)
;; comics.com comics
("born loser" "the_born_loser" comics-unitedmedia-url-generator)
; ("dilbert" "dilbert" comics-unitedmedia-url-generator)
; ("for better or for worse" "forbetter" comics-unitedmedia-url-generator)
("nancy" "nancy" comics-unitedmedia-url-generator)
("peanuts" "peanuts" comics-unitedmedia-url-generator)
("wizard of id" "wizard_of_id" comics-unitedmedia-url-generator)
("B C" "bc" comics-unitedmedia-url-generator)
("reality check" "reality_check" comics-unitedmedia-url-generator)
("marmaduke" "marmaduke" comics-unitedmedia-url-generator))
"Location info of comics.

Each element of the alist contains the directory that has the comic and a
function which tells us how to find the web address that needs to be fetched.")

(defvar comics-list '("calvin and hobbes" "doonesbury" "peanuts" "for better or for worse"
"non sequitur")
"List of comics to get with `comics-display-all'")

(defvar comics-image-viewer "xview")

(defvar comics-local-cache "~/.comics")

(defvar comics-image-url-regexp-format-string
"<IMG SRC=\"\\([^>]*%02d[0-9]*%02d[0-9]*\.\\(gif\\|jpg\\)\\)\"")

(defvar comics-history ())

;;; http://www.ucomics.com interface
(defun comics-ucomics-url-generator (comic date &optional relative-url)
"Generate the html page that has the COMIC for DATE."
(cond ((eq relative-url nil)
(format "http://www.gocomics.com/%s/%s/%02d/%02d/"
comic (caddr date) (car date) (cadr date)))
((listp relative-url)
(apply #'format "<p class=\"feature_item\">.*<[iI][mM][gG].* [sS][rR][cC]=\"\\([^>\"]*\\)"
(cadr relative-url)))
(t relative-url)))

;;; http://www.unitedmedia.com interface
(defun comics-unitedmedia-url-generator (comic date &optional relative-url)
"Generate the html page that has the COMIC for DATE."
(cond
((eq relative-url nil)
(format "http://www.comics.com/%s/%s-%02d-%02d/"
comic (caddr date) (car date) (cadr date)))
((listp relative-url)
(format "class=\"STR_StripImage\".*<[iI][mM][gG] [sS][rR][cC]=\"\\([^>\"]*\\)"
(car relative-url)))
(t relative-url)))

;;; Common code
(defvar comics-image-file)
(defvar comics-temp-file)
(defvar comics-regexp)
(defvar comics-generator)

(defun comics-fetch-and-display (comic date)
"Fetch COMIC for DATE and display it.
COMIC is only fetched if it isn't present in cache already. Otherwose the
cached copy is used."
(let* ((elem (assoc comic comics-alist))
(base (cadr elem))
(generator (caddr elem))
image-url cached-image)
(unless (stringp base)
(error "Comic %s not found" comic))
;; Compute cached image name...
(setq cached-image
(expand-file-name (apply #'format "%s!%04d!%02d!%02d" base date)
comics-local-cache))
;; If cached image exists, display it and exit.
(if (file-exists-p cached-image)
(comics-show-image cached-image)
;; Otherwise start the fetching process and set things up to display it
;; when the comic has been downloaded.
(let ((tmp-buf (get-buffer-create (generate-new-buffer-name "*comic*")))
(case-fold-search t)
(tmp-file (make-temp-file "_comics"))
(regexp (funcall generator nil nil (list base date))))
(save-excursion
(set-buffer tmp-buf)
(set (make-local-variable 'comics-image-file) cached-image)
(set (make-local-variable 'comics-temp-file) tmp-file)
(set (make-local-variable 'comics-regexp) regexp)
(set (make-local-variable 'comics-generator) generator)
(set-process-sentinel
(start-process "*wget*" tmp-buf "wget"
(funcall generator base date) "-O" tmp-file)
'comics-html-download-sentinel))))))

(defun comics-show-image (image)
"Show IMAGE with an external viewer."
;(start-process "*comic-displayer*" nil comics-image-viewer image)
(switch-to-buffer-other-window (get-buffer-create "*scratch*"))
(goto-char (point-max))
(recenter)
(insert '"\n")
(insert-image (create-image image nil))
)

(defun comics-html-download-sentinel (process change)
"Sentinel to parse the html fetched by wget.
PROCESS is the wget process and CHANGE is the state when this function is
called. We will wait for wget to finish and then scan the resulting file for
the actual comic URL."
(when (eq (process-status process) 'exit)
(save-excursion
(set-buffer (process-buffer process))
(let ((tmp-file comics-temp-file)
(regexp comics-regexp)
(generator comics-generator)
image-url)
(with-temp-buffer
(insert-file-contents-literally tmp-file)
(goto-char (point-min))
(when (re-search-forward regexp nil t)
(setq image-url (funcall generator nil nil (match-string 1)))))
(if (not image-url)
(message "Error in parsing html page")
(ignore-errors
(delete-file tmp-file)
(delete-process process))
(set-process-sentinel
(start-process "*wget*" (current-buffer)
"wget" image-url "-O" comics-image-file)
'comics-display-comic-sentinel))))))

(defun comics-display-comic-sentinel (process change)
"Sentinel to display comic.
PROCESS is the wget process and CHANGE is ignored."
(when (eq (process-status process) 'exit)
(let* ((buf (process-buffer process))
(image-file (save-excursion (set-buffer buf) comics-image-file)))
(ignore-errors
(delete-process process)
(kill-buffer buf))
(if (not (file-exists-p image-file))
(message "Couldn't fetch image file")
(comics-show-image image-file)))))

(defun comics-read-comic-name ()
"Read comic name with completion and history."
(completing-read
(format "Comic%s: "
(if comics-history (format " [%s]" (car comics-history)) ""))
comics-alist nil t nil 'comics-history (car comics-history)))

(defun comics-display (comic date)
"Display COMIC for DATE."
(interactive (list (comics-read-comic-name) (calendar-cursor-to-date t)))
(comics-fetch-and-display comic date))

(defun comics-display-all (date)
"Display all comics in `comics-list' for DATE."
(interactive (list (calendar-cursor-to-date t)))
(dolist (comic comics-list)
(comics-display comic date)))

;;; Add key binding to calendar-mode-map
(define-key calendar-mode-map "c" 'comics-display)
(define-key calendar-mode-map "C" 'comics-display-all)

(provide 'comics)


The bug in exploit code

When some customer reported concern on the openssh version we were using, to assure them we have backported all the security fixes, we had to test with the exploit. First we had to ensure the exploit really works by running it against an unpatched opensshd, and then run it again against a secured one to verify that the patch really works and it is not vulnerable any more. Catch? The first part can be less trivial than we think. The exploit has been written by a brilliant and responsible guy (ought to be, he appears to be working for google).

He introduced a little bug that'll prevent it to work.

So that when the exploit is available in the wild, the script kiddies won't be able to play it. It took me a while to locate the bug and fix it.

Also I realized again how hard it is to read code than writing. And seriously, responsible PoC exploits should have subtle, undocumented, beautiful bug in them to frustrate the script-running juveniles; and at the same time the bug will help serious researchers to understand the code (and fix genuine bugs later).

Yes, I walked the path before, never did post a runnable exploit.

An all solid state cheapo car audio

My requirements were clear since the beginning. As far as my experience goes with car audio head units, it is the CD drive that goes bad first. It is the only moving part in the car stereo, has to be very delicate (much more expensive than normal CD drives) because it has to withstand all the vibrations and shock when the car is in motion, and goes bad first (well my first one died on 13th month just after the warranty expired). Still then, major vibration will cause a skip. Hence my decision was "I don't want a CD drive in my car stereo". All these salesmen in Bangalore would tell me "well you don't have to play the CDs". "Yeah, right, but I don't want to pay for it, either". They would back off. "Sorry sir we don't keep such a thing".

And I'd be back to square one again in the next shop. Finally I gave up searching in Bangalore, and decided to get one from US. In this recession market when most of my money is underwater, thanks to a patent incentive I had ~12K of throwaway money to upgrade my car audio system. Well I am not an audiophile, I listen to music instead of equipment, so I divided the bonus in 2 equal parts and decided to upgrade the HU and front pair of speakers. The existing head-unit was an insult from Toyota anyway (believe me they bundled a cassette player in 2007) for not buying the top-end variant; and none wanted to buy it back (including the dealer). The speakers were ok, but I wanted a pair of components.

125 USD wouldn't fetch too many car audio even in USA. After some light searches, I decided on Boss's 750DI, which can play from a SD card, USB stick, has an AUX in; and most important, has an iPod dock. AUX in would have been ok to play iPods, but then you have to control the iPod separately, you can't charge it, and a dangling iPod is a serious hazard in the cabin of a speeding car. The iPod dock holds it securely, charges it and the HU's control (including the remote) would control the iPod. Now I have a SD card with my favourites for casual city drives and the nano with 8GB songs comes into action for long drives. The AUX helps if we connect the mobile phone; and now I think I could have opted for the Bluetooth version to make it a handsfree. Thanks to ol' buddy Atanu, who bought and shipped to our US office and @kmanuj who carried it back here, I resolved my logistics issues.

The following weekend was installation time, and though I was confident I could simply plonk in the HU in place (just have to carefully follow the color coding in the wiring diagram), I took the car to a shop nearby, who did a fairly fast and good job (I observed that my own toolset would have been inadequate for a DIY job). Especially installing the tweeters and crossover box wouldn't have been possible.

"Your Planet Needs You"


Droid Fonts in s60 mobiles

Look at the Droid Fonts and you'll fall in love with it. It is a marginal improvement on Bitstream Vera and Deja Vu ... but looks prettier in smaller screen. After all, it is adding to the wow factor of many modern phones. When it is easy to use the fonts in your desktop, using a different font in Nokia S60 phones is an ugly procedure. When you think it ought to be editing some config file and point it to somewhere where the fonts are present, its actually more interesting than that. We let the phone pick the same filenames, but insert our own somewhere in its searchpath before the existing ones are found. So looks like the phone searches first into /resource/Fonts directory in the memory card, and then in the phone memory. So what you have to do is to find the files (names) in /rosource/Fonts in the phone, and dump your own fonts in the same path of your memory card with the same names. Same way as LD_PRELOAD would work. There are a lot of pages in net which tells you how to change the fonts of S60 mobiles. But badly. They tell you "use same font for everything" (that is, make 3 copies of the same file with different names), but you don't need to. You can actually provide 3 different fonts for normal, bold and titles (and the phone will render them correctly). Remember that having fonts in your memory card means the phone will never switch to USB transfer mode. So I have to find a way to rsync memory card in "PC suite" mode. Baah!

Now you can see the "before" (on the left) and "after" (down there) screenshots. I won't say it is a "huge" improvement, but hey it is different from the crowd's.

Web Runtime Widget on Nokia E51

Web Runtime Widget is a relatively new technology on Symbian phones. Basically it is an application written in html + javascript + css + ajax. Nothing but a complex web page. Nokia's attempt to catch Web 2.0 on their mobiles before it becomes obsolete. Unfortunately, it is available in new phones only. Like it supports some s60 3rd Ed FP1 with software updates, but not E51. I checked Nokia forums but there was no confirmed report that E51 will support WRT, even after a software upgrade.

I was upgrading the software of my E51 anyway, so I decided to try a WRT post upgrade.

The easiest (and probably useful) candidate was Accuweather Widget, which shows (pretty good) weather information about a city. The whole package comes as .wgz file, and at least post software upgrade the file manager found an association with the extension and allowed me to explode the tarball as an application. So far so good. Now the application launches, but keeps showing me the weather of Paris. Not too useful for me, and I wanted to change the city to Bangalore.

And this is where unsupported platform hurts. I can't edit a text box in the widget. It'll just take the first keypress and hang. No further input is possible in a textarea. Damn, now I can't change the city. I wished I lived in a city started with A, D, G, J ... (ok you get the pattern). Then a brainwave hit. It is all Javascript so maybe I can edit that file to change the default to Bangalore. And yes, accuweather.js says somewhere if (!zip) zip = "EUR|FR|FR012|PARIS". Now to find out the Bangalore code, I had to search Bangalore in accuweather mobile site and from the URL location found it to be ASI|IN|IN017|BANGALORE.

But I am sure other WRT widgets will be complex enough, and won't fall for so easy hacks.

Metro Pillar in a Year

More than a year ago, in February 2008, they barricaded Indiranagar 100 ft road for Namma Metro work. Most of the time is consumed in erecting the pillars of the elevated railway.

So the first action they took is to claim most of the 100 feet road, leaving two narrow lanes on both sides. Not before long, the single narrow lane gave up, and it became really painful to travel through it. I didn't have much choice myself as my workplace is right there, so I chose to document the pillar erection process itself. In early March, we saw heavy cranes coming in, and they started working on making foundation of the pillars. The places were already carefully marked on the road.

Next came the drilling machines, which proceeded to make 4 deep holes at four corners of a square. The noise was exceeding our tolerance level by several decibels. But the machine was an engineering beauty. Armed with a spiral drill, it would be able to cut through almost any earth material, and the spiral automatically carries the debris up. This exercise went on for a few days, till they finished four neat holes, and moved on about 100 ft (or more) to build the next pillar. When they were doing this, because of debris clearing, too many heavy trucks will move around, which broke whatever left on the road.
The holes were pretty deeper than we thought. They were dug close to 35 feet deep. (How did I know? Well on completion, they threw a metal line inside each with a little weight attached to the end. And then they lifted it and laid straight to measure it using a tape. Obviously I couldn't read the tape, but I counted number of steps a guy needed to walk from one end to the other. He needed ~25 steps.) Once the holes were ready, they poured concrete to create 4 underground pillars. And finally covered the top with mud and leveled them with the road. Now unless you looked carefully, you can't find the positions of the pillars. So, April 2008, we had the foundation of the pillar done.

Fastforward SIX months. After complete quietness of half an year, they exposed the heads of the pillars once again. They chopped the heads a little bit to make all heads at the same level, and roughened the surfaces a lot for further concrete to hold. Then dug a square shaped ditch around them.
The ditch happened to be the place of a table top, built on the top of four pillar buried in ground. The ditch is drained out, and a huge cube shaped mesh is built there. The top ends of the four pillars went inside the cube. Some days later, they filled up the mesh by concrete, and the base of the pillar was complete as soon as it was dry. The whole thing they have made till now is still completely underground, and top of the 'table', which is a flat platform of say 10 feet x 10 feet, is at the same level of the road.

Move your time machine again by six months, and we reach mid-March of 2009. Again the place became active; and we can see just like OpenGL wireframe rendering, a metro pillar have raised its head. It is nothing but circularly arranged thick vertical steel rods, held together by steel rings and tie-ups. Once the vertical cage is up, they covered it by metal semi-circular panels, kept in place by square frames and huge sized nut and bolts. Finally a big mixer machine came in and poured in liquid concrete in the cylinder.
And finally, in April it was time to build the top platform of the pillar on which the metro pathway will rest. If you look carefully, there is a pipe to drain water through the pillar which opens up at the ground level. Another matter of concern was the safety of the workers, you can see people working at the top of the 40 feet high pillar with a helmet that wouldn't stand a drop of 5 feet, and they are too poorly harnessed themselves to arrest a fall. It is a wonder that we don't hear about major accidents during such big construction activities with so little care about workers' safety.

At last, 3rd week of April, we are almost done. What is to be done now is to spray water regularly for curing, so that air cracks do not appear. They cover it by jute wrappers to retain moisture.

This is it. In last week of April, our office has shifted to Koramangala. So no more updates :-)

The God Interview

Tickled by Life is conducting an interview about God, and luckily /me too was invited to answer the questions. Unfortunately my answers were possibly too harsh and unpopular, so it is still unpublished :-) (EDIT: I guess I jumped the gun, it's been published, was the cover story during the last weekend, and is in editor's picks) But I wrote those anyway, pausing to think before answering them. So I decided to post here before it goes into oblivion:

1. God is ...

a hypothesis (that there exists a super intelligence who created this universe, and controlling the fate of individuals by communicating with them). Apply all your scientific mind and you'll realize there is very little chance of the hypothesis to hold true. The concept is a wishful thinking for *most* of us.

2. God or the Big Bang? (or both)

Big Bang; and God doesn't have any role to play in that. The singularity of the Big Bang doesn't let any information to pass through. So even if God instrumented the Big Bang, he would have no way to tune the fundamental physical constants.

3. God or Darwin? (or both)

Darwin wins by a large margin. Complex life (which can even wonder whether there is a God) evolves via the process of gradual evolution. Post Big Bang, the universe has been on its own, and life appeared where the condition is right for it, and we (the Boltzmann's brain) came as the end product (as of now, maybe in a few million years earth will be dominated by a newer species) of a slow and extended evolution process.

MORE

4. God or Darfur? (How can Darfur happen if there is God?)

Darfur conflict is a fight for limited resources in an overpopulated place. There might have been religious and ethnic unions on the conflicting sides, but at the end, it is a group of desperate genes that are trying to survive at the cost of another group. The catastrophe is created because people can't access basic resources for survival without violating someone else's.

5. Who is God’s God?

Whosoever he is, if he wants to exist, has a bigger problem. We are already challenging the idea of supernatural intelligence creating the universe. We say God himself is extremely improbable as a designer of the universe, and the same question would be even harsher on him.

6. Will the real God please stand up? (Why do we have so many religions?)

Every leader wants his followers, and encashes on human weakness. As I said most people find God's existence as "desirable", and hence each religious leader finds their way to "satisfy" people's need. Just like evolution, I am sure there would be hundreds of theories floated to make people gratify their desire of God, and only the best 4/5 ones survived so far. And once achieved the critical mass, they
concentrated on crushing the competition to increase their own follower count, resulting violent human conflicts. I wonder if "real" God ever existed, whether he'd approve the behaviour of such fan clubs.

7. Is this just a big lab and are we just guinea pigs and God just a researcher?

No, it is the dolphins :-) Humor apart, even if God existed, things wouldn't have been any different. I said the singularity wouldn't have allowed to set initial conditions of his experiment. No one can research this way, where you set off an experiment without getting to set the laws, and even tweak them. The best he can do is to be a silent observer. Best to consider ourselves as Boltzmann's brain who
wonders of his own existence before second law of thermodynamics makes further information processing impossible.

8. Unexplained phenomena = God?

Nope; it is an opportunity for a scientist to work on a problem. Attributing gaps in knowledge to God is a glorified way of giving up. As someone else explains the mystery, we find that God is having lesser and lesser space to hide in.


You too can try answering the above questions and mail them to interview @ tickledbylife . com. They'll publish if they like your answer!

PAKET AUDIO HEMAT VALENTINE



Paket Hemat 1 SQ

1pc Power V460
1pc Subwoofer 12″ VX2002W
1pc Speaker Split 6″ VX6X
Price Rp 3.200.000

Amplifiers make power to drive the speakers. The amplifier is a very important component of a speaker system. It makes sure that the total power handling capacity of the speakers is adhered to. Amplifiers commonly come in two,four or six channels. Subwoofer amplifiers are mostly Mono Amplifiers. It is common that multiple channels are marked for the exclusive use in allowing for more than one channel to be used.


PAKET AUDIO HEMAT 1 SQ


Paket Hemat 1 SQ

1pc Power V460
1pc Subwoofer 12″ VX2002W
1pc Speaker Split 6″ VX6X
Price Rp 3.100.000

Amplifiers make power to drive the speakers. The amplifier is a very important component of a speaker system. It makes sure that the total power handling capacity of the speakers is adhered to. Amplifiers commonly come in two,four or six channels. Subwoofer amplifiers are mostly Mono Amplifiers. It is common that multiple channels are marked for the exclusive use in allowing for more than one channel to be used.


PAKET AUDIO HEMAT 2 SQ

Paket Hemat 2 SQ
1pc Power V4100
2pc Subwoofer 12″ VX2012W
1pc Speaker Split 6″ VX6B
Price Rp 4.100.000

Amplifiers make power to drive the speakers. The amplifier is a very important component of a speaker system. It makes sure that the total power handling capacity of the speakers is adhered to. Amplifiers commonly come in two,four or six channels. Subwoofer amplifiers are mostly Mono Amplifiers. It is common that multiple channels are marked for the exclusive use in allowing for more than one channel to be used.


Angga with the Venom's



What is car audio? Car audio is how we describe the sound system fitted in an car.

A regular car audio system refers to a manufacturer installed system. A custom car installation can involve anything from the upgrade of the radio to a total custom fit-out. Events are held where people compete for the loudest or most innovative systems.

The most common pieces of equipment are the radio/tape player/CD player/DVD Player called a Head unit, or a head deck. These components are likely to be upgraded with an after market product. Head unit technology has developed to include CD players with MP3, Ogg, WMA, AAC, and USB, Bluetooth and Wi-Fi support. Car audio systems can have line-in jacks and other equipment features like tape adaptors, and video touch screen that controlling; navigation, dvd movies, mp3 players, back up cameras, and other accessories.

Amplifiers

Amplifiers make power to drive the speakers. The amplifier is a very important component of a speaker system. It makes sure that the total power handling capacity of the speakers is adhered to. Amplifiers commonly come in two,four or six channels. Subwoofer amplifiers are mostly Mono Amplifiers. It is common that multiple channels are marked for the exclusive use in allowing for more than one channel to be used.

Capacitors

Capacitors are used to store energy for the amplifier. Capacitors are useful because they can reduce voltage loss to other components in a car. Large capacitors sometimes offset headlight and/or interior light dimming because of too little amp draw from the alternator. A capacitor is only good for an audio system trying to get too many amps from the electrical system. A capacitor doesn't provide more power, it just stores it. The alternator must have more than 20% amp power than the entire vehicle and sound system combined for a capacitor to be of benefit. About 0.5 farad of capacitance is needed for every 500 watts of power. A capacitor does not affect sound in any way. It is strictly for power conditioning.

Jensen NVX3000PC

Jensen Navi Navigation Screen
Jensen Navi Monitor
Jensen Navi Mounting Harness

Xstatic Batcap: Your car battery will thank you

Xstatic Batcap 250 PR Photo

Here's another little-known aftermarket manufacturer called Xstatic that makes a great product in the form of its Batcap line of high-discharge car batteries. (WARNING: learning follows) The chemical reaction within a normal car battery creates a flow of electrons that can power an electric device in your car. Your $10,000 audio system, however, demands a few more electrons a lot faster than your DieHard can provide them. A capacitor can store a charge and discharge 20,000x faster than normal battery, thereby giving your amps the juice they require. Unfortunately, capacitors lack the ability to produce electricity like a battery. The Xstatic Batcap is the best of both worlds: a battery that can discharge as fast as a capacitor. You can find Batcaps in some of the loudest vehicles on earth that hit decibel levels in the neighborhood of 175+. I believe Jello becomes explosive at 169.8 db. Can anyone confirm from experience?

Speaker S Series


Full-range speakers contain all the speaker elements in one basket. In their simplest form they consist of a woofer for the lows, and a tweeter mounted onto the woofer to produce the highs. Some models will have additional drivers, like midrange or supertweeter. You should choose full-range speakers if you're looking to replace factory speakers with a minimum of muss and fuss. They come in a variety of sizes that mount easily into factory speaker locations. In most cases, you simply remove the old speaker, connect the new speaker with a free Venom wiring harness, and mount it. You'll find full-range speakers at nearly every price point and power range.
Speaker VX5S, VX6S

Speaker B Series



Speaker VX5B, VX6B

Speaker X Series



Speaker VX5X, VX6X

Speaker VI Series



Speaker VI5, VI6