Archive for May 6, 2016

Friday, May 6, 2016

stringdups: Identify Duplicate Strings or Other Objects

stringdups (via David Smith):

stringdups examines the content of malloc blocks in the specified target process. For all blocks which have the same content, it shows a line with the number of such blocks, their total allocated size (the total size in the malloc heap, not just the specific size of their content), and the average allocated size.

If the MallocStackLogging environment variable was set when the target process was launched, stringdups also displays stack backtraces or call trees showing where all the blocks with a particular grouping of content were allocated.

Updated CrashPlan for Home EULA

CrashPlan e-mailed me some highlights from their license agreement:

We like your feedback on our products. If you do provide feedback, you give us the ability to use your feedback.

[…]

You must connect the devices you back up to the public cloud to CrashPlan Central at least once every 6 months. We may delete data stored in our public cloud associated with devices that have not been connected within such 6-month period.

This clause is new:

You agree that any and all disputes or claims that have arisen or may arise between you and Code42, whether arising out of or relating to this Agreement (including any alleged breach thereof), the Code42 Products and Services, any advertising, any aspect of the relationship or transactions between you and Code42, shall be resolved exclusively through final and binding arbitration, rather than a court, in accordance with the terms of this Arbitration Agreement, except that you may assert individual claims in small claims court, if your claims qualify. […] You agree that, by entering into this Agreement, you and Code42 are each waiving the right to a trial by jury or to participate in a class action. Your rights will be determined by a neutral arbitrator, not a judge or jury.

See also: Arbitration Everywhere, Stacking the Deck of Justice, In Arbitration, a ‘Privatization of the Justice System’.

A Tale of Two Optimizers

Daniel Jalkut:

Today, Apple got back to me with a followup, suggesting rather gently that I may have neglected to disable optimization in my target. Rookie move! The kind of behavior I was seeing in the debugger is exactly what happens when lldb can’t make as much sense of your code because of inlined functions, loops that have been restructured, etc.

In fact, I had correlated the symptoms with such a problem, but when I went to check on the status of my optimization settings, everything looked fine.

[…]

So why does debugging Swift fail so hard for me? Because Swift doesn’t use that optimization setting.

It uses SWIFT_OPTIMIZATION_LEVEL instead of GCC_OPTIMIZATION_LEVEL.

On Flexible Systems

Gerald Jay Sussman (video):

Most systems we build work well for the application that they were designed for, but they are brittle in that adapting to even small changes in the problem requires large changes in the code. Can we optimize for flexibility, trading off other virtues like proofs of correctness or efficient execution? I think this is often the right path.

[…]

I will show where it is to our advantage to make systems with extensible generic operations, and how to control such systems.

He talks about the virtues of late binding, “careful but dangerous” programming, and prioritizing code that is easy to modify and fast to debug.

You Could Almost Do Anything

Eli Schiff:

Several questions present themselves. Firstly, why do modernist designers feel the need to justify obvious (or should I say opaque) abstractions by appealing to metaphorical significance, where no metaphor still exists? This charade certainly fools no one, except perhaps other designers and obsequious journalists.

[…]

A second, more important, question emerges–how can non-designers have confidence in minimalists’ designs if the designers themselves so clearly don’t. How can there be any integrity to glean from–when the designs so readily fail by their designers’ own criteria for judgment?