Case Insensitive Compare -- Avoid it like a swarm of angry bees

So 0.7 continues to be 'just a few days away'... I've been working on some slick slideshow features that have required me to work with photosets.

Everything was going well until I started running into 'invalid signature' problems. You see when you make authenticated calls to flickr there is a particular method to creating the calls. Part of that mechanism is to create a 'signature' (basically a MD5 sum) of the arguments including a 'secret key'. It's actually kind of a slick system as it provides secure access without having to give out your flickr username & passwd.

I've had authentication working for quite a while but when i tried to use photosets (which require authentication since I'm creating & adding photos to them) it didn't work and complained about 'invalid signature' Thankfully I got help from another cocoa/flickr developer (Blake Seely) who eventually pointed out my problem, I was ordering the arguments wrong.

"How can this be" I thought "I'm using the standard NSString compare functions"... Well not exactly, you see I was using 'caseInsensitiveCompare' not 'compare'. The arguments to photoset include both photo_id and photoset_id. Guess what? Turns out that case insensitive compare sorts them one way and 'compare' the other which was the cause of my signature problem.

It was strange to me until i looked at the ascii chart:

0 nul 1 soh 2 stx 3 etx 4 eot 5 enq 6 ack 7 bel 8 bs 9 ht 10 nl 11 vt 12 np 13 cr 14 so 15 si 16 dle 17 dc1 18 dc2 19 dc3 20 dc4 21 nak 22 syn 23 etb 24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us 32 sp 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 del

Yup, there it is... at 95 the '_' character, right between uppercase and lowercase. Lesson learned


Comments

Next Page -->