Motivations, intentions and disclaimers (brace for impact)
This review has been written as a follow-up to this heated and particularly entertaining thread at Sniper's Hide forums
The Trasol ballistic solver app is a bit of a sacred cow at SH. Frank Galli Himself seems to take any inquisitive discussion of the app very personally, and quickly gets rather defensive – any "wrong" question is qualified of "trolling" and "discredit". At the same time, some religious teletubby population spread the word of intrinsic superiority of closed-form over point-mass, witness miracles any day, and get hilariously hysterical when faced with reality. A suggestion to run a comparison of Trasol output against Doppler radar-derived drag profiles was quickly led away, as Frank has put it, "into the weeds", and never received any constructive response. In addition, the official technical description of the product does not help much – it is fuzzy at best, and can be summarised by "we're proprietary, we're superior, it's so scientific!" (which, to be fair, isn't much different from the sales pitch of other solvers).
All this does not inspire much trust, "there must be something".
I'm a paranoid nitpick. I am allergic to "don't ask questions, believe!" approach. I cannot trust something which I don't understand. It did happen to me to completely disassemble and reassemble a new gun even before firing any shots with it, just to understand how it works. Religious debates around Trasol got my curiosity, and after several hours spent in fruitless, albeit amusing, arguments with zealots, I decided to spend the cost of ten excellent .338 shots to see through the fog.
It all started as personal notes I was taking while evaluating the solver, then I decided to make a full-blown review out of it, as, quite apparently, I am not the only one to be intrigued by the app. When finished, two things came out as big surprises:
1. How long and boring the review ended up to be. There's everything you ever wanted to know about Trasol, and certainly many things you didn't want to know.
2. How actually positive the conclusions are. In reality, Trasol proved to be a pretty cool app, precise and flexible, with a number of innovative, interesting and useful concepts, and a very practical no-nonsense approach to the user. There are a couple of minor bugs (which can be easily worked around), but the app looks very promising, and will definitely become part of my personal arsenal; read on for the gory details.
Now to disclaimers:
There will be many examples using Lapua bullets. This is simply because Lapua is, to my knowledge, the only company that publishes Doppler-radar measured drag profiles for their projectiles, which provides an excellent reference point to evaluate predictive qualities of general-purpose ballistic models. I hope other bulletmakers would follow.
Finally, I am not in any way affiliated to any person or entity which sells anything to the shooting crowd. Again, this evaluation started from notes I have been taking for myself, and is driven entirely by my personal curiosity and interest.
The numbers and conclusions apply to Trasol on Android v.1.1.2 of 15 Feb 2016.
Introduction (not about Trasol at all)
First comes a brief refresher on some notions of external ballistics, necessary to understand the analysis and conclusions. If you know what standard G1 and G7 drag models refer to, and what is the difference between engineering and shooting ballistic coefficients, you can skip directly to the next section, without any loss of fidelity. For others – don't worry, there isn't any math involved; watch rocket science made simple.
The real -- engineering -- ballistic coefficient, that is -- the capacity of a projectile to overcome air resistance, is dependent on velocity. The relationship is rather complex, and is not easy to predict even with state-of-the-art computer models. The BC is the inverse of drag, which is the slowdown that a projectile experiences due to air resistance.
G1, G7 and other drag models are simplifications which allow to calculate bullet trajectory with reasonable precision. "G" drag models rely on reference projectiles of standard shape and weight. Drag has been experimentally measured for such reference projectiles once and for all. For real bullets, the assumption is made that at any given velocity the drag is simply X times smaller than the drag of a reference projectile; this "X" -- is the shooting (as opposed to engineering) BC. All "G" standard models, including G1 and G7, are mostly theoretical projectiles, which never exactly match the shape of real world bullets, so some degree of error is inevitable.
The BC obviously depends on the shape of the bullet (more aerodynamic shapes better overcome air resistance), but also the BC is almost exactly proportional to the weight. Given the same geometry, a bullet two times heavier would have 2x bigger BC.
This is how drag profiles of the two most common "G" models look like:
Bottom solid curve – reference G7 drag. Top solid curve -- reference G1 drag. Dotted curve – G7 scaled by 0.503. Notice that the drag curves in the supersonic range between 1.8 and 2.4 Mach (properly scaled by the right BC) match very closely. The drag curves match not just between G1 and G7 – other reference "G" projectiles and real-world bullets in the range between 1.8 and 2.4 Mach have very close shapes of drag curves.
The x 0.503 conversion factor between G1 and G7 means that (due to the difference of shapes) to match the same drag in supersonic, a G1 reference projectile has to be almost twice as heavy as a G7. But the difference does not stop there. As we get closer to transonic range (~1.2 Mach) the shape of the curves differs more and more. Different projectiles behave quite differently in transonic and subsonic regions. Obviously, as the shape of the G7 reference projectile (spitzer nose, boat tail) is closer to the shape of real modern bullets used for long range shooting, the G7 model predictions will be accurate at further ranges than G1. Consider this:
The graphs show errors (in centimetres) of trajectory calculation using G1 and G7 models for two different bullets. In principle, for spitzer boat-tail bullets, G1 predictions starts to fail at 1.4-1.2 Mach, while G7 usually works out pretty well up to 1.0 Mach (which, in practice, means roughly 200-400 more metres of accurate trajectory predictions).
Notice the difference in G7 errors in the two graphs above. For 250gr .338 Scenar, the G7 model overestimates the drag – the bullet has actually less drop than a G7-based solver says. For the 170gr .308 Lockbase it's the opposite – G7 underestimates the drag. This illustrates a very simple fact – beyond a certain point, there is no, and cannot be, a universal drag model that could match equally well all modern long-range bullets.
As an attentive reader could notice, up till this point the article was not at all about Trasol, or any other ballistic solver for that matter. Before we get to the actual substance, one important point needs to be made clear about calculation algorithms used by different ballistic solvers on the market. Yes, the whole 3DOF point-mass vs. Pejsa-like closed-form debate. In short: it does not matter. I can imagine the intensity of hysteria this sentence can provoke in some religious zealots, but am afraid the poor chaps would have to live with it (read on, gory details follow). Both 3DOF and closed-form are used to model the same reality – a specific drag profile. 3DOF uses iterative calculations of the bullet's speed and position every small fraction of a second, until it gets to the required distance (and you get all intermediary results as a bonus). Closed-form uses a clever mathematical trick to get immediately very close to a given point in trajectory, without going through all the intermediary ones (but you need to run the process many times to get the full trajectory mapped). Closed-form is, in principle, more efficient in terms of computations, and that is why Dr. Pejsa has invented it in the first place – in the 1980s computing power was much more limited. But today, any smartphone has plenty enough CPU to run full-blown 3DOF almost instantaneously, and from the practical small arms applications it really does not matter whether to use PM or closed-form – both approaches give results an order of magnitude more precise than a typical click value.
The difference in calculations is not made by the algorithm of calculations, but by the underlying model. Historically, the original closed-form calculators based on Dr. Pejsa's work did not use the G1 reference projectile and the associated drag profile (although he did provide equations for G1 also), because its limitations for most real-world bullets in the approach of transonic were perfectly clear (the G1 form is, in fact, not a small arms bullet, but a late 19th century artillery shell). In the 1980s, G7 usage was not particularly widespread, and also a boat-tail spitzer model is a rather poor match for many flatbase projectiles, as used for hunting or target shooting. Instead, the original Pejsa calculator uses a compromise solution – a "hidden" reference model represented by the drag profile of the US Army 152 gr .30-06 Ball M2 at 2600 fps (a flatbase spitzer projectile; of all "G" standards, G8 is the closest match), for which Dr. Arthur could get reliable ballistic data.
Pejsa's calculator, as well as all its spiritual successors, take a G-referenced BC as input, but do not use the G drag models for calculations. In the background, the BC is converted to an equivalent parameter in some entirely different model, which better matches geometry of modern bullets. It is, fundamentally, the same operation as multiplying G1-referenced BC by 0.503 to get G7; the assumption is made that the BC figure corresponds to the 1.8-2.4 Mach region (the case with most vendors' figures) where all drag curves have a similar shape, and just need to be scaled properly to almost coincide.
As a consequence, for closed-form analytical ballistic calculators, such as Trasol, it does not really matter whether your BC is indexed by G1 or G7 -- the internal model is altogether different anyway (and -- just as G7 or G1 -- may or may not match a specific bullet in long ranges).
Now to the actual substance.
Trasol, the model (a race to beat G7)
The first thing I've done when I got my hands on Trasol, was – yes, right! – understand the underlying drag model. I took Trasol's output of a trajectory with known atmosphere, and fed the numbers to a custom reverse 3DOF solver, to estimate drag that the projectile was experiencing in flight at different velocities. That's how it looks like, in comparison to G1 and G7, scaled to match in supersonic:
As a sidenote, the "wobbly" shape of the curve does not reflect any physical reality or the actual internal model. This is simply random noise of calculations due to rounding of numbers in Trasol's output.
Select "Saltor G1" drag model and type in a G1-indexed BC. The output usually correlates with [untuned] Trasol within 0.1mrad down to 0.8-0.7 Mach (given more data points to level out the noise, it would be possible to make it match Trasol better and further, but I decided not to bother – retyping hundreds of numbers by hand is annoying at best).
To be fair to the developers of Trasol (as we will see, they've done a good job – the model is pretty nice), the calculator is really a proof of concept only, and is deliberately limited in functionality: it only calculates the bullet drop in standard ICAO sea level atmosphere, no other atmospheres, no coriolis, no spin drift, no wind drift, no inclined line of sight, output only in funny imperial units, etc. – enough to play with, but – on purpose – not enough to pretend to replace the app.
Getting back to the drag curve, it is static for any input parameters of the solver, that is – it is used across all BCs and does not seem to change with a specific bullet's form factor. This is good, because predictable.
The drag curve looks quite G7-ish, which means that Trasol's output is optimised for spitzer boat-tail bullet shape typical for today's long range bullets. They're doing it right, because that's the kind of bullets one would typically shoot into transonic (and for most other bullets the supersonic segment of any model would probably be just fine).
There are, however, some important adjustments which mostly concern the transonic region. The peak drag is lower than G7, comes earlier (around 1.2 Mach instead of ~1.05 Mach for G7), and starts dropping earlier, but less steeply. Also, the "subsonic" part of the curve, which in Trasol starts at 0.9 Mach, specifies significantly more drag than G1 or G7.
The fundamental question is: how does it match reality, or, in other words, is it any better than G7?
The answer will come in two parts: actual field data, and Lapua's Doppler-derived drag models. Both will be helpful in understanding Trasol, to make better use of it in the field.
The Sniper's Hide forums and articles already contain several field reports of Trasol's precision as compared to other solvers; I will just add my two fat cents to the pile, and pull my two fat conclusions.
ACHTUNG: update of January 2017 -- since the publication of this review I have obtained slightly more precise values for GP11 and GP90 G7 ballistic coefficients -- 0.276 and 0.166 respectively (instead of 0.278 and 0.167 used down in the text). I did not bother to feed the new numbers to different ballistic calcs and retype them here (feel free, if it's your idea of fun), as I believe the overall conclusions still stand.
Case #1: Swiss 7.5x55 GP11 ordnance cartridge.
As often, the Swiss made it better than necessary. To my knowledge, it is the World's only bulk infantry cartridge, which routinely shoots ~0.8-1.0 MOA 10 shot groups from a decent barrel, and has a MV SD of less than 2.9 m/s. And it costs 35 cents a shot, with excellent barrel life; I just love this cartridge tenderly (and so does my wallet), and have spent some time studying its trajectory.
Here are a few samples from my logbook. For the sake of completeness, I also specify zero atmosphere (although at 300m the influence is minimal), and small angles of fire.
Nota Bene: in Trasol, sight height should be specified in inches rather than mm. Otherwise you may hit a unit conversion bug, which leads to wildly inaccurate results.
BC G7 = 0.278. Bullet weight 11.36 g (175 gr). Bullet length 35mm. MV variation 0.8 m/s per 1ºC. Range latitude 46, azimuth 120.
Rifle: 26" barrel Steyr CISM bolt action, sight height 54 mm (2.13"), MV@15ºC 781 m/s
Zero: 300 m, 23.6ºC, 961.5 hPa, 45%, (density altitude 897 m), estimated MV 787.8 m/s
Range conditions: 26.0ºC, 866.2 hPa, 37%, (density altitude 2033 m), estimated MV 789.8 m/s
|Distance, m||LoS elevation, degrees||Observed, mrad||Trasol, mrad||JBM+G7, mrad||AB+G7, mrad|
Rifle: Stgw57, rifling 270 mm right, sight height 77mm (3.03"), MV@15ºC 750 m/s
Zero: 300 m, 17.0ºC, 964.8 hPa, 72%, (density altitude 635 m), estimated MV 751.6 m/s
Range conditions: 13.0ºC, 858.5 hPa, 51%, (density altitude 1658 m), estimated MV 748.4 m/s
|Distance, m||LoS elevation, degrees||Observed, mrad||Trasol, mrad||JBM+G7, mrad||AB+G7, mrad|
Range conditions: 18.0ºC, 857.3 hPa, 52%, (density altitude 1859 m), estimated MV 752.4 m/s
|Distance, m||LoS elevation, degrees||Observed, mrad||Trasol, mrad||JBM+G7, mrad||AB+G7, mrad|
I could produce a few more tables (tested it randomly against records of different shooting days), but the conclusions would remain largely the same.
* As expected, in supersonic ranges Trasol is just as accurate as G7 (since the drag profile is largely the same)
* In transonic ranges, for the GP11 projectile, Trasol has a slight edge over G7, getting a click or two closer to observations.
I could not push it much further than 0.95 Mach, due to limitations of the location, scope adjustments range, and own rifle precision, but Trasol is pretty impressive, especially with a century-old bullet design.
Now, let me introduce our next guest.
Case #2: current issue Swiss ordnance GP90
This is, basically, 5.56 NATO (fully interchangeable)
made by Rolex made by RUAG Ammotec factory in Thun. Bullet weight 4.1g (63gr). BC G7 0.167. MV variation 0.7 m/s per 1ºC.
Range latitude 46, azimuth 120.
Rifle: Stgw 90, rifling 254 mm right, sight height 76 mm (2.99"), MV@15ºC 905 m/s,
Zero: 300 m, 16.6ºC, 971 hPa, 54%, (density altitude 539 m), estimated MV 906.1 m/s
Range conditions: 15.1ºC, 859.2 hPa, 53%, (density altitude 1729 m), MV 905 m/s
|Distance, m||LoS elevation, degrees||Observed, mrad||Trasol, mrad||JBM+G7, mrad||AB+G7, mrad|
We observe a similar but opposite situation. In supersonic, Trasol's model is just as accurate as G7, but in transonic for the GP90 projectile G7 drag profile is slightly – a click or two – better match.
In summary, we have two bullets – one is slightly better described by Trasol, another is slightly better described by G7. The results above are hardly any statistics, even if we don't take into account observation errors (it's hard to state the average point of impact with 1 click precision for 5.56 at 950 metres; at these ranges we get one click of drop for every 3-4 metres). That's where science comes to help. Lapua have invested a lot of resources into Doppler-radar measuring exact drag profiles for their projectiles. Unfortunately, it does not help with any other bullets. Fortunately, it provides an excellent reality base to evaluate predictive qualities of general-purpose external ballistic models.
Case #3, #4, #5, etc.: Doppler radar-derived drag profiles
For all trajectories: standard ICAO sea level atmosphere, 100 m zero, sight height 2.5". Muzzle velocity and BC data are from the manufacturer's official site. For Doppler-derived trajectories, I used JBM "(CD)" profiles, except when JBM did not have a specific profile available yet; then I used the Lapua free Android app. Given the same input, JBM(CD) and Lapua app give the exact same output, but JBM is much easier to copy-paste from.
For the evaluation, I have chosen the calibres and bullets I am familiar with, and have shot at some point in time (and for which Lapua has factory ammo). The exercise is, however, very easy to do for any other Lapua bullet.
All detailed data and graphs are available as a separate page here – feel free to poke around if it is your idea of fun (it would comfort me knowing I'm not the only paranoid nitpick around). Here is the summary:
.223 Scenar L 69gr, V0 830 m/s, BC G7 0.171. The graph tells it all:
Trasol is a slightly better match than G7, staying within ±2 clicks for ~200 metres further.
.308 Lockbase 170gr, V0 840 m/s, BC G7 0.249. This bullet is a bitch for standard models. G7 predictions start to go wrong at 1.2 Mach, and by 0.9 Mach are almost a mil off. Although, I feel, the bullet is optimised for supersonic (and is quite a mess in transonic anyway), this is a good example of a non-orthodox drag profile, as treated by G7 and Trasol.
Again, Trasol has a slight edge over G7.
.308 Scenar L 175gr, V0 793 m/s, BC G7 0.247. A very solver-friendly bullet design, which is nicely described by standard models. A graph would not be particularly illustrative (still available at the link above if you want to have a look) – looks like a single fat multicoloured line. The trajectory remains between G7 and Trasol within 0.1 mrad all the way to 0.9 Mach (between 1000 and 1100 metres), it is only further down that this time G7 seems to gain a slight edge.
.338 Lockbase 250gr, V0 900 m/s, BC G7 0.310. The original .338LM load.
Both models start to go wrong from ~1.0 Mach, but G7 goes slightly wronger. +1 for Trasol.
.338 Scenar 250gr, V0 905 m/s, BC G7 0.322. What the original .338LM load should have been.
Situation "similar but opposite" to .338 Lockbase. A very slight edge for G7 this time.
Science did not help. It is difficult to state with certainty whether G7 or Trasol model are on average a better or worse match for long range. Depending on the specific projectile used, one or the other may have a slight advantage. In supersonic both models show excellent precision, and in transonic the difference of predictions usually stays within 1 or 2 clicks. The exercise may get more conclusive if ran against more bullets from different manufacturers (Lapua, as any other bulletmaker, certainly have their peculiarities), if and when they come.
After having played a lot with the app, feeding it different projectile models and half of my logbook, my personal feeling is that Trasol's profile may be a marginally better long range model than G7, but I have no convincing hard figures to prove it, and would certainly not use the eventual marginal precision gains as the main criteria of choice.
In any case, in terms of precision, for a general-purpose (not bullet-specific) drag model, Trasol performs quite on par with G7, comes up amongst the industry's best, second only to bullet-specific Doppler radar derived drag profiles.
Trasol, the curve bender (killer feature)
One fantastic feature that Trasol has (and I am surprised that the subject has not been raised enough in online discussions) is truing. It is called "Drag Coefficient" and this is wrong. The term "drag coefficient" has a defined meaning in external ballistics, but the app redefines it to mean something completely different (a play on Pejsa's slope constant factor, maybe?). The terminology is the only wrong thing about Trasol's truing; the rest of it – the actual substance – they're doing it right.
The coefficient (I will call it TDC for Trasol's "drag coefficient") is a value – 0.500 by default, which can be adjusted between 0.4 and 0.6 to better match a specific bullet's trajectory. This is all that the video from the vendor says, and I could not find any other documentation or description. Of course, the first thing I've done was to feed Trasol's output to reverse 3DOF to see how adjustments of TDC affect the actual drag profile.
(Again, the rough shape of the graphs is due to a very coarse estimation, just to get an idea of general shape changes.)
Now watch this, and compare:
These are the drag profiles of several real-world bullets, scaled to have the same BC at 2.4 Mach.
Here Captain Obvious comes in to state "The variation between drag profiles of real-world long range bullets of different shapes is very similar to the adjustments Trasol does to its drag profile with different values of TDC." Told you, they're doing it right.
Now, this conclusion is largely theoretical. Before we get to real-world examples, here is my totally unwarranted opinion about truing. This is, of course, very subjective (there are about as many opinions on truing as there are shooters, probably even more).
I do not believe in truing things which are measurable: scope height, precise click value of the scope, muzzle velocity, atmospheric conditions – all that is measurable. Considering the amounts of money which go into long-range shooting gear and supplies, adding a weather station and a chrono and a rangefinder is a drop in the ocean. Not having them is a waste of ammo and time and money. Measuring BC is slightly more complex, but also possible with something like Superchrono at 300m (very tricky to set up right, but it's the only chrono that you can put far enough without risk of killing it dead). Fortunately, this is less and less necessary, as vendors get more and more honest and precise about their BCs.
The check to see if I got all the basic stuff right is supersonic. Down to 1.2 Mach I should be dead on with a decent solver's predictions. Beyond that – yes, truing. But this is not truing of MV or BC or any other such value, but finding out the actual drag profile of the bullet used. At this point, it is absolutely necessary to know what your solver actually adjusts – for me it should be the drag curve, and drag curve alone. Too many times an attempt to "true" ended up with my solid supersonic segment completely messed up. Nowadays I no longer bother with truing of ballistic solvers, but simply record the data at different ranges, with careful manual adjustments to my ballistic tables, and the right curve sort of builds itself. With Trasol's approach I may reconsider this idea, and get back to computer models.
Example: for the GP90 cartridge, it took me less than 5 minutes to find the TDC=0.55, which matched all my logged data to 0.1 mrad down to the longest shot I ever took with it (~0.85 Mach).
Example #2: 7.5x55 GP11, TDC=0.509, ≤0.1 mrad down to 0.9 Mach
and on a more scientific base –
Example #3: Lapua Scenar .308 167gr (a weird real-world case of an almost perfect G7), TDC=0.535
Example #4: Lapua Scenar .338 250gr, TCD=0.575
These were all quick-and-dirty runs, based on a few known distant data points, which brought me within 0.1 mrad of all the other data points. Of course, you need to be very, very sure of your data, but when you are – the result is just awesome.
I do not know how the truing feature would behave further down into subsonic (I suspect, it would be rather unpredictable), but I don't really care – never can or have to go below 0.85 Mach. In transonic, they are doing it right, and I am yet to see any other ballistic solver which would get to the same results with the same ease and speed.
Trasol, the app (no-nonsense built for the field)
Here we are getting in a totally subjective domain, so I'll be brief. But a long disclaimer comes first: it is very rare for me to use ballistic solvers at the range. I do occasionally fire it up to check something for somebody else's gun, or out of curiosity for some "what if" scenario, but not for actual shooting. Because laminated cardboard does not run out of battery, and does not break if it accidentally hits a rock or gets wet, because mapping the trajectory is homework and not rangework, but also – and mainly – because all Android solvers that I have seen until now are simply slower and more difficult to use than good old range cards. It is sad to say, but app developers are doing it wrong: why all the useless information, why would I care to see MOA when my scope is in mrad (and why would I care to see mrad rather than clicks), why would I need to know the bullet speed at all, why would I need to erase (painfully backspacing on a tiny keyboard) the previous distance or wind speed before I can introduce a new one, why atmosphere, latitude and azimuth settings are lost between restarts, why input and output are on different screens, why, why, why, I could carry on lamenting like that for a long time… I could understand all the bloat in a desktop computer piece – you never know what question you may want to ask to the solver engine, but trying to fit all full-blown multiple-window desktop features on a postage stamp-sized touchscreen, to me, is a sign of deep misunderstanding of the purpose.
For a long time I though I was the only shooter in the world who wanted to cut all this crap, and get straight to the point. Then I saw Trasol and it was a great comfort, I knew I was not alone. They are doing it right.
About Trasol now: It is simple. It is straightforward. It does and shows what I need. It doesn't do or show what I don't need. Frequent operations are quick and intuitive. Infrequent ones too. I quite like the idea of density altitude as the only atmosphere parameter. Hey, it's the only solver I know of, where in the same screen I can enter the line of sight angle and distance and see the result immediately updated as I type.
And [unlike some competitors] except for a minor bug (see below), it works nicely in metric units, even has a special button "Go completely totally metric" (or something like that). In itself, this is not a miracle, but is sufficiently rare in US-build piece of software to deserve a special mention.
That's almost perfect.
In my wish list, I have only one thing. Well… two things. Well… actually three things.
1. Add automatic muzzle velocity adjustment for temperature. I can understand why it's not there (temperature as a separate input does not appear), but sometimes up at the range between early morning shots for breakfast and afternoon tea trigger time, GP11 can have 2-3 clicks PoI difference at 800 metres, just because of powder temp (in addition to 2-3 clicks, accounted for, due to air density change).
2. Hook some idiocy checks on inputs (because I am often an idiot). E.g. reminders to provide mandatory parameters (instead of displaying a honest space-marine zero-gravity trajectory), checks for reasonable value ranges, etc.
3. Keep all the rest as is, no "features", no bloat, please; it is just great as it is now!
Bugs (all minor, easy to work around) – latest Android version:
* Input of sight height in mm messes up calculations. In-interface conversion to/from inches fixes the problem.
* Table range and step settings are not taken into account until app is restarted.
1. Precision for long range: very good. Well worth the industry's most accurate general-purpose model for long range projectiles, second only to Doppler radar measured bullet-specific drag profiles.
2. Truing: awesome. Simple, fast, and done right.
3. The app itself: best. I cannot pretend to know all the apps ever written, but from what I've seen, this is the only one that shits me not. Done by shooters for shooters.