Aug 27 2010

Apache Authentication with Proxy

John C. Bland II

I’m purely pointing to a blog post by Jamie Krug (@jamiekrug), who is getting a huge man hug from me today. It saved me from a firestorm where a dev url was posted publicly but wasn’t password protected (lazy me!). Apache wasn’t playing nice since it passed off the ColdFusion files to Tomcat. Just before I went crazy with Tomcat changes…I found this. I hope it helps someone else.

http://jamiekrug.com/blog/index.cfm/2009/8/6/apache-authentication-with-proxy

Best JSP & Java Web Hosting + save 50%

Aug 5 2010

CFWheels: Redirecting non-authorized access after login

John C. Bland II

CFWheels always seems to make me smile with certain features. It isn’t 100% perfect (what is?) but it really makes CF dev fun. In this case, we’re taking a simple scenario of a user attempting to access a non-public url while not authorized to login. It could be from a bookmark or them simply trying to “hack” your system. Either way, once the user logs in they should automatically get to the page they want. Here’s how you can do it in Wheels.

Continue reading


Jul 20 2010

Bogus Antennagate Response Videos

John C. Bland II

I’m overly bored with antennagate to start with but these response videos are annoying me. Yes, I could not watch them but the tech dude deep inside, well…maybe not that deep, is interested in the technology aspect of it. What annoys me is when someone shows the now infamous “death grip” but they are showing the “grip” in a not so normal way. On Twitter I mentioned it looked like they were getting ready to “throw a rock” and after watching a few more…I still feel this way.

I think what bothers me most is folks like @gruber are eating this up and using it as a bullet point to say “see…Apple was right, others suck too” but they are only half-right. Apple was correct about other devices, the industry knows this, but the iPhone is by far worse at exposing the fault.

Just watch some of these videos:

Notice how they have to hold the device to make it happen. People…this is not the same thing as the iPhone 4 where you can use 1 finger to destroy your call quality.

The point is…Apple blew it. No matter how many crappy videos show other devices with “death grip” problems…the iPhone 4, as Jobs stated, put a big X on it to which they can’t take away a free bumper will take away. I’m pleased with Apple’s response (free bumpers; not just us…everyone) as a business person. I thought they did a great job of deflecting but the issue still stands.

Either way Apple will continue to make boat loads of dough but I am willing to bet Apple makes significant changes in the antenna design next year. To save face, I bet the overall structure is exactly the same but they do something to prevent attenuation when held the “right way” this time (different external material around it?).


Jul 1 2010

Why Android blows away the iOS, for me.

John C. Bland II

I have contemplated this blog post for a couple weeks now (and worked on it for longer), since I first started using my new Evo 4G. The title may read that of a new convert going fanboy over a new toy but trust me…I’ve seriously spent time considering both sides of this coin and I’m thoroughly convinced: Android blows away iOS. Don’t believe me? You don’t have to but I’ll still explain my points. Keep in mind, while reading, this is my opinion and is 100% based on an iPhone 3G vs the Evo 4G.

Continue reading


Jun 6 2010

AS3 Tip: Pass …rest arguments w/ other arguments to a function

John C. Bland II

That’s about as good a title as I could come up with here. :-)

Background

Let’s say you have a function expecting …rest arguments. Firstly, if you’re not familiar with …rest arguments, read this. Here is a code example of the issue (hand-written and untested):

protected function fun1(...rest):void{
	fun2.apply(null, rest);
}
 
protected function fun2(some:*, thing:*, here:*, ...rest):void{
	trace(some, thing, here, rest);
}
 
fun1("here", "are", "my", "args", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

This code passes 14 arguments to fun1, which is completely legit. fun1 then passes all 14 arguments to fun2. The trace output would be:

"here", "are", "my", "args", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

That’s easy, right?  Let’s throw a monkey wrench in this puppy real quick.

The Problem

Taking the previous example, let’s swap the calls. fun2 will not call fun1 and the initial function call will be to fun2. Here is the code:

protected function fun1(...rest):void{
	trace(rest);
}
 
protected function fun2(some:*, thing:*, here:*, ...rest):void{
	var newArg:* = 1;
	fun2.apply(null, [some, thing, here, newArg, rest]);
}
 
fun2("here", "are", "my", "args", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

Now, you may say: “What’s wrong with that?” To that I’d say: “A LOT!” The monkey wrench is newArg. See, apply(..) takes an array as the second argument which works well unless you’re passing in rest.

The trace would be:

"here", "are", "my", "args", [1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]

This is very subtle but notice the last part of the trace is a multidimensional array consisting of newArg and the rest argument passed from fun2.

A Solution

This is a quick and easy way to solve this problem. What you want to do is actually pass in every argument in the rest argument as a single argument, not as an array, but we’re still passing in an array to the apply(…) function. Here is one way to tackle this puppy using array manipulation:

protected function fun1(...rest):void{
	trace(rest);
}
 
protected function fun2(some:*, thing:*, here:*, ...rest):void{
	var newArg:* = 1;
	fun2.apply(null, [some, thing, here, newArg].concat(rest));
}
 
fun2("here", "are", "my", "args", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

Ahh…notice the second line of the fun2 function. we’re passing in an array of arguments and concatenating the rest argument with the arguments array.

Here is the output trace from that:

"here", "are", "my", "args", 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

That is exactly what you want to see, in this case. :)

Conclusion

This one just bit me in the butt so I thought I’d blog it to help someone else.

What other ways do you use to solve this problem? I’m sure this isn’t the only way.


  • Get Adobe Flash playerPlugin by wpburn.com wordpress themes