Skip to content

Commit c4c94e7

Browse files
committed
Add FAQ section.
1 parent 1295ee2 commit c4c94e7

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

README.rst

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,49 @@ Development
204204
To run the all tests run::
205205

206206
tox
207+
208+
209+
FAQ
210+
===
211+
212+
Why not Smiley?
213+
---------------
214+
215+
There's some obvious overlap with `smiley <https://pypi.python.org/pypi/smiley>`_ but there are huge differences to how things
216+
work and from my perspective are problematic in Smiley:
217+
218+
* Complexity. Smiley is over-engineered:
219+
220+
* It's uses IPC and a SQL database.
221+
* It has a webserver.
222+
* It uses threads. Side-effects and subtle bugs are introduced in your code.
223+
* It records everything. Tries to dump any variable. Often fails and stops working.
224+
225+
Why do you need all that just to debug some stuff in a terminal? Simply put, it's a nice idea but the design choices work
226+
against you when you're already neck-deep into debugging your own code.
227+
* Tracing long running code. This will make Smiley record lots of data, making it unusable.
228+
229+
Now because Smiley records everything, you'd think it's better suited for short programs. But alas, if your program runs
230+
quickly then it's pointless to record the execution. You can just run it again.
231+
232+
It seems there's only one situation where it's reasonable to use Smiley: tracing io-bound apps remotely. Those apps don't
233+
execute lots of code, they just wait on network so Smiley's storage won't blow out of proportion and tracing overhead might
234+
be acceptable.
235+
* Use-cases. It seems to me Smiley's purpose is not really debugging code, but more of a "non interactive monitoring" tool.
236+
237+
Why (not) coverage?
238+
-------------------
239+
240+
For purposes off debugging `coverage <https://pypi.python.org/pypi/coverage>`_ is a great tool but only as far as "debugging
241+
by looking at what code is (not) run". Checking branch coverage is good but it will only get you as far.
242+
243+
From the other perspective, you'd be wondering if you could use Hunter to measure coverage-like things. You could do it but
244+
for that purpose Hunter is very "rough": it has no builtin storage. You'd have to implement your own storage. You can do it
245+
but it wouldn't give you any advantage over making your own tracer if you don't need to "pre-filter" whatever you're
246+
recording.
247+
248+
In other words, filtering events is the main selling point of Hunter - it's fast (cython implementation) and the query API is
249+
flexible enough.
250+
251+
252+

0 commit comments

Comments
 (0)