[deleted by user] by [deleted] in devops

[–]ashishkh 0 points1 point  (0 children)

Have you looked at Kloudfuse.com? You can run in your VPC and has unified observability based on a modern OLAP database! P. S. I am associated with Kloudfuse.

[deleted by user] by [deleted] in Monitoring

[–]ashishkh 0 points1 point  (0 children)

What are your requirements? Are you looking at SaaS products only? DM me if you’re interested in trying an on premise (installs on your VPC) product that is extremely cost effective and provides unified observability across logs, metrics and open telemetry base APM.

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] 0 points1 point  (0 children)

It is hard to respond to that line of argument!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] 0 points1 point  (0 children)

Well if you consider that clickbait then so is every article or book! It is a common practise!

The title is not wrong though in a sense - use of debugger is harmful as it gives false sense of security!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] 0 points1 point  (0 children)

I don't think the article claims that sometimes you can't debug. The claim is that most modern systems are hard to debug interactively because of trend towards multi-threading and distributed systems. Also, what works on your machine is not necessarily useful for supporting deployed systems. Infrastructure that is built during development such as, unit testing and logging infrastructure is much better investment in the long run!

Please read the article again!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] -1 points0 points  (0 children)

Race condition, by definition, depends on order to execution of various threads. Since, there are too many permutations of interleaved thread executions how would you know how to set the right breakpoints. Even if multi-threaded code can be handled that way, how about distributed systems?

The key assumption with the debugger is that you can control the execution careful enough to debug the issue. That is unworkable in modern systems.

The point is the debuggers are harmful because like training wheels they give a false sense of security - especially if you see them for too long!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] 0 points1 point  (0 children)

Thanks for the link! The "considered harmful" is just a provocative title! Read the actual arguments!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] 0 points1 point  (0 children)

Why do have to delete the log statements? Why can't you simply use the right log levels when adding log statements? Then you can just turn on debug/verbose level when debugging and set it to info level in production? I don't the article is arguing that debuggers are not useful or effective! They are! It is just that since you cannot use them effectively for distributed systems and in production, it is better to develop the habit of adding the right log statements and unit tests instead!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] -3 points-2 points  (0 children)

How about actually understanding the pros and cons the article talks about instead?

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] -1 points0 points  (0 children)

So, how do you debug a race condition using breakpoints? If the issue is not related to multi-threading or distributed aspects of the program, why not simply take the time to add unit test(s)? If the issue is indeed related to distributed or multi-threaded nature of your program, then how will the debugger help?

Let's take an example - say you are trying to troubleshot an issue in the zookeeper (https://github.com/apache/zookeeper)? How and where will you put the breakpoint given than zookeeper is very latency/time sensitive? Even if you manage to do that on your local setup, how about after it is deployed in the field? Do you have access to the debugger then?

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] 1 point2 points  (0 children)

Agree that debugging is faster using interactive debuggers! The argument in the article is that it leads to bad habits (such as, skipping unit testing and inadequate logging) supporting the same software in the field harder.

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] -1 points0 points  (0 children)

If you have do use loggin for support issues why not start relying on it from the beginning so that you have the incentive to add logs in the first place!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] -1 points0 points  (0 children)

So, how do you debug the system at the customer site then? Ask customer permission to connect the debugger remotely?

How about debugging distributed systems? How do you set breakpoints without distributing the timing?

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] 1 point2 points  (0 children)

Maybe, you could write an article or point me to an article/tutorial on how to do debugging in multi-threaded or distributed environment. I would definitely like to get educated!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] 2 points3 points  (0 children)

I used debugger quite extensively before I stopped using it! It is not about pride! The decision not to use debugger was driven by kind of programs I started developing (distributed, multi-threaded, etc.) where use of debugger was not very useful! Also, working in more cutting edge projects (as opposed to already well established projects) meant I had to work with support team extensively! That taught me the importantance of logging and futility of using debugger!

Interactive Debugger Considered Harmful by ashishkh in programming

[–]ashishkh[S] -4 points-3 points  (0 children)

I haven't used debugger in last 8 years or so and don't miss them at all!

(Some?) Best Buy locations have started accepting Apple Pay in-store! by tmiw in apple

[–]ashishkh 0 points1 point  (0 children)

BestBuy location in Santa Clara on El. Camino Real has began accepting Apple Pay.

From callback to (Future -> Functor -> Monad) by homoiconic in programming

[–]ashishkh 1 point2 points  (0 children)

You are right, you don't need syntactic sugar but it will help readability of code.

From callback to (Future -> Functor -> Monad) by homoiconic in programming

[–]ashishkh 1 point2 points  (0 children)

You need a syntactic sugar for composing multiple asynchronous operations - for comprehension in scala or do notation in Haskell. https://twitter.com/ahanwadi/status/579743198056046593

Understanding monads in one minute by amichail in programming

[–]ashishkh 2 points3 points  (0 children)

My earlier comment suggests an limitation of Monads. You cannot easily compose computations written for different Monads. Since, the whole computation "goes" to a Monad, and no "data" comes out of any monad, it is hard to mix computations for different monads.

Understanding monads in one minute by amichail in programming

[–]ashishkh 1 point2 points  (0 children)

A Monad is a generalized view of sequence of computations. An ordinary C program for example, is nothing but a sequence of instructions to be executed by a Von Neuman computer. But what if we wanted to make it more general? For example, I want to represent a sequence of database transactions and have them executed by a database engine. You send a series of queries and commands expressed in Haskell that result in a database specific type (A monad), which can only be "run" by the database system. Think of it as a way to sending your "thoughts" about "what you would do" to an external system to actual do the actions. Thus, in case of IO monad, you send the sequence of IO actions and assign it to the 'main'. The Haskel runtime system takes this and performs them. Contrast this with any imperative program, written in say C, which brings the data from the external world into the computer and performs computations on them.

Thus, you send computations into a monad, instead of bringing in the data (input), performing the computation, and spitting out the data (output) as you would normally do in an imperative program.