IPTables: Blocking your favorite Brute Force Attacker

If you happen to detect a bruteforce attack on your self-hosted WP instance, this would be the IPTables syntax to block it:

iptables -A INPUT -s 119.81.130.34 -j DROP

Whenever you miss the attacker, and you’re ready to unblock, you may just type:

iptables -D INPUT -s 119.81.130.34 -j DROP

Hope this helps!

ARC: weakSelf Caveats

Here’s an interesting ARC scenario. Consider the following snippet:

__weak __typeof(self) weakSelf = self;
int64_t delay = (int64_t)(0.1 * NSEC_PER_SEC);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay), dispatch_get_main_queue(), ^{
    [weakSelf doSomething];
});

Whenever the block gets executed… weakSelf might have a valid reference, or not. Right?.
Now, what happens with the following snippet?

__weak __typeof(self) weakSelf = self;
int64_t delay = (int64_t)(0.1 * NSEC_PER_SEC);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay), dispatch_get_main_queue(), ^{
    [weakSelf doSomething];
    [weakSelf doSomethingElse];
});

This is where it gets interesting!. There’s a possibility that doSomething might get executed, while doSomethingElse might not.

If you need to prevent such scenario, a possible workaround is:

__weak __typeof(self) weakSelf = self;
int64_t delay = (int64_t)(0.1 * NSEC_PER_SEC);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay), dispatch_get_main_queue(), ^{
    __typeof(self) strongSelf = weakSelf;
    [strongSelf doSomething];
    [strongSelf doSomethingElse];
});

This snippet warrantees that: if (at the moment of the block’s execution) weakSelf is not nil, it won’t be for the rest of the snippet.

Another interesting note (for future reference) is: self is considered strong, and it may not get invalidated at the middle of a method execution. Okay?

P.s.: Thanks to this Blog Post

Network Link Conditioner

We’ve all known, for quite some time, about the existance of the NLC tool: it’s used during iOS App Testing, under bad network conditions.

However… i’ve (recently.. cough… cough…) realized that this tool can also help you cap OS X bandwith.
This is specially useful when downloading the latest Xcode, and you don’t wanna kill the entire connection, just with that.

You can find the Network Link Conditioner in Apple’s Developers Portal, inside the Hardware IO Tools for Xcode package.