% of latest three updates
What is Geiger Bot?
ガイガーボットは、ガイガーカウンターのスピーカーから出るクリック音やビープ音からCPM数を読み取って表示する無料のiOSアプリで、App Store からダウンロードできます。英語、日本語、ドイツ語、ロシア語、フランス語の各国語版があります。かなり以前からこのようなソフトウェアを構想していたのですが、福島第一原発の事故をきっかけに実際に制作してリリースすることにしました。
Geiger Bot is a free iOS app available on the App Store
that displays a CPM reading from the clicks/beeps of a Geiger counter's
speaker. It is localized in English, Japanese, German, Russian, and
French. While I had intended to write something like this for quite
some time, the Fukushima nuclear power plant incident motivated me to
release an implementation of it.
How is That Useful?
Many older Geiger counters lack any sort of indication of relative
radioactivity other than the clicks or perhaps a LED/bulb flashing.
This works well for surveying a moderately radioactive source, but in
order to distinguish objects of low radioactivity (such as bananas) from
background radiation, you must perform an integration count by
counting the clicks over at least a minute of time. This is a very
tedious and error-prone process. Also, the integration accuracy of
analog meters is relatively poor at low counts (ie: the CDV-700).
New Version 1.7.1 (in development)
- Geiger Counters
- In progress: automatic training and configuration of optimal settings
- I am in the process of making settings auto-train when a line input cable is connected
- This is based upon statistical analysis of the input data
- This would allow for optimal high rate settings without needing to configure anything
- It is different than "auto-adjust" because it is not continuously adaptive, and will not be held back by worst-case scenarios and microphone input.
- Gamma Spectroscopy
- Improved accuracy and pulse recognition rate. Still messing with algorithms.
- Bugfix: The app will no longer need to be restarted for "disable measurement mode" to take effect
- Additional direct controls
- Faster refresh rate and change detection
- Oscilloscope mode:
|Find the "pulse height".|
- Improved performance
- Removing "accessibility value" from the input monitor graph reduced CPU use from 100% -> 10% (iPad Air)... go figure.
- Refactoring and replacement of many frequently invoked Objective C methods with inlined C functions
- Improved performance
- Smoother rendering with Google Maps using async layer interface
- Refactored bilinear interpolation code
- Replacement of Objective C methods with inlined C functions
- Safecast update data will now be stored in 16-bit floating point form (IEEE754 binary16 / OpenEXR) which will reduce storage space, and increase update and map read performance. (note: this is already in Safecast 1.7.0)
- New raster math op: "Clip to Sublayer Raster"
- Realtime IDW interpolation available as a layer preprocessing effect
- This is actually an IDW + Lanczos + bilinear hybrid
- This is made possible in realtime by:
- 1. Optimized input sample decimation
- 2. 100% hand-coded NEON intrinsic functions for the IDW math
- 3. Only solving 25% of the problem, and letting Lanczos do the rest
- 4. Only operating on a single tile's worth of values at a time
- Tile boundary artifacts are mitigated by using a tile from z-3, but not eliminated.
- This may be extended to generate optional updates of the Safecast interpolated layer later, using a higher quality but slower method to pre-generate tiles.
| IDW p=4|
Version 1.7.0 Update (current release)
1.7.0 is available on the App Store, and should amongst other things, significantly improve stability in iOS 7.
- iOS7ネイティブのビルド、 64-bitのサポート
- マップ： Googleマップの標準マップフレームワーク（アップルマップに設定することが可能）
- マップ： Safecastデータアップデート：高域でのクリッピングを防ぐためにダイナミックレンジを32ビットに増加。マルチコア·デバイス上のパフォーマンスが大幅に向上。
- オーディオエンジン：最新のオーディオフレームワーク に基いた新しいオーディオエンジンを搭載
- オーディオエンジン：現ver. よりオーディオパススルーに対応（例：同時音楽再生）
- オーディオエンジン：トラブルシューティングおよび設定変更（モード、ゲイン）を支援するためにオーディオ回路変更時にコンソールに書き込まれる情報 を詳細化
- オーディオエンジン：付属機能：マップ上の特定のCPMに合わせたランダムなクリック音再生。地図の十字カーソルで示した値で再生するには[設定] -[サウンド]を参照。
- UI ： UIを部分的にiOS7のスタイルに調整。大幅な更新を予定。
- 重要なバグ修正：マップクラッシュバグ、ガンマ分光最小/最大ビンクラッシュバグ、 Pachubeアップロードがクラッシュするバグを解消
- iOS 7 native build, 64-bit support
- Maps: Google Maps standard map framework (Apple Maps can be optionally enabled in Settings)
- Maps: Tile Engine: Significant performance improvements
- Maps: Safecast Data Updates: dynamic range increased to 32-bits to prevent clipping at high ranges. Significant performance improvements on multicore devices. New "compare to last update" layer to highlight changes
- Maps: Support for optional large offline tile cache
- Audio Engine: New audio engine built around latest audio framework
- Audio Engine: Now supports audio pass-through (for example, simultaneous music playback)
- Audio Engine: More info written to console when audio route changes to help troubleshooting and configuration (mode, gain)
- Audio Engine: Visual feedback and indication of when microphone permissions are denied in iOS 7
- Audio Engine: Novelty feature: mapping integration with random click sound output for a specific CPM. See Settings -> Sound to enable this with the value shown by the map reticle (crosshair).
- Gamma Spectroscopy: Improved gamma spectroscopy histogram performance
- Gamma Spectroscopy: Training and change resolution buttons added to gamma spectroscopy histogram control
- Settings: Reorganized settings with improved in-line help
- UI: Partial migration of UI to iOS 7 styling. More to come.
- Critical bugfixes: Map crash bug, gamma spectroscopy min/max bin crash bug, Pachube upload crash bug
- Stats bugfixes: Very high count rates and number of samples no longer underflow to 0. Mean squared error should now be calculated and displayed correctly.
- Many other misc. bugfixes
This is one of the largest incremental releases there have been to Geiger Bot. Overall, the codebase has been evolved to use current frameworks and features improved performance and less memory use.
However, with this comes some costs. The update requires iOS 6 minimum, as the Google Maps SDK for iOS requires iOS 6 minimum. For users of iOS 5, 1.6.9 will continue to function and the 16-bit Safecast map updates will still function.
Additionally, while I attempted to test this update extensively, I simply had no way to replicate every hardware configuration out there. So, if you notice any anomalies, please let me know.
Specific component notes:
- Choosing a framework:
- Interfaces to both the Google Maps SDK and Apple Maps SDK are provided.
- The code has been abstracted to work with either.
- You may toggle between map frameworks in Settings fairly seamlessly.
- If you like your map framework, you can keep it.
- All frameworks
- To view the data tiles without any basemap, set the map alpha slider to 0.
- The only 3D view with extruded buildings is with the "road" / "standard" map type when zoomed in almost to max. This is not available for all areas.
- Apple Maps - 3D view requires iOS 7.
- Yes, they both look like Starfox for the SNES.
- Google Maps-specific:
- At this time, the use of Google Maps in iOS 7 is strongly recommended for purposes of stability.
- User points and EPA Uranium Mines:
- No labels on Google Maps (yet). Available as raster tile points only.
- Indoor map floor selection:
- iPhone: hidden unless the top toolbar is displayed, to declutter the screen.
- LOD control:
- The way the LOD control works has changed for Google Maps due to both the "free" GPU resize of image tiles and the performance differences.
- I would suggest using "+" with Google Maps for performance.
- With Apple Maps, "++" is the most performant.
- Apple Maps-specific:
- Stability Issues - iOS 7
- In testing, significant numbers of memory-related (vm_pageshortage) crashes were observed and reported to Apple. These could only be partially mitigated.
- It is therefore recommend that Google Maps be used for iOS 7 devices until these issues can be fixed.
- New iOS 7 features:
- All new functionality (tilt, rotate, 3D, etc) is enabled.
- All Apple Maps interfaces have been updated to iOS 7.
- iOS 6:
- Conversely, Apple Maps is relatively stable in iOS 6.
- I found Apple Maps to offer better performance on 256 MB iOS 6 devices, and it also worked better offline.
- Basemap caching - clearing a very large cache:
- If you clear the cache, this can take a while to actually happen if the cache was particularly large (1GB+). I issue a simple single delete command for the basemap cache directory, but the OS itself must delete the files individually.
- Default map layer changes
- The "Safecast interpolation" sublayer was outdated and has been removed from the default Safecast layer.
- However, if you still wish to use it, you can do so by creating a custom map layer.
- UI anomaly when minimizing / maximizing map window (iOS 7)
- The odd delay in the map window resize is a known issue
- It is a consequence of enabling transparency for the status bar and not having fully migrated the UI to iOS 7
- This was done primarily to benefit iPhone users and allow more of the map to be visible
- This will be resolved when the UI is fully migrated.
- Gamma Spectroscopy
- Histogram Labels - Changing Device Localization
- The histogram isotope labels are now generated once and cached as static images for performance.
- If you change your device's region/localization, the way the string is formatted can change. The disk cache for histogram labels is stored in the /tmp/ directory and cleared on a device reboot, should this be an issue.
- Audio Engine
- Music Playback
- If you wish to play back music while using the app, the default system music app will stop playback when an output route changes. To resume playback, bring up the notification center and press the play icon.
- Note I cannot make the audio output on the device's speaker when a line input cable is used.
- Gamma Spectroscopy specific
- An important change that may affect a small number of users performing gamma spectroscopy may be the removal of the high-pass filter.
- Previously, the audio engine was not applying the "AGC" setting correctly, however AGC was never being applied to line input in any case.
- What this did do however is high pass filtering.
- In general, high pass filters are a bad thing for pulse height analysis.
- However, for some scintillation counter amplifiers with significant ripple issues, this may have to be enabled.
- Thus, there is a new option to force measurement mode off, which will enable high-pass filtering. I would not recommend enabling it unless you have issues.
Safecast Map Data Update
All issues with map data updates should now be fully resolved.
1.6.9: iOS 7 Gamma Spectroscopy Crash Bug (iPad Air / iPhone 5 only?)
I've recently found a bug in 1.6.9 causing a lockup when using the gamma spectroscopy histogram, and app startup crash thereafter on iOS 7. So far I can only reproduce it on an iPad 5 (Air), not an iPad 3 or iPhone 4S. It will be fixed in the next release.
The issue is related to setting a custom min/max channel.
Workaround: reset the min/max to their default values in Apple's Settings.app before starting the app:
Scintillation Counter > Min Channel: 0
Scintillation Counter > Max Channel: 32767
Note if you select the device "Bee Research GS-1100R", it will automatically set custom limits that trigger this behavior.
iOS 7 Compatibility Information - Microphone Permissions
It would seem not everyone necessarily reads the microphone permissions dialog new to iOS 7 before tapping "no". While in general it's a good idea to tap "no" to every annoying popup you see, sometimes there are exceptions.
Here's how to undo this and get audio input back:
New iOS 7 Compatibility Information
In general, 1.6.9 should work fine with iOS 7. It contains a fair amount of IOS 7 specific code and was continuously tested with every beta release of iOS 7.
- Microphone Permissions
- If you are prompted about the microphone, tap "Yes"
- Scope: This actually applies to all audio input -- including line input cables
- Privacy: Geiger Bot never records audio, it only does signal processing for pulse detection and pulse height analysis
- Performance: Performance will be slightly better if permissions are enabled in 1.6.9
- The OS does not return an error code if audio input permission is denied
- Thus, this will (correctly) cause a secondary heuristics failure on the watchdog timer for the audio engine
- The watchdog timer will then restart the audio engine every 30 seconds
- This may have a (small) performance impact
- Performance will appear to be worse at first primarily because your Apple basemap caches will be lost during the iOS 7 update and must be downloaded again. After you build up an initial tile cache of the basemap, things will improve somewhat.
- There may be performance implications beyond that -- Apple's MKMapKit behaves differently in iOS 7 and seems more aggressive about loading the basemap, causing performance issues. It also seems to spawn too many parallel queues for tile loading, assuming incorrectly it is loading static images from a remote URL, and does stupid things like force render a lower detail image unnecessarily and overcommit with yet (another) thread.
- Performance is slightly better in a native iOS7 SDK built build using the new MKOverlayRenderer class -- the pixel fill rate is higher than in iOS 6, in fact -- but overall it is choppy and unresponsive at times due to the issues mentioned above.
- Memory Use
- Additionally, in iOS7, MKMapKit retains memory caches too long and does not auto-release them correctly; this occurs even outside of loading its own tiles and is not a memory leak in any of my code. Nor in fact will it even auto-release these caches after an OS memory warning.
- At any rate, the workaround is that its caches are finally released when the interface to load the tiles is released.
- Thus, in Geiger Bot, the current default behavior of releasing all layers corrects for this accidentally. Unfortunately, this will happen more often than in iOS 6, because the caches aren't being released properly now.
- In the Safecast app which specifically does not release the layers (which themselves occupy little to no memory and are not the problem), you'll have to do this manually, or the app will eventually crash, because Apple Maps will just not let go otherwise.
- Future Solutions
- Memory Use
- This is easily addressed in the next version by forcing a release and reload of all map layers being used with a memory warning in iOS7+. This is not ideal but will suffice.
- An iOS 7 native build with the MKOverlayRenderer class in the next version will help slightly, as will the generally 2x faster performance in my data tile rendering code
- Additionally, I have implemented some measures to help performance in iOS 7. I now monitor for and detect the "runaway" condition caused by Apple Maps and kill it before it can grow out of control using a model based upon a cellular anti-cancer response.
- There are some inefficiencies in doing this, but they are greatly preferable to allowing Apple Maps to cause critical memory pressure, application failure or even system failure, all of which I have seen it do in testing.
- tl;dr: mapping will be better in iOS 6 for some time to come. It will probably never be as good in iOS 7 until I replace Apple Maps in its entirety.
Update Map Data Update (Server) - "Most Recent Data" Check
You may have noticed you could download map updates that weren't actually updates.
That should be fixed now.
Prior to this, the update map data was always "new" every 4 hours, period. So, now the server process actually checks whether or not there is new data before generating the update file.
Other changes to the server process have included improved data filtering, and data clustering* to improve map performance in-app.
*(by "data clustering" I mean storing the tiles how they are most likely to be loaded, which is in recursive quad groups and similar to Microsoft's quadkey.
Unfortunately the server-side change only affects the highest resolution tile level in app (13), for the rest the app will need to be updated. Until then, levels 1-12 will remain clustered by row, which isn't bad, but isn't quite as optimal.)
New Version 1.7.0 (in development)
- Maps: 200%+ Performance Increase (layer / data tile rendering)
- Unexpectedly, recent developments have created a very significant speed improvement for mapping, particularly noticeable on iPads
- The cost of this is that the alpha premultiplication step is being approximated -- meaning the sublayer alpha on custom map layers will get reduced to be 12%, 25% or 50% rather than the 10% increments now. (x >>= y)
- Nonetheless, it's hard to argue with massive performance improvements.
- iOS 7 support: Improved iOS 7 support / code refactoring.
- A lot of this is to maintain backwards compatibility with iOS 5 / 6
- There will also be UI design changes to be more consistent with the iOS 7 UI in later versions
- Maps: Basemap: Improved 3rd party basemap tile speed rendering / caching / offline use
- Maps: Safecast Data Updates:
- I am working on porting the tilling code to the server (unfortunately, nothing tiles to 16-bit PNGs)
- This would eliminate processing time on-device and make downloads less than half the size they are now.
- No ETA.
- Maps: Linked attribute layers
- This would enable showing, for example, the most recent date of measurements at a point on the map from the Safecast data
- This may or may not make it into 1.7.0, and depends on the time requirements of data structure changes as well as porting tiling code to the server.
- End of IOS 4 support:
- Cue sad violin music.
- 1.7.0 will be targeted to use the iOS 7 SDK, as will all versions moving forward
- This makes testing iOS 7-built apps on iOS 4.3.1 impossible for me, meaning any new version could break on all iOS 4 devices and I would have no way of knowing or rolling back
- (Arguably, the simulator was no guarantee of that either.)
- Thus, the failsafe is for me to set the minimum required version to iOS 5, such that iOS 4 users are guaranteed to be left with a working app.
- This is to protect iOS 4 users.
- However, this also means iOS 4 users can never download a working version from the App Store again after 1.7.0 is released.
- I strongly encourage iOS 4 users to backup version 1.6.9 with iTunes on their PC/Mac
- Unfortunately this is a real issue -- for example, 1.6.9 contained no code that required iOS 5+ yet it still broke on iOS 4 despite 1.6.8 working. This was due to very odd timing / object instantiation issues. I fixed these, but if I had not, it would have broke on iOS 4 again.
- I have expressed concerns regarding this to Apple, and encourage any users affected by this to do the same. Realistically though, I wouldn't buy iOS 4 any green bananas.
New Version 1.6.9 (current release)
- On-demand Safecast map data updates
User-logged points (and EPA uranium mines) now usable in custom map layers
- ERRATUM: This will be available in 1.7.0. It would seem I neglected to actually add the new user points dynamic tile layer to the layers available in the map settings plist. (the settings lists are static so they can be set outside of the app as a failsafe)
- Map tile rendering speed improvements
- Limited iOS 4 compatibility testing (this is a good thing, most versions didn't get any)
Live Map Data Updates - Update
On-demand map data updates (Safecast data only) are good to go for the next release; the server component is in place and testing is ongoing. It's more or less what you'd expect and is a single-button process. In general, expect it to take 10 minutes and download about 80mb of data.
The only caveat is that on older devices, the process takes about twice as long, and there can be memory issues, although my 256MB iPod Touch with iOS 5 survived.
Also, while it runs as an asynchronous process, I would recommend leaving it alone while it does the update. Especially after the download while processing the data, it will be very CPU and memory intensive on some devices and they will need their full resources available. The process itself is reasonably robust and performs data integrity checks.
Live Map Data Updates
- To date, all datasets have been static
- Only updated with new versions of app
- Data Preprocessing
- All large datasets must be tiled for performance
- Geiger Bot itself has tiled all existing datasets
- Historically, too slow to tile on device (~48 hour runtime)
- Has always been done in the iOS Simulator (~8 hour runtime)
- Performance bottleneck was I/O, not CPU
- New: Significant Performance Improvements
- 180x faster tiling performance
- Now practical on device
- Possible Applications
- On-demand updates of map data
- Very fast caching / display of user logged point data
- Very fast caching / display of future sources of online point data
- Export of tile sets for use on static web maps
- Performance Testing
- Input details:
- Safecast data @ 19m resolution
- 3,757,853 XYZ point features (SQLite3 table)
- Output details:
- 30,684 tiles
- Web Mercator tile levels 1 to 13
- File format:
- RAW, 16-bit, 1x channel, lossless compression (zlib)
- Storage: Indexed SQLite3 database
- Compression ratio: 122.7 : 1 (@ zlib level 9)
- Old code:
- New code:
- iOS simulator: < 3 mins
- iPad 3: 6.7 mins
- This does not include interpolated data layers
- Not practical speed-wise on device (yet)
- Requires server support
- Not as ideal as tile server
- Even if updating takes a few minutes, that's still worse than 0 minutes.
Updates for Map Point Features (User Points, EPA Uranium Mines)
| Uranium Mines -> Data Tiles|
- Dynamic Data Tiles
- An interface has been created which allows using point features as data tiles
- Thus point features are now optionally available as sublayers when creating a custom map layer.
- Does not replace existing display options for them, which are still available.
- Allows for faster rendering, higher resolutions, and layer combinations.
- Ex: Showing points you logged with natural background radiation subtracted.
- For User Points, the value is the average dose rate at that point.
- For Uranium Mines, the value is the count of the number of mines at that point.
- Attributes (names/dates) are not currently supported; this only processes numeric values.
- Custom symbology is not currently supported. (ie, the mine symbol)
- Performance may be degraded for large datasets (20k+ points(?)); this uses non-pyramided data and projects the coordinate system dynamically.
- Map tiles get cached longer, meaning you may need to reselect the layer to see "live" data being logged show up.
- User Points
- Performance improvements
- Dose rate values will now be averaged again if points were aggregated/binned
- EPA Uranium Mines
- Performance improvements
- LOD and point size values will now be respected
- Labeling has been improved
- Background removed
- Font size increased
- ALLCAPS -> Title Case
- If showing mine names for a label that many points got aggregated into, it will try to find a real name if the default one was empty or "Unknown"
Version 1.6.8 (latest release)
Version 1.6.8 has been released; credit to Apple's review team for the expedited review.
This is an early release specifically to fix iOS 4 issues.
My apologies to iOS 4 users "in the zone" who inadvertently lost most ratemeter functionality in 1.6.7.
- iOS 4 Fixes
- Main numeric display now works again correctly
- (was blank in 1.6.7 in iOS4 only)
- All map features now work in iOS 4
- (previously, no layers, etc even worked at all)
- Known minor cosmetic issues remain
- Some Emoji / Unicode symbols are substituted or missing
- Some controls are not styled / tinted
- Causal Factor(s)
- Display Not Updating
- For reasons unknown, in iOS 4 only, the main UI was being initialized twice (UIViewController viewDidLoad). I tried pretty much every suggestion on Stack Overflow and nothing worked.
- This was originally observed with the release and upgrade to the iOS 6 SDK as a base for the app.
- At the time, while odd/annoying, this caused no issues.
- However, the new display control was not added with interface builder as the previous labels were, but constructed directly via code.
- As one of the two initializations is likely coming from the Interface Builder file it is likely the combination of the two factors resulted in a partially initialized control that was never getting refreshed.
- Because the core issue could not be positively identified, and none of the possible fixes I found worked, I had to create a workaround:
- 1. A mutex lock is acquired to set a unique atomic threadId on a singleton
- 2. This prevents the 2nd call to viewDidLoad from working
- 3. In testing, in every case the 1st thread hitting viewDidLoad was the one that mattered.
- 4. As long as this assumption holds true, I believe this workaround will be fine.
- Maps not Working
- The UIPickerViews which show the LUT, layer, basemap etc require a fixed width be specified in iOS 4 when overriding the "viewForRow" method.
- As such, whenever I implemented custom labels for the UIPickerViews, mapping in iOS 4 broke.
- However, this may not have been immediately apparent; as long as a valid selection was chosen and stored to preferences before this occurred, and no attempt was made to change it.
In addition to iOS 4 fixes, this contains some additional features that were in-progress and included as a result.
- Map Performance
- New bitmap indexing system is now fully implemented
- See "Maps - More Info" if you really want to know the details
- Map Symbology: Non-Retina Display improvements
- Pre/post-processing FX reduced in size by half for non-Retina displays
- Map User Points Database Export
- As noted in Settings -> "Log File":
- Set default log email address to "database"
- Then use normal email log function (hold "Settings" button down)
- Purpose: Emergency backup for your data in the log file
- The log file can be deleted or cleared
- The user points database currently cannot be
- Ideally, they are both written to at the same time
- Format: SQLite3 database
- Data recorded: Lat, lon, dose rate in uSv/h, year, month, day of month
- The database is intended for mapping data.
- It won't log data that can't be mapped (ie, GPS off)
- It stores only a few key fields relative to the full log file
- SQLite3 format is more difficult to work with
- Nonetheless, it's in there as a backup if you should ever need it.
HOWTO: Export data from User Points SQLite database
Remember, this is internal app data and is only here to provide you with a failsafe backup for your data in the log file. The app itself uses this database because it is much faster to retrieve data from than a plaintext log file.
Normally, you should just use the log file and ignore this. The log file records many more fields and requires no special effort to use. This is a contingency you will probably never need to use.
- 1. Requirement: SQLite
- SQLite is a charming little super-efficient serverless database originally created by a defense contractor for the US Navy as part of the ongoing effort to blow stuff up with guided missiles. Just like John Moses Browning intended.
- Today, it does far less dramatic things like store the contents of your contact list; it is used everywhere on mobile devices.
- OS X has SQLite built-in.
- Other OSs: download it here. ("precompiled binaries") (free / open source)
- On Windows, personally I just put SQLite3.exe in the /windows/system32 directory so it will work from anywhere.
- 2. Perform Export
- A. Open Command Prompt / Terminal
- Windows: Start -> Run -> cmd.exe
- OS X: Applications -> Utilities -> Terminal
- B. Go to Location of Database
- ndolezal$ cd /Users/ndolezal/Downloads
- NOTE: Of course, this varies depending on where you downloaded it to.
- C. Open Database
- ndolezal$ sqlite3 userlog.sqlite
- D. Verify Database Opened Correctly
- sqlite> .tables
- RadGroup RadLog
- If you don't see "RadGroup RadLog"...
- It probably couldn't find the file because you made a typo.
- So, it will create a new database with that name, and a size of 0 bytes. Whoops?
- Verify you're in the right directory and spelled the filename correctly.
- Those tables will exist even if you haven't logged any data.
- E. Configure Export
- NOTE: Don't forget the "." and ";" as the syntax must be exact.
- sqlite> .headers on
- sqlite> .separator ','
- sqlite> .output export.csv
- sqlite> SELECT * FROM RadLog;
- sqlite> .quit
- F. Done.
- You should now have a file named "export.csv" in that directory
- This file can be imported into a spreadsheet or GIS program
- G. (OPTIONAL) Normalize Date
- Issue: The date is in 3 columns, which is non-standard (my bad)
- Effect: This might make it hard to use as a date type in whatever you import it to
- Fix: Use this in step (E) above, in place of "SELECT * FROM RadLog;":
- sqlite> SELECT RadLogID, Lat, Lon, DER, CAST(YY AS VARCHAR(4)) || '-' || CAST(MM AS VARCHAR(2)) || '-' || CAST(DD AS VARCHAR(2)) AS MeasurementDate FROM RadLog;
- (example of output)
iOS 4 and Version 1.6.7
UPDATE: This is fixed in 1.6.8.
iOS 4の内でのみ、大型数値表示は空白です。私は修正に取り組んでいます。 iOSの5、6、および7は影響を受けません。
In iOS 4 only, the large numeric display is blank. I am working on a fix. iOS 5, 6, and 7 are not affected.
Yes, iOS 4. It is my intention to support older versions of iOS for as long as possible. I believe good radiation detection equipment is something you should be able to pull out of the collapsed ruins of a wall in the wasteland in 200 years, slap batteries in, and have it be able to function. Unfortunately, with smartphones about the best you can do is three years.
3D Map Data Visualization
Camera in Tokyo Harbor, facing north-ish.
Simple 3D visualization of the "Safecast Interpolation" layer from 2013-07-12.
Interpolation was created using Empirical Bayesian Kriging in ArcMap 10.1, 153m resolution, projection: Web Mercator Aux sphere. (identical to data in app v1.6.7) EBK parameters 500/3/500, run time ~5 days on i7 3770k O/C'd @ 4ghz.
3D visualization created with ArcScene 10.1, with elevation in meters = uSv/h * 5000.0, linear scaling, full resolution. No hillshading. Color ramp is an approximation of the default LUT in Geiger Bot.
The combination of non-linear scaling for the color to highlight low ranges, and linear scaling as elevation helps show the relative difference logarithmic scaling can have.
Most development time was spent refactoring code in preparation for iOS 7 framework changes and UI redesign.
But, some new things did get added.
1. Updated Safecast data (2013-07-12)
2. Includes historical Safecast data (2013-04-15)
3. Changes to make map data easier to see
4. iOS7 compatibility updates
5. Misc bugfixes
6. Several new LUTs
What do I mean by "easier to see"? Basically two new effects: 1) "smart resize" and 2) a black halo (outline).
It's probably easiest to see them in action. Below is an example using a Safecast drive route in an area I'm sure some of you may be familiar with.
| || || |
| 1. Normal 1:1 Rendering|
While there, the route is difficult to see.
| 2. LOD "HD" Selected|
Effective, but this somewhat crudely just downsamples the resolution by 16x.
| 3. New Resize + Halo|
Both smooth and detailed. The black halo outline helps increase contrast with the basemap.
These effects can be defined on a per-sublayer basis with a custom layer as pre-processing (resize) and post-processing (halo/shadow) effects. Just remember to turn them off for interpolated layers, or you'll be wasting CPU cycles for something that's not really noticeable. (it's relatively fast, but still, it all adds up)
All predefined layers now use a 3x3 resize and 5x5 halo as appropriate.
The historical Safecast dataset includes both the data and EBK interpolation layers. You can use these in custom layers with "subtract" to see changes over time. The NNSA data from 2011-06-30 also allows for another point in time for comparisons.
There is also a new predefined layer, "SC New > 2013-04-15", which highlights newly surveyed areas. Note this does not highlight updated areas, which is a question that requires more information to answer than I happened to have in time for this release.
Minor update release with updated content and semi-critical bugfix.
1. Updated Safecast data (2013-05-16)
2. Fix for pulse shape training mode bug in gamma spectroscopy
- Real-Time Interpolation
- Whenever you map a set of measurement points, there are holes. Interpolation is filling in those holes, based around the principle that things are closer together are more likely to be similar than things further apart.
- Currently this exists in prototype form using IDW (inverse distance weighting)
- This takes about 1s per tile using fully SIMD vectorized code if the input samples are decimated
- Further improvements are necessary to improve speed and minimize tile boundary artifacts
- Eventually I plan to apply this to downloaded live data from sensor networks
- Above screenshot: prototype of IDW interpolation, mostly with a power of 2. Multiple powers (2-16) were attempted and the result with the lowest standard deviation was chosen automatically. (that particular brute-force technique is not well-suited to realtime interpolation)
- The source data in the above screenshot was the "Safecast Data" layer (ie, just the routes/points).
- Clipping to a feature or raster boundary may need to be added as well; the issue is the storage space required by clipping features.
- Database management tools
- Backup, restore, export, etc database
- Purge all data, or by date / geographic extent
- This is currently in the Settings -> Log File screen but is not wired up. All the coding is done.
- Energy correction for scintillation counters
- Unfortunately it is not possible to directly use energy tables for correcting for dose rates via energy with scintillation counters due to the relatively low amount of pulses that survive the pulse shape recognition process intact (and the data is meaningless without that)
- However, it occurs to me after playing with satellite imagery that I may be able to apply the "pan sharpening" technique to get around this
- Pan Sharpening - Satellite Imagery
- In satellite imagery, color bands are of lower resolution than the panspectral (monochrome) band
- By first making a color image, then using the panspectral image as the luminance value in a HSV layer operation, you make a hybrid image combining the relative color balance of the color bands with the luminance of the pan band
- This is done in almost every satellite image in every mapping program
- Pan Sharpening - Scintillation Counters
- Thus, the same principle may be able to be applied here
- The count rate's dose rate conversion is offset by a computed value for the spectral distribution in question
Very Later Development
- possible OS X / Windows / Android ports (unlikely due to time constraints)
- OSX/Windows: if you just need basic microphone sensor use and Pachube uploading, consider Osamu Higuchi's free GeigerRobo)
Would you like Geiger Bot available in your native language? If so,
contact me and I will send you a strings file to translate, and
incorporate it into the next version. (note: there may be issues with
right-to-left languages; ie, Hebrew and Arabic, that could cause
delays) I will also credit you on the about screen. Note that some of
the terms are highly technical and there are space considerations in the
(machine translation has generally produced results worse than keeping it in English)
I welcome all feedback. If Geiger Bot is not adapting to your set-up with at least 95% accuracy, please let me know.
For any questions, complaints, localization corrections, rants, etc please email:
(credit to Osamu Higuchi for Japanese translations)
Гейгер Бот в Припять
Geiger Bot in Pripyat
(normalized map scales and units to Japan.
Japan vs. US Dose Equivalent Rate
USGS/GSC data corrected for cosmic radiation.
Japan data: Safecast, US DOE/NNSA
NA Data: USGS, GSC, NGA)
Doses: Fukushima vs. Nuke Tests (I-131)
(comparison of Iodine-131 dose from Fukushima and US atmospheric nuclear testing. US color legend and dose equivalent units converted to match Japan map. Note I-131 has a half-life of 8 days so this reflects historical exposure in either case. I-131 is generally considered to be the most directly harmful fission product.)
(US Data: National Cancer Institute
Japan Data: MEXT)
User Action Shots
Version 1.1.1 on an iPad, next to a Gamma Scout and calibrated Ludlum 3 by Drax.
Version 1.1.1 on an iPad, next to a CDV-700 by Apotheoun. (YouTube)
- 約0.1Vに（9Vp- Pについてこの場合、の）出力電圧を分周
- 出力とiPhoneのマイク入力を切り離すしないでください。 iPhoneのマイク入力のドロップにDCバイアスをしましょう
Schematic for using the headset input by Osamu Higuchi. He notes:
"- Divide the output voltage (in this case, about 9Vp-p) down to about 0.1V
- Do not decouple the output and iPhone mic input. Let the DC bias on iPhone mic input drop" (more)
Headset mic mod by Laurent Lieben. No soldering required. (more...)