7 ms·
Show HN: God mode in production code – a new way to debug in Scala
- drorweiss 13y agoLooks great!
- saryant 13y agoI've been tracking down a NullPointerError in Play's new JSON inception handling. Eclipse's debugger has gotten me nowhere, I look forward to seeing how this one works!
- elvinj 13y agoI know that at least from my experience debugging our apps in production did become harder as we scaled out in terms of servers, users and code. I do wonder if its something that should be handled at the code level (by being more defensive, taking a more immutable approach) or by having better debugging tools. Anyone knows if this supports Ruby?
- wereHamster 13y agoOr by using a better type system. Or by using the type system that's available in the language. Because it's all too easy to ignore the types and for example call `get` on a Scala Option value, or `fromJust` on a Haskell Maybe. Both will throw an exception at runtime if the Option/Maybe is empty.
- elvinj 13y agoType safety does help a lot. The real hard ones I found to track down are the ones where you have to chase for a particular state to re-occur and you can't get a repro from ops or qa. At least for me these are the main bummers...
- taeric 13y agoOf course, the retort there is as much "write simpler programs" as it is "use the type system." I've seen and been a part of many a tangled knot in a type system that, while ostensibly safe, was so much more involved to do the simple things that I think it caused more bugs.
- wereHamster 13y agoI'm not saying strongly typed languages are bugfree. But they eliminate whole classes of bugs. The OP was asking about programming techniques to improve code quality or tools to help with debugging. Well, a type system is such a technique/tool that checks for bugs at compile time.
- taeric 13y agoIndeed. Apologies for what was too trite of a response. I can't explain why, but I have been getting heavily lured by the dynamic typing of lisp, lately. I blame that I am finally watching the SICP lectures online. :)
- timdorr 13y agoPassenger Enterprise supports a live irb and debugger: https://www.phusionpassenger.com/enterprise#debugger_support https://www.phusionpassenger.com/enterprise#debugger_support
- stasix 13y agolooks promising.
- mpeg 13y agoI'd give my firstborn for a debugger/profiler like this in .NET
- kstenson 13y agoClosest I know of is IntelliTrace: http://msdn.microsoft.com/en-us/library/vstudio/dd264915.aspx http://msdn.microsoft.com/en-us/library/vstudio/dd264915.asp...
- j_s 13y agoWhich requires Visual Studio Ultimate, listed at $13300/seat. https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#Editions_feature_grid https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#Editio... http://www.microsoftstore.com/store/msusa/en_US/pdp/productID.254640300 http://www.microsoftstore.com/store/msusa/en_US/pdp/productI...
- baboo 13y agohttp://tpb.piraten.lu/torrent/7963590/MICROSOFT_VISUAL_STUDIO_ULTIMATE_2012a__ThumperDCa__ http://tpb.piraten.lu/torrent/7963590/MICROSOFT_VISUAL_STUDI...
- vosper 13y agoPlease don't post links to pirated software.
- analisiracing 13y agoDear Vosper, I would like to connect with you. My email address is analisiracing@gmail.com Thanks Captain
- Retric 13y agoThat may be the list price, but my company pays around 2k/year for a MSDN ultimate subscription for each developer. Which includes licenses that don't expire for, Visual Studio Ultimate, every version of Windows, Office, SQL Server, etc.
- gurdo 13y agoThere's a very strong founding team around this company. I don't do Java too much these days, but if I were, I'd definitely use Takipi.
- orenbarzilai 13y agoWhat about python?
- spatz 13y agoFrom the FAQ: Which languages do you support? Takipi works at the JVM level. This means we support all languages running on the Java Virtual Machine. These include - Java, Scala, Groovy, Clojure, etc.. Click here to learn more about viewing Scala code in Takipi. We plan to support more software VMs such as CPython and Ruby MRI in the future.
- thejash 13y agoJust FYI, most of this is a lot easier in python. You can get the full stack trace and all of the values of all of the variables when there is an exception, something that is orders of magnitude more difficult to do with Java/Scala. You'd have to be a bit creative to get the "full variable value history" stuff working, but it would probably be possible with some hacking on the setattr methods for your objects (assuming you have full control over the system) I had a bunch of code like that for my previous (python) projects. I've really missed it now that I've moved to scala/java, so I'm pretty excited for this project.
- shpxnvz 13y agoSignup is broken right now, so maybe someone else can answer. From the website it appears that the debugger is a SaaS app that connects to the agent on your production box from their servers... is this the case?
- nivstein 13y agoThe product consists of a slim JVM agent which connects and offloads the heavy crunching to Takipi's backend.
- shpxnvz 13y agoGiven the nature of JVM agents, this means that the Tikipi backend, should it choose, may access all the data in the production application. Correct? ETA - Thanks, missed that page on the site.
- nivstein 13y agoThe moment you sign-up for Takipi a secret AES-256 key is generated for you (and never stored by Takipi in any way or form, and you manually enter it on your machine when installing the agent). This key is used to encrypt every piece of application data which leaves the machine. The source code is also encrypted similarly. The source code and the data are only decrypted in your browser when viewing the details of the event. You can read more about security at Takipi here: http://www.takipi.com/features.html?nav=security http://www.takipi.com/features.html?nav=security
- sillysaurus 13y agoThis makes no sense whatsoever. Their application is doing the encrypting. That means their application can do whatever it wants, including making it trivially easy to reverse the encryption. I get that the intentions are good, but https would provide exactly the same trust guarantees, and ultimately it bothers me that they would try to mislead people into a false sense of security like this. If their application is encrypting data which is sent to their servers, then that means their severs have complete access to your data. (Whether they choose to make use of this power is up to them. They certainly have it, though.) Encrypting the data prevents it from being leaked if their servers are hacked and their database stolen, which is good. But acting like they have no power to access your data is absurd.
- baboo 13y ago"to log and send data to Takipi's analysis servers" ???!!! Is this for real? I'm surely going to send all my private code, data and who knows what else to your servers! I have been waiting for this since forever, and I'm glad to have this opportunity now! And... it slows everything by 5% constantly?!? To basically take a core dump for later analysis? (in case it's not obvious, such a thing should have no overhead whatsoever when fatal exceptions are not thrown) Lol, is it 1st April again?
- hmottestad 13y agoYou know, preferably it should actually make your servers run 5% faster :) Seriously though. Did you really expect a tool that continuously monitors your app and can produce stunning and relevant information about states leading up to a crash to have no effect on performance?
- vovafeldman 13y agoLooks cool!
- zer0gravity 13y agoTesla said that he could simulate the behaviour of his contraptions to the smalles detail in his head and without exception, they ran that way once he built them for real. I think that a good programmer should be able to do this with his programms, and without flattering myself I can say that in 99% of the cases when an error happened, the answer occured to me almost instantly or after a few moments of thinking and trying to simulate what happened in my head. I have to confess that these were instances when the whole code was mine. Working on code you don't really understand is a major mistake. But this is another issue.. Sure it remains the 1%.. but my point is that developing the thinking abbilities instead of debugging tools is a far better alternative.
- hmottestad 13y agoSo you don't need any tools. Good for you. For the rest of us, having a tool to step through complex things like threaded recursion is really convenient (not that I would ever consider threaded recursion in any situation).
- the1 13y agoyou haven't seen aged code base with 3000+ JSP with many ways of accessing different data sources and no coherent paradigm in general.
- zer0gravity 13y agoI must confess, I'm a coward. If I would ever see something like this I would run like hell. Programmers all over the world are taking too much bulshit.. seriously..
- willismichael 13y agoI was feeling all smug thinking that I could one-up you, but in the end you win: find -name "*.jsp" | wc -l 1344
- octo_t 13y agoI can see you've never had to debug multi-threaded code or use 3rd party software ever or a project too large for one person to understand or a misconfigured webserver on the other end.
- szeevim 13y agolikes the monsters
- trailfox 13y agoWow. Wish I could deploy this sort of tooling behind a firewall.
- spuz 13y agoThis looks simliar to Chronon which is a similar debugging tool that works on Java (though not other JVM languages) applications.
- nivstein 13y agoUnlike Chronon, Takipi is built for monitoring your JVM in production, imposing minimal and predictable overhead.
- LinaLauneBaer 13y agoChronon is also built for monitoring your JVM in production. At least that is what they say on their website: http://chrononsystems.com/solutions/production http://chrononsystems.com/solutions/production
- LinaLauneBaer 13y agoI have used Chronon for several weeks during a very strange project. The project was about integrating a highly complex financial system in our own infrastructure. The challenging part about this financial system was that it was written in a multitude of languages (Java, Perl, C, C++, ...) and that it had to communicate with external services and it had hard timeouts built in which were enforced externally. So if something went wrong and I wanted to find out I had only 20 seconds in the debugger to find out because then the timeouts would kick in and there was nothing I could do about it. With Chronon I was able to step through the code after it had already run with no time constraints. Saved me weeks... Chronon is also useful to find all thrown exceptions - even the ones who are catched properly. I am not an employee of Chronon Systems and I only used their tool once but it helped a lot.
- koker 13y agoGoing to give it a go on our servers. We have a relentless Heisenbug we've been chasing down lately, which only happens in production.
- bizkeep2 13y agoUS-based?
- protomyth 13y agoMany of the Smalltalks allow hooking to a running image to do live debugging.
- seanmcdirmid 13y agoNo they don't. They just allow for fix and continue; they give you no insight into why a problem occurred because they provide no history.
- protomyth 13y agouhm... that's not universally true - I worked with some folks that had the history when they did it. Not sure if it was vendor provided or home grown, but it was the call history and call stack.
- seanmcdirmid 13y agoCall stack is provided in most debuggers these days. Are you honestly saying you saw something comparable to the linked article in some Smalltalk system? If so, I would be very interested in some kind of reference.
- protomyth 13y agoIt was a VMWare debug image and it had all that information although it was not as fancy. It did have a good amount of custom code.
- eli_gottlieb 13y agoYou've released? MAZAL TOV! I've been stalking you guys for a while now.
- irisshoor 13y agoThanks, you're welcome to take Takipi for a test drive and let us know what you think :)
- zaptheimpaler 13y agoThis looks awesome! Is there anything like this for local code though? The IntelliJ/Eclipse debuggers don't seem as well designed as this one.
- nivstein 13y agoTakipi may be installed locally; the same installation process will work. However, it does not provide live debugging like in your IDE, but rather a post-event drill-down (a "time travelling debugger"), as it is designed for testing/staging/deployment environments.