Perception: Human perceptible printouts
bklippstein.github.com/perception/frames.html
Welcome to Perception. It’s a intuitive toolkit for simple everyday debugging. Perception offers a powerfull replacement for print, puts and pp and is an alternative to Awesome Print.
You get auto-intended and structured output on your console without any configuration.
Perception also offers temporary printouts (overwritten by the next print), printing two informations in one line without destroying the structure and optionally slows down printing to readable speed, depending on the complexity of the output.
see: Powerfull replacement for print, puts and pp
You get auto-intended and structured output on your console without any configuration. Usage:
<span class='rubyid_require identifier id'>require</span> <span class='string val'>'perception'</span>
and use see instead of pp, puts, print and .inspect.
This is the printout for a nested hash as example:
<span class='lbrace token'>{</span><span class='symbol val'>:hash</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='rubyid_true true kw'>true</span><span class='comma token'>,</span>
<span class='symbol val'>:init</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='rubyid_true true kw'>true</span><span class='comma token'>,</span>
<span class='symbol val'>:nil</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='rubyid_nil nil kw'>nil</span><span class='comma token'>,</span>
<span class='symbol val'>:symbol</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='symbol val'>:symbol</span><span class='comma token'>,</span>
<span class='symbol val'>:text</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='string val'>'text'</span><span class='comma token'>,</span>
<span class='symbol val'>:array</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='lbrack token'>[</span><span class='integer val'>1</span><span class='comma token'>,</span> <span class='integer val'>2</span><span class='comma token'>,</span> <span class='integer val'>3</span><span class='rbrack token'>]</span><span class='comma token'>,</span>
<span class='symbol val'>:integer</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='integer val'>1</span><span class='comma token'>,</span>
<span class='symbol val'>:string</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='string val'>'hallo'</span><span class='comma token'>,</span>
<span class='symbol val'>:nochn_hash</span> <span class='assign token'>=</span><span class='gt op'>></span> <span class='lbrace token'>{</span><span class='symbol val'>:key=</span><span class='gt op'>></span><span class='symbol val'>:value</span><span class='comma token'>,</span> <span class='symbol val'>:bla=</span><span class='gt op'>></span><span class='symbol val'>:blubb</span><span class='comma token'>,</span> <span class='symbol val'>:array=</span><span class='gt op'>></span><span class='lbrack token'>[</span><span class='symbol val'>:a</span><span class='comma token'>,</span> <span class='symbol val'>:b</span><span class='comma token'>,</span> <span class='symbol val'>:c</span><span class='rbrack token'>]</span><span class='comma token'>,</span> <span class='symbol val'>:another_key=</span><span class='gt op'>></span><span class='string val'>'another value'</span><span class='rbrace token'>}</span><span class='rbrace token'>}</span>
See more examples at Example_Output_1 and Example_Output_2 or watch the interactive demo at demo3. More: Object#see
log: use logging without configuration
You can use log instead of see, the formating is the same. The log directory and the logfile are automatically created if necessary.
More: log, rawlog, seee.logger
Intelligent round: slash needless digits
Intelligent round: slash needless digits. Specify only the significant digits so that the magnitude can be easily realised. Needless are digits that are
-
beyond the measurement precision or
-
not perceived by humans (instead they disturb the reception)
Example:
<span class='rubyid_input identifier id'>input</span> <span class='lparen token'>(</span><span class='plus op'>+</span><span class='regexp val'>/-) result (+) result (-) result.class
----------------------------------------------------------
12567.89 12600 -12600 Fixnum
1256.789 1260 -1260 Fixnum
123.56789 124 -124 Fixnum
100.01 100 -100 Fixnum
100.0 100 -100 Fixnum
99.9 99.9 -99.9 Float
12.0 12 -12 Fixnum
12 12 -12 Fixnum
12.56789 12.6 -12.6 Float
1.256789 1.26 -1.26 Float
1.5 1.5 -1.5 Float
0 0 0 Fixnum
0.1256789 0.126 -0.126 Float
0.01256789 0.0126 -0.0126 Float
0.001256789 0.00126 -0.00126 Float
0.0001256789 0.000126 -0.000126 Float
</span>
More: significant
Easily human readable numbers
Formats a number for easily human readability. Example: (using .inspect_see without options)
<span class='rubyid_input identifier id'>input</span> <span class='lparen token'>(</span><span class='rubyid_barrier identifier id'></span><span class='rparen token'>)</span> <span class='rubyid_output identifier id'>output</span> <span class='lparen token'>(</span><span class='rubyid_barrier identifier id'></span><span class='rparen token'>)</span> <span class='rubyid_note identifier id'>note</span>
<span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span><span class='minus op'>-</span>
<span class='integer val'>-7213541</span> <span class='comment val'>########-7 210 000 ######## Intelligent fallback strategy if space is not sufficient</span>
<span class='integer val'>7213541</span> <span class='comment val'>########7 210 000 ########</span>
<span class='integer val'>-553337</span> <span class='comment val'>######## -553 000 ########</span>
<span class='integer val'>553337</span> <span class='comment val'>######## 553 000 ######## Intelligent round: slash needless digits</span>
<span class='float val'>-12567.89</span> <span class='comment val'>######## -12 600 ########</span>
<span class='float val'>12567.89</span> <span class='comment val'>######## 12 600 ######## Thousands separator only if necessary</span>
<span class='float val'>-1256.789</span> <span class='comment val'>######## -1260 ########</span>
<span class='float val'>1256.789</span> <span class='comment val'>######## 1260 ########</span>
<span class='float val'>-123.56789</span> <span class='comment val'>######## -124 ########</span>
<span class='float val'>123.56789</span> <span class='comment val'>######## 124 ########</span>
<span class='float val'>100.01</span> <span class='comment val'>######## 100 ########</span>
<span class='float val'>12.0</span> <span class='comment val'>######## 12 ########</span>
<span class='integer val'>12</span> <span class='comment val'>######## 12 ########</span>
<span class='float val'>-12.56789</span> <span class='comment val'>######## -12.6 ########</span>
<span class='float val'>12.56789</span> <span class='comment val'>######## 12.6 ########</span>
<span class='float val'>-1.256789</span> <span class='comment val'>######## -1.26 ########</span>
<span class='float val'>1.256789</span> <span class='comment val'>######## 1.26 ########</span>
<span class='integer val'>-0</span><span class='integer val'>.1256789</span> <span class='comment val'>######## -0.126 ########</span>
<span class='integer val'>0</span><span class='integer val'>.1256789</span> <span class='comment val'>######## 0.126 ########</span>
<span class='integer val'>-0</span><span class='integer val'>.01256789</span> <span class='comment val'>######## -0.0126########</span>
<span class='integer val'>0</span><span class='integer val'>.01256789</span> <span class='comment val'>######## 0.0126########</span>
<span class='integer val'>-0</span><span class='integer val'>.001256789</span> <span class='comment val'>######## -0.00126########</span>
<span class='integer val'>0</span><span class='integer val'>.001256789</span> <span class='comment val'>######## 0.00126########</span>
<span class='integer val'>-0</span><span class='integer val'>.0001256789</span> <span class='comment val'>######## -0.000126########</span>
<span class='integer val'>0</span><span class='integer val'>.0001256789</span> <span class='comment val'>######## 0.000126########</span>
Features:
-
aligned right with the separator as reference point
-
you can preced a currency symbol or append units, without destroying the alignment
-
intelligent fallback strategy if the predetermined space is not sufficient
-
thousands separator if necessary, and only if necessary
-
only the significant digits are specified so that the magnitude can be easily realised (see #significant)
If you don’t need alignment and thousands separator, use significant instead.
See Schreibweise von Zahlen. More: inspect_see
Examples and Demos
-
demo3 (interactive)
More Info
-
Documentation: github.com/drumherum
-
Source code: github.com/bklippstein
-
License: cc-by-sa Creative Commons Attribution-Share Alike 3.0 Germany
-
Autor: Björn Klippstein
Disclaimer
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.