-
Notifications
You must be signed in to change notification settings - Fork 3
/
smug.ijs
5178 lines (4302 loc) · 203 KB
/
smug.ijs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
NB. sha256:c523982b36792a0f9ead8e765761491e432e9f7d111720c3ee8e919f0e3bc02d
NB. JOD dictionary dump: 08 Apr 2023 13:51:38
NB. Generated with JOD version; 1.0.25; 14; 04 Apr 2023 09:24:10
NB. J version: j903/j64avx2/windows/release-a/commercial/www.jsoftware.com/2021-12-16T15:15:09/clang-13-0-0/SLEEF=1
NB. JOD put dictionary path: /smug/image/utils
NB.
NB. Names & DidNums on current path
NB. +----+---------------------------------------+
NB. |smug|235671691683974132501222853426646280226|
NB. +----+---------------------------------------+
9!:41 [ 1 NB.{*JOD*}
cocurrent 'base' NB.{*JOD*}
sonl_z_=: 'sonl__MK__JODobj i.4' NB.{*JOD*}
showpass_z_=:] [ 1!:2&2 NB.{*JOD*}
SOLOCALE_z_=:":>SO__JODobj NB.{*JOD*}
soput_z_=:SOLOCALE&put NB.{*JOD*}
soclear_z_=: '0 0 $ clearso__MK__JODobj 0' NB.{*JOD*}
cocurrent SO__JODobj NB.{*JOD*}
CREATESETSIG=:'method=flickr.photosets.create&api_key=33167a2f73f92b7837fc9fc8c4c56572&title=test+0&description=api+test&primary_photo_id=48824187&auth_token=122155-43d7e5c2a8865c74&api_sig=8b4479824d3272927468c333f85783f0'
DOCOMMANDS=:1
FLICKRAUTHURL=:'http://www.flickr.com/services/auth/'
FLICKRCOMMENTS=:'flickrcomments.xml'
FLICKRDRV=:'c:'
FLICKRDSN=:'working2007'
FLICKRHTML=:60 104 116 109 108 62 10 60 47 116 97 98 108 101 62 10 60 104 52 62 115 101 116 94 94 116 105 116 108 101 60 47 104 52 62 10 60 104 52 62 105 109 97 103 101 94 94 99 111 117 110 116 60 47 104 52 62 10 60 116 97 98 108 101 32 98 111 114 100 101 114 61 34 49 34 62 10 60 116 114 62 10 9 60 116 100 62 60 73 77 71 32 83 82 67 61 34 105 109 97 103 101 94 94 102 105 108 101 34 32 72 69 73 71 72 84 61 105 109 97 103 101 94 94 104 101 105 103 104 116 32 87 73 68 84 72 61 105 109 97 103 101 94 94 119 105 100 116 104 62 60 47 116 100 62 10 9 60 116 100 62 10 9 9 60 116 97 98 108 101 62 10 9 9 60 116 114 62 60 116 100 62 105 109 97 103 101 94 94 116 105 116 108 101 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 70 108 105 99 107 114 32 80 105 100 58 32 102 108 105 99 107 114 94 94 112 105 100 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 83 101 116 32 79 114 100 101 114 58 32 115 101 116 94 94 111 114 100 101 114 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 84 97 107 101 110 32 68 97 116 101 58 32 116 97 107 101 110 94 94 100 97 116 101 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 76 97 116 105 116 117 100 101 58 32 103 101 111 94 94 108 97 116 105 116 117 100 101 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 76 111 110 103 105 116 117 100 101 58 32 103 101 111 94 94 108 111 110 103 105 116 117 100 101 60 47 116 100 62 60 47 116 114 62 10 9 9 60 47 116 97 98 108 101 62 10 9 60 47 116 100 62 10 60 47 116 114 62 10 60 47 116 97 98 108 101 62 10 60 47 98 111 100 121 62 10 60 47 104 116 109 108 62 10{a.
FLICKRHTMLHEAD=:60 104 116 109 108 62 10 60 104 49 62 123 123 115 101 116 116 105 116 108 101 125 125 60 47 104 49 62 10 60 104 52 62 83 101 116 32 73 109 97 103 101 32 67 111 117 110 116 58 32 123 123 105 109 97 103 101 99 111 117 110 116 125 125 60 47 104 52 62 10 60 104 52 62 70 108 105 99 107 114 32 83 101 116 32 73 100 58 32 123 123 102 108 105 99 107 114 115 105 100 125 125 60 47 104 52 62 10 60 104 52 62 70 108 105 99 107 114 32 83 101 116 32 68 101 115 99 114 105 112 116 105 111 110 58 32 123 123 115 101 116 100 101 115 99 114 105 112 116 105 111 110 125 125 60 47 104 52 62 10 60 104 53 62 84 104 105 115 32 114 101 112 111 114 116 101 100 32 103 101 110 101 114 97 116 101 100 32 111 110 58 32 123 123 104 116 109 108 116 105 109 101 115 116 97 109 112 125 125 60 47 104 53 62 10 60 116 97 98 108 101 32 98 111 114 100 101 114 61 34 49 34 62 10{a.
FLICKRHTMLROW=:60 116 114 62 10 9 60 116 100 62 60 73 77 71 32 83 82 67 61 34 123 123 105 109 97 103 101 102 105 108 101 125 125 34 32 72 69 73 71 72 84 61 123 123 105 109 97 103 101 104 101 105 103 104 116 125 125 32 87 73 68 84 72 61 123 123 105 109 97 103 101 119 105 100 116 104 125 125 62 60 47 116 100 62 10 9 60 116 100 62 10 9 9 60 116 97 98 108 101 62 10 9 9 60 116 114 62 60 116 100 62 123 123 105 109 97 103 101 116 105 116 108 101 125 125 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 70 108 105 99 107 114 32 80 105 100 58 32 123 123 102 108 105 99 107 114 112 105 100 125 125 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 83 101 116 32 79 114 100 101 114 58 32 123 123 115 101 116 111 114 100 101 114 125 125 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 84 97 107 101 110 32 68 97 116 101 58 32 123 123 116 97 107 101 110 100 97 116 101 125 125 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 123 123 103 101 111 108 97 116 105 116 117 100 101 125 125 60 47 116 100 62 60 47 116 114 62 10 9 9 60 116 114 62 60 116 100 62 123 123 103 101 111 108 111 110 103 105 116 117 100 101 125 125 60 47 116 100 62 60 47 116 114 62 10 9 9 60 47 116 97 98 108 101 62 10 9 60 47 116 100 62 10 60 47 116 114 62 10{a.
FLICKRHTMLTAIL=:60 47 116 97 98 108 101 62 10 60 47 98 111 100 121 62 10 60 47 104 116 109 108 62{a.
FLICKRIMAGEDIR=:'\temp\flickr\'
FLICKRIMAGESQL=:'select name from thumbnail where idthumb in (select idthumb from thumbnailkeyword where idkeyword in (select idkeyword from keyword where (keyword = ''flickrsets'') or (keyword = ''.jpg'')))'
FLICKROFFLINEDSN=:'offline2007'
FLICKRPATH=:'\pictures\online\flickr\xml\'
FLICKRPHOTOS=:'flickrphotos.xml'
FLICKRPHOTOSINFO=:'flickrphotosinfo.xml'
FLICKRPRIMARYDSN=:'primary2007'
FLICKRRESTURL=:'http://www.flickr.com/services/rest/'
FLICKRSETS=:'d:\pd\flickr\flickrsets.xml'
FLICKRSIZES=:<;._1 ' Square Thumbnail Small Medium Large Original'
FLICKRTHUMBS=:'flickrthumbsxref.xml'
GALLERYCHARS=:' \0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
GEOKMLFILE=:'geotagged flickr images.kml'
GEOKMLPATH=:'\pd\coords\'
GETJPGTEST=:71 69 84 32 47 54 54 55 49 56 52 54 95 97 51 54 54 49 56 48 56 50 57 95 115 46 106 112 103 32 72 84 84 80 47 49 46 49 13 10 72 111 115 116 58 32 112 104 111 116 111 115 52 46 102 108 105 99 107 114 46 99 111 109 13 10 67 111 110 110 101 99 116 105 111 110 58 32 99 108 111 115 101 13 10 65 99 99 101 112 116 58 32 42 47 42 13 10{a.
HEADINGDEFAULT=:0
HTMLROWMARKS=:<;._1 ' image^^file image^^height image^^width image^^title flickr^^pid set^^order taken^^date geo^^latitude geo^^longitude'
HTMLVARBPATTERN=:'{{[a-z]*}}'
IEXPLORECMD=:'c:\Program Files\Internet Explorer\iexplore.exe'
IMGEXTENSIONS=:s: <;._1 ' '
IMPORTFLICKRPHOTOS=:'importflickrphotos.txt'
IMPORTFLICKRSETPHOTOXREF=:'importflickrsetphotoxref.txt'
IMPORTFLICKRSETS=:'importflickrsets.txt'
INTERVALTIME=:_180
JODBAKSCRIPTS=:'\joddictionaries\602\bakscripts'
KMLHEADER=:60 63 120 109 108 32 118 101 114 115 105 111 110 61 34 49 46 48 34 32 101 110 99 111 100 105 110 103 61 34 85 84 70 45 56 34 63 62 10 60 107 109 108 32 120 109 108 110 115 61 34 104 116 116 112 58 47 47 101 97 114 116 104 46 103 111 111 103 108 101 46 99 111 109 47 107 109 108 47 50 46 48 34 62 10 60 70 111 108 100 101 114 62 10 32 32 60 110 97 109 101 62 71 101 111 116 97 103 103 101 100 32 70 108 105 99 107 114 32 73 109 97 103 101 115 60 47 110 97 109 101 62 10 32 32 60 111 112 101 110 62 49 60 47 111 112 101 110 62 10{a.
KMLPLACEMARK=:60 80 108 97 99 101 109 97 114 107 62 10 32 32 32 32 60 110 97 109 101 62 123 123 112 104 111 116 111 116 105 116 108 101 125 125 60 47 110 97 109 101 62 10 32 32 32 32 60 83 110 105 112 112 101 116 32 109 97 120 76 105 110 101 115 61 34 49 34 62 60 47 83 110 105 112 112 101 116 62 10 32 32 32 32 60 100 101 115 99 114 105 112 116 105 111 110 62 60 33 91 67 68 65 84 65 91 60 112 62 10 9 9 9 10 9 9 60 97 32 104 114 101 102 61 39 104 116 116 112 58 47 47 119 119 119 46 102 108 105 99 107 114 46 99 111 109 47 112 104 111 116 111 115 47 123 123 109 121 102 108 105 99 107 114 110 97 109 101 97 125 125 47 123 123 112 105 100 97 125 125 47 39 62 10 9 9 9 60 105 109 103 32 115 114 99 61 32 39 123 123 109 101 100 105 117 109 112 104 111 116 111 117 114 108 125 125 39 47 62 10 9 9 60 47 97 62 10 9 9 60 98 114 32 47 62 10 9 9 10 9 9 60 97 32 104 114 101 102 61 39 104 116 116 112 58 47 47 119 119 119 46 102 108 105 99 107 114 46 99 111 109 47 112 104 111 116 111 115 47 123 123 109 121 102 108 105 99 107 114 110 97 109 101 98 125 125 47 123 123 112 105 100 98 125 125 47 39 62 86 105 101 119 32 97 116 32 60 115 112 97 110 32 115 116 121 108 101 61 34 99 111 108 111 114 58 32 98 108 117 101 59 34 62 70 108 105 99 107 60 47 115 112 97 110 62 10 9 9 9 9 60 115 112 97 110 32 115 116 121 108 101 61 34 99 111 108 111 114 58 32 114 101 100 59 34 62 114 60 47 115 112 97 110 62 60 47 97 62 10 9 9 60 98 114 32 47 62 10 9 9 10 9 9 60 47 112 62 93 93 62 10 32 32 32 32 60 47 100 101 115 99 114 105 112 116 105 111 110 62 10 32 32 32 32 60 76 111 111 107 65 116 62 10 32 32 32 32 32 32 60 108 111 110 103 105 116 117 100 101 62 123 123 108 111 110 103 105 116 117 100 101 125 125 60 47 108 111 110 103 105 116 117 100 101 62 10 32 32 32 32 32 32 60 108 97 116 105 116 117 100 101 62 123 123 108 97 116 105 116 117 100 101 125 125 60 47 108 97 116 105 116 117 100 101 62 10 32 32 32 32 32 32 60 114 97 110 103 101 62 123 123 114 97 110 103 101 125 125 60 47 114 97 110 103 101 62 10 32 32 32 32 32 32 60 116 105 108 116 62 123 123 116 105 108 116 125 125 60 47 116 105 108 116 62 10 32 32 32 32 32 32 60 104 101 97 100 105 110 103 62 123 123 104 101 97 100 105 110 103 125 125 60 47 104 101 97 100 105 110 103 62 10 32 32 32 32 60 47 76 111 111 107 65 116 62 10 32 32 32 32 60 83 116 121 108 101 62 10 32 32 32 32 32 32 60 73 99 111 110 83 116 121 108 101 62 10 32 32 32 32 32 32 32 32 60 73 99 111 110 62 10 32 32 32 32 32 32 32 32 32 32 60 104 114 101 102 62 123 123 115 113 117 97 114 101 112 104 111 116 111 117 114 108 125 125 60 47 104 114 101 102 62 10 32 32 32 32 32 32 32 32 60 47 73 99 111 110 62 10 32 32 32 32 32 32 60 47 73 99 111 110 83 116 121 108 101 62 10 32 32 32 32 60 47 83 116 121 108 101 62 10 32 32 32 32 60 80 111 105 110 116 62 10 32 32 32 32 32 32 60 101 120 116 114 117 100 101 62 49 60 47 101 120 116 114 117 100 101 62 10 32 32 32 32 32 32 60 97 108 116 105 116 117 100 101 77 111 100 101 62 114 101 108 97 116 105 118 101 84 111 71 114 111 117 110 100 60 47 97 108 116 105 116 117 100 101 77 111 100 101 62 10 32 32 32 32 32 32 60 99 111 111 114 100 105 110 97 116 101 115 62 123 123 118 105 101 119 112 111 105 110 116 125 125 60 47 99 111 111 114 100 105 110 97 116 101 115 62 10 32 32 32 32 60 47 80 111 105 110 116 62 10 60 47 80 108 97 99 101 109 97 114 107 62 10{a.
KMLPLACEMARKVARBS=:<;._1 ' phototitle myflickrnamea mediumphotourl myflickrnameb pida pidb longitude latitude range tilt heading squarephotourl viewpoint'
KMLTRAILER=:60 47 70 111 108 100 101 114 62 10 60 47 107 109 108 62 10{a.
MANUALORDER=:786444
MISSINGLIMIT=:3
MYFLICKRAPIKEY=:'ee553e7ce4e82fb9cf8f21e78f2912e9'
MYFLICKRNAME=:'jdb99'
MYFLICKRSHAREDSECRET=:'067d251969e55a38'
MYFLICKRTOKEN=:'122081-921d0707a564a30e'
NONDISPLAYDIRECTORIES=:'.\flickrsets.\flickr.\scans.\CD .\email.\calcs.\16bit.\fbs.\film.\psm.\documents.\wip.\proofs.\profiles.\low quality.\raw.\HP RAWS.\mltraw.\video.\hpraw.\01.\02.\03.\04.\05.\06.\07.\08.\09.\10.\11.\12.\digital raw.\mlt raws.\fragments'
NONDISPLAYDIRECTORIES2=:'.4x6.5x7.8x10.\prints.low quality.\January.\February.\March.\April.\May.\June.\July.\August\.Septempber.\October.\November.\December'
PIDEMBEDPAIRS=:(<'(';').'),(<'[';'].'),<'{';'}.'
POSTSETCREATE=:80 79 83 84 32 47 115 101 114 118 105 99 101 115 47 114 101 115 116 47 32 72 84 84 80 47 49 46 49 13 10 67 111 110 116 101 110 116 45 84 121 112 101 58 32 109 117 108 116 105 112 97 114 116 47 102 111 114 109 45 100 97 116 97 59 32 98 111 117 110 100 97 114 121 61 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 13 10 72 111 115 116 58 32 119 119 119 46 102 108 105 99 107 114 46 99 111 109 13 10 67 111 110 116 101 110 116 45 76 101 110 103 116 104 58 32 49 48 56 57 13 10 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 13 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 97 112 105 95 107 101 121 34 13 10 13 10 101 101 53 53 51 101 55 99 101 52 101 56 50 102 98 57 99 102 56 102 50 49 101 55 56 102 50 57 49 50 101 57 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 13 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 97 117 116 104 95 116 111 107 101 110 34 13 10 13 10 49 50 50 48 56 49 45 57 50 49 100 48 55 48 55 97 53 54 52 97 51 48 101 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 13 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 97 112 105 95 115 105 103 34 13 10 13 10 54 50 53 51 57 97 49 99 54 51 99 50 49 102 48 48 53 98 53 50 102 53 97 97 51 52 54 48 51 50 102 48 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 13 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 109 101 116 104 111 100 34 13 10 13 10 102 108 105 99 107 114 46 112 104 111 116 111 115 101 116 115 46 99 114 101 97 116 101 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 13 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 116 105 116 108 101 34 13 10 13 10 84 101 115 116 32 65 80 73 32 67 114 101 97 116 101 100 32 83 101 116 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 13 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 112 114 105 109 97 114 121 95 112 104 111 116 111 95 105 100 34 13 10 13 10 51 55 56 48 57 50 51 51 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 13 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 100 101 115 99 114 105 112 116 105 111 110 34 13 10 13 10 84 104 105 115 32 116 101 115 116 32 115 101 116 32 119 97 115 32 99 114 101 97 116 101 100 32 98 121 32 74 32 65 80 73 32 102 108 105 99 107 114 32 117 116 105 108 105 116 121 32 115 99 114 105 112 116 115 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 45 45 13 10{a.
POSTTEMPLATE=:80 79 83 84 32 47 115 101 114 118 105 99 101 115 47 117 112 108 111 97 100 47 32 72 84 84 80 47 49 46 49 10 67 111 110 116 101 110 116 45 84 121 112 101 58 32 109 117 108 116 105 112 97 114 116 47 102 111 114 109 45 100 97 116 97 59 32 98 111 117 110 100 97 114 121 61 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 10 72 111 115 116 58 32 119 119 119 46 102 108 105 99 107 114 46 99 111 109 10 67 111 110 116 101 110 116 45 76 101 110 103 116 104 58 32 51 53 50 54 49 10 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 97 112 105 95 107 101 121 34 10 10 51 54 51 50 54 50 51 53 51 50 52 53 51 50 52 53 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 97 117 116 104 95 116 111 107 101 110 34 10 10 52 51 54 52 51 54 53 52 53 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 97 112 105 95 115 105 103 34 10 10 52 51 55 51 50 56 53 48 57 51 50 55 52 54 53 55 51 50 52 53 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 10 67 111 110 116 101 110 116 45 68 105 115 112 111 115 105 116 105 111 110 58 32 102 111 114 109 45 100 97 116 97 59 32 110 97 109 101 61 34 112 104 111 116 111 34 59 32 102 105 108 101 110 97 109 101 61 34 67 58 92 116 101 115 116 46 106 112 103 34 10 67 111 110 116 101 110 116 45 84 121 112 101 58 32 105 109 97 103 101 47 106 112 101 103 10 10 123 82 65 87 32 74 70 73 70 32 68 65 84 65 125 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 55 100 52 52 101 49 55 56 98 48 52 51 52 45 45 10{a.
showpass soput ".'nl_',SOLOCALE,'_ i.4' [ cocurrent 'base' NB.{*JOD*}
".soclear NB.{*JOD*}
cocurrent SO__JODobj NB.{*JOD*}
RANGEDEFAULT=:2000
READTOKEN=:'122081-921d0707a564a30e'
SHOW=:'[';'].'
SHOWCOMMANDS=:1
SHOWSEND=:0
SMALL=:'(';').'
SOURCE=:'{';'}.'
TEMPLOCALE=:'_tmp_'
TESTAPIKEY=:'9a0554259914a86fb9e7eb014e4e5d52'
TESTFROB=:'934-746563215463214621'
TESTLOGINURL=:'http://www.flickr.com/services/auth/?api_key=9a0554259914a86fb9e7eb014e4e5d52&perms=wread&frob=934-746563215463214621&api_sig=06d7a30d8c35769f18f330767e865362'
TESTSECRET=:'000005fab4534d05'
TESTSETDIR=:'d:\pictures\online\flickr\flickrsets\been there done that\'
TESTSETPIDS=:<;._1 ' 2455276 6671846 2641114 2241146 2486948 2645703 4445642 2486870 7352134 7357378 6224952 7363706 5088708 2489749 8482425 15475735 19030578 19553390 19983766 37809233'
TILTDEFAULT=:60
TODAYTOKEN=:'122081-921d0707a564a30e'
VIEWPOINTDEFAULT=:0 0 0
WAITSECONDS=:0.349999999999999978
WGETOUTPUT=:'c:\temp\wgetout.dat'
WGETPATH=:''
WRITETOKEN=:'122081-921d0707a564a30e'
XMLHEADER=:'<?xml version="1.0" encoding="utf-8" ?>'
flickrAPIINTERFACE=:''
flickrAPIVMD=:'0.1.0';16;'18 Nov 2007 11:44:18'
flickrINTERFACE=:<;._1 ' checkflickrthumbsxref checktoken downloadimage downloadsetdiff finduser geotaggedkml getallphotosinfoxml getallphotosxml getfrob getgroups getimagedimensions getimg getnotinset getphotocounts getphotoinfo getphotosinset getphotosizes getrecentphotos getrelatedtags getsetlist gettoken getuntagged geturl getusertags listseturls loadxrefFlickrThumbs loadxrefGeotagged loadxrefIdTimesName loadxrefSidNameDesc loginflickr makephotolinks makesethtml md5fromstring nowunixsecs nullsqimages pairbracdir parselastupdate parseondates parseonimgsrc parseonphoto parseonphotoset parseonsize parseontag parsepids parseposted parsesids parsetaken parsetitles parseviews pidsfrname pidsindb pidsnotindb pidsnotxrefed searchgroups searchme searchphotos setsnotxrefed sidfrname sqbracdir updateflickrxml updateinfofile updatesethtml updatesmallthumbs updatethumbsgalleries'
flickrROOTWORDS=:<;._1 ' FLICKRPRIMARYDSN checktoken dispdirs finduser flickrINTERFACE flickrROOTWORDS flickrSetPhotoXref flickrVMD getgroups getphotocounts getrecentphotos getrelatedtags gettags getuntagged getusertags listseturls loginflickr nowunixsecs nullsqimages pairbracdir pidsfrname pidsnotindb searchgroups searchme searchphotos setflickrdrive setsnotxrefed sidfrname sqbracdir updateflickrxml updatesethtml updatesmallthumbs updatethumbsgalleries'
flickrVMD=:3r4;75;' 5 Jun 2007 21:33:37'
flickrXthumbsVMD=:1r3;19;'19 Nov 2007 16:30:18'
sdARIZONA=:'\pictures\online\flickrsets\arizona toodling\'
sdBEENTHERE=:'\pictures\online\flickrsets\been there done that\'
sdBEIRUT=:'\pictures\20THCENTURY\Beirut\flickrsets\beirut lebanon 1960s\'
sdDIVING=:'\pictures\20THCENTURY\Barbados\flickrsets\diving at bellairs\'
sdENEWETAK=:'\pictures\20THCENTURY\Edmonton\Enewetak Trips\flickrsets\enewetak atoll 1980s\'
sdGHANA=:'\pictures\20THCENTURY\Ghana\flickrsets\ghana 1970s\'
sdGRANDPARENTS=:'\pictures\online\flickrsets\grandparents\'
sdIRAN=:'\pictures\20THCENTURY\Iran\flickrsets\iran 1960s\'
sdKINGSTON=:'\pictures\online\flickrsets\kingston\'
sdMINNESOTA=:'\pictures\online\flickrsets\minnesota\'
sdMYKIDS=:'\pictures\online\flickrsets\my kids\'
sdNEWYORK=:'\pictures\2005\New York Anniversary Trip\flickrsets\new york\'
sdNORTHBYNW=:'\pictures\online\flickrsets\north by northwest\'
sdNOTINSETS=:'\pictures\online\flickrsets\not in sets\'
sdOTTAWA=:'\pictures\online\flickrsets\in and around ottawa\'
sdPANORAMAS=:'\pictures\online\flickrsets\panoramas\'
sdPORTRAITS=:'\pictures\online\flickrsets\family portraits\'
sdRESTORATIONS=:'\pictures\online\flickrsets\restorations\'
sdVEGAS=:'\pictures\2002\Las Vegas\flickrsets\vegas wedding\'
sdWAYWEWERE=:'\pictures\online\flickrsets\the way we were\'
sdYUKON=:'\pictures\2002\Yukon Trip\flickrsets\yukon trip\'
sdZAMBIA=:'\pictures\2001\Zambian Eclipse Trip\flickrsets\zambia eclipse trip\'
showpass soput ".'nl_',SOLOCALE,'_ i.4' [ cocurrent 'base' NB.{*JOD*}
".soclear NB.{*JOD*}
cocurrent SO__JODobj NB.{*JOD*}
addcomment=:4 : 0
NB.*addcomment v789-- add a photo comment - requires write authorization.
NB.
NB. dyad: clPid addcomment clComment
NB. object nouns !(*)=. FLICKRAPIKEY FLICKRTOKEN
args=. '?method=flickr.photos.comments.addComment&api_key=',FLICKRAPIKEY,'&auth_token=',FLICKRTOKEN
NB. NIMP (y) text will need cleaning to handle chars like ' & "
args=. args,'&photo_id=',x,'&comment_text=',alltrim y
dosigposturl args
)
allzerotrim=:] #~ [: -. [: (*./\. +. *./\) 0&=
apisignature=:md5fromstring@sigstring
apisignature2=:md5fromstring@sigstring2
apisignature3=:[: md5fromstring sigstring2
betweenrequired=:4 : 0
NB.*betweenrequired v789-- select sublists between nonnested delimiters.
NB.
NB. Like (betweenstrs) with the restriction that delimiter strings must exist.
NB.
NB. dyad: blcl =. (clStart;clEnd) betweenstrs cl
NB. blnl =. (nlStart;nlEnd) betweenstrs nl
's e'=. x
assert. 1 e. sb=. s E. y
assert. 1 e. eb=. e E. y
llst=. sb +. eb
mask=. ~:/\ llst
(#s) }.&.> (mask#llst) <;.1 mask#y
)
checkflickrthumbsxref=:3 : 0
NB.*checkflickrthumbsxref v789-- check flickr thumbs xref.
NB.
NB. monad: checkflickrthumbsxref clDsn
NB.
NB. checkflickrthumbsxref 'working2005work'
ftx=. loadxrefFlickrThumbs 0
assert. ({:$ ftx) = #@:~."1 ftx NB. all rows must be unique
snd=. loadxrefSidNameDesc 0
assert. (0 { ftx) e. '';0 {"1 snd NB. set ids must exist
assert. (1 { ftx) e. '';1 {"1 snd NB. names must exist
if. #missing=. ('';1 {"1 snd) -. 1 { ftx do.
showpass '(',(":#missing),') following flickr sets missing thumbs galleries/directories ...'
showpass list missing NB. J system util !(*)=. list
end.
gals=. listgalleries y NB. !(*)=. listgalleries
assert. (2 { ftx) e. 0 {"1 gals NB. thumbs galleries must exist
assert. direxist&> (<FLICKRDRV,'\') ,&.> 3 { ftx NB. directories must exist
1 NB. okey dookey
)
checktoken=:3 : 0
NB.*checktoken v789-- check flickr token.
NB.
NB. monad: checktoken clToken
NB.
NB. checktoken__fo FLICKRTOKEN__fo NB. check me
NB. object nouns !(*)=. FLICKRAPIKEY
args=. '?method=flickr.auth.checkToken&api_key=',FLICKRAPIKEY,'&auth_token=', alltrim y
try. dosigresturl args catchd. 'token is not valid or access problem - xml follows:',CRLF,xml__FO return.end.
'token is valid'
)
clearxrefcache=:3 : 0
NB.*clearxrefcache v789-- erase xref cache.
NB.
NB. monad: clearxrefcache uuIgnore
erase 'xrefFlickrThumbs_tmp_ xrefSidNameDesc_tmp_ xrefTidPid_tmp_ xrefPidTimesName_tmp_'
)
commongroups=:3 : 0
NB.*commongroups v789-- returns bt of groups user has in common with
NB. contacts.
NB.
NB. This verb extracts a lot of information from flickr in ways
NB. that the API is not designed to handle. It can take many
NB. minutes to run depending on how many contacts must be
NB. searched.
NB.
NB. monad: commongroups uuIgnore
NB.
NB. commongroups__fo ''
ug=. groupnames getgroups ''
uc=. getcontacts ''
ucnsids=. contactnsids uc
NB. most time consuming step
cgroups=. getuserpublicgroups&.> ucnsids
cgrpnames=. groupnames&.> cgroups
cnames=. contactnames uc
cnames ,. cgrpnames intersect&.> <ug
)
contactnames=:[: 'name'&attrvalue&.> parseoncontact
contactnsids=:[: 'nsid'&attrvalue&.> parseoncontact
contactrelations=:3 : 0
NB.*contactrelations v-- returns a table summarizing relationship to all current contacts.
NB.
NB. monad: bt =. contactrelations uuIgnore
contxml=. getcontacts ''
nsids=. contactnsids contxml
relations=. RELATIONS
NB. relations=. getuser&.> nsids
people=. parseonperson ; relations
rtable=. ('friend'&attrvalue , 'revcontact'&attrvalue , 'revfriend'&attrvalue)&> people
rtable=. ". 1 0 1 0 1 (#^:_1)"1 rtable
realname=. >,('realname'&geteletext)&> people
username=. >,('username'&geteletext)&> people
('f C F'; 'User Name';'Real Name') ,: rtable;realname;username
)
createflickrAPI=:3 : 0
NB.*createflickrAPI v789-- initialize flickrAPI objects.
NB.
NB. monad: createflickrAPI baclFlickrAPIObject
NB.
NB. NB. sets all object parameters to personal defaults
NB. load 'flickrAPI'
NB. fo=. conew 'flickrAPI'
NB. createflickrAPI__fo fo
NB.
NB. dyad: uuIgnore createflickrAPI baclFlickrAPIObject
NB. NOTE: to enable the monad for personel use edit
NB. the noun settings listed here to match
NB. your own id, key, secret and token - they are
NB. all character strings.
NB. flickr user identifier
myflickrnsid=.''
NB. flickr API key
myflickrapikey=.''
NB. flickr shared secret key - tied to flickr API key
myflickrsharedsecret=.''
NB. flickr permission token
mytoken=.''
(myflickrnsid;myflickrapikey;myflickrsharedsecret;<mytoken) createflickrAPI y
:
assert. 1 < #&> x NB. keys not set
NB. object nouns !(*)=. FLICKRNSID FLICKRAPIKEY FLICKRSHAREDSECRET FLICKRTOKEN
'FLICKRNSID FLICKRAPIKEY FLICKRSHAREDSECRET FLICKRTOKEN'=: x
NB. object nouns !(*)=. YAMMER YAMMERCNT
YAMMER=: 1 NB. chatter is on
YAMMERCNT=: 10 NB. user update factor
FO=: y NB. set flickr object !(*)=. FO
)
creategallery=:4 : 0
NB.*creategallery v789-- create Thumbsplus gallery with name.
NB.
NB. dyad: iaGid =. clDsn creategallery clName
NB. require 'dd' !(*)=. ddcon ddsql dddis dderr ddfet ddsel
try.
NB. gallery name must be <: 255 and composed of permitted chars
assert. 256>:#name=. alltrim y
assert. *./ name e. GALLERYCHARS
NB. insert gallery record
sql=. 'insert into gallery (name, sortorder, descend) values '
assert. 0<ch=. ddcon 'dsn=',alltrim x
sql=. sql ,'(''',name,''',',(":MANUALORDER),',0)'
assert. 0=sql ddsql ch
NB. return gallery id of created gallery
sql=. 'select idgallery from gallery where name=''',name,''''
assert. 0<sh=. sql ddsel ch
assert. -. _1 -: gid=. ddfet sh,_1
dddis ch
(>gid);name
catchd.
'creategallery' saveerror 'unable to create gallery';dderr''
dddis ch
throw.
end.
)
createsetsig=:4 : 0
NB.*createsetsig v789-- create set signature string.
NB.
NB. dyad: clSig =. blcl createsetsig clWriteToken
NB.
NB. snpiddesc=. 'Test API Created Set';'37809233'
NB. snpiddesc=. snpiddesc ,<'This test set was created by J API flickr utility scripts'
NB. writetok=. '122081-921d0707a564a30e'
NB. snpiddesc createsetsig writetok
writetoken=. alltrim y
'title primaryphoto description'=. alltrim&.> 3 {. x
title=. '+' (I. ' '=title)} title
description=. '+' (I. ' '=description)} description
NB. object nouns !(*)=. FLICKRAPIKEY
args=. '?method=flickr.photosets.create&api_key=',FLICKRAPIKEY
args=. args,'&title=',title,'&description=',description
args=. args,'&primary_photo_id=',primaryphoto,'&auth_token=',writetoken
signarguments args
)
deletegallery=:4 : 0
NB.*deletegallery v789-- deletes a Thumbsplus gallery.
NB.
NB. dyad: clDsn deletegallery clName
NB. require 'dd' !(*)=. ddcon ddsql dddis dderr
try.
NB. gallery name must be <: 255 and composed of permitted chars
assert. 256>:#name=. alltrim y
assert. *./ name e. GALLERYCHARS
NB. delete gallery record
NB. database is set to delete related records
sql=. 'delete from gallery where name=''',name,''''
assert. 0<ch=. ddcon 'dsn=',alltrim x
assert. 0=sql ddsql ch
dddis ch
name;'gallery deleted'
catchd.
'deletegallery' saveerror 'unable to delete gallery';dderr''
dddis ch
throw.
end.
)
direxist=:3 : 0
NB.*direxist v789-- 1 if directory exists 0 otherwise.
NB.
NB. monad: pa =. direxist clDrivepath
tf=. (tslash y) ,'0.0'
wok=. 'junkdata' (write :: _9:) tf
(ferase :: _9:) tf
-. wok-:_9
)
dispdirs=:3 : 0
NB.*dispdirs v789-- returns a ct of display directories from digest
NB. files.
NB.
NB. This verb attempts to compensate for my mostly incoherent
NB. display directories. I use the Sherlock Holmes method. Remove
NB. everything that isn't a display directory and what's left
NB. behind is a good list.
NB.
NB. WARNING: the list returned by this verb is a "hackzimation."
NB.
NB. monad: ctDirs =. dispdirs {uuIgnore | cl}
NB. dyad: ctDirs =. uuIgnore dispdirs {uuIgnore | cl}
'primary' dispdirs y
:
file=. ;('offline'-: y){'primary';'offline'
dirs=. ];._2 LF ,~ (read FLICKRDRV,'\pictures\psm\digests\paths_',file,'.txt')-.CR
pats=. <@,:;._1 NONDISPLAYDIRECTORIES
dirs=. dirs #~ -. +./ > pats +./"1@E.&.> <dirs
NB. anything left with _ is not display
dirs=. dirs #~ -. '_' e."1 dirs
NB. clean up more confusion
pats=. <@,:;._1 NONDISPLAYDIRECTORIES2
dirs=. dirs #~ -. +./ > pats +./"1@E.&.> <dirs
)
displaypids=:3 : 0
NB.*displaypids v789-- extract photo ids for display images.
NB.
NB. monad: blclPids =. displaypids clDirectory
NB. display images are OFTEN in the parent directory of flickrsets.
NB. NOTE: this is not even wrong - display image can be scattered
NB. all over - we can find them by starting with (smallpids) and
NB. then pulling all file names with the characters [] in their
NB. file names.
ddir=. 'flickrsets\' beforestr alltrim y
NB. extract pids from file names in display images directory
NB. Note: display images have pids embedded with [] while
NB. small xref images have pids embedded with ()
'[]' betweenstrs ; 0 {"1 (1!:0) <ddir,'*.jpg'
)
docmds=:3 : 0
NB.*docmds v789-- execute shell commands in char table.
NB.
NB. monad: docmds ctCommands
NB. dyad: clDirectory docmds ctCommands
'' docmds y
:
if. #x do.
curdir=. (1!:43) '' NB. current directory
(1!:44) tslash alltrim x NB. new current directory
else.
curdir=.''
end.
NB. execute & show - or not - require 'task' !(*)=. shell
dc=. ]`shell @. DOCOMMANDS
sp=. ]`showpass @. SHOWCOMMANDS
if. -.DOCOMMANDS do. showpass 'command execution is off' end.
if. -.SHOWCOMMANDS do. showpass 'show command is off' end.
for_cmd. y do.
sp cmd
dc cmd
end.
NB. restore current directory
if. #curdir do. (1!:44) curdir end.
0 0$''
)
doresturl=:3 : 0
NB.*doresturl v789-- do REST argument url.
NB.
NB. monad: doresturl clUrl
xml__FO=: wgeturl FLICKRRESTURL,y
assert. okxml xml__FO
xml__FO
:
NB. dyad pages
xml=.'' [ cnt=. 0
whilst. -. lastpage xmlpage__FO do.
xmlpage__FO=: wgeturl FLICKRRESTURL,y,'&page=',":cnt=.>:cnt
assert. okxml xmlpage__FO
xml=.xml,<xmlpage__FO
end.
xml
)
dosigposturl=:3 : 0
NB.*dosigposturl v789-- sign and POST argument to url.
NB.
NB. monad: dosigposturl clPostdata
sigargs__FO=: signarguments y
NB. split signed arguments from method
method=. '&' beforestr sigargs
sigargs=. '&' afterstr sigargs
xml__FO=: sigargs wgetposturl FLICKRRESTURL,method
assert. okxml xml__FO
xml__FO
)
dosigresturl=:3 : 0
NB.*dosigresturl v789-- sign and do REST argument url.
NB.
NB. monad: clXML =. dosigresturl clUrl
NB. dyad: blclXML =. uuIgnore dosigresturl clUrl
sigargs__FO=: signarguments y
xml__FO=: wgeturl FLICKRRESTURL,sigargs__FO
assert. okxml xml__FO
xml__FO
:
NB. dyad pages
xml=.'' [ cnt=. 0
whilst. -. lastpage xmlpage__FO do.
sigargs__FO=: signarguments y,'&page=',":cnt=.>:cnt
xmlpage__FO=: wgeturl FLICKRRESTURL,sigargs__FO
assert. okxml xmlpage__FO
xml=.xml,<xmlpage__FO
end.
xml
)
downloadimage=:3 : 0
NB.*downloadimage v789-- downloads a flickr image.
NB.
NB. Downloads a flickr image and gives the image a file name that
NB. matches the flickr title (sans illegal characters). The file
NB. is written to a directory specified by (x789).
NB.
NB. monad: clFile =. downloadimage (clName ; clPid ; clLink)
NB.
NB. NB. download flickr set
NB. pids=. parsepids__fo parseonphoto__fo getphotosinset__fo '61880'
NB. nlnk=. 'Small' makephotolinks__fo pids
NB. downloadimage__fo"1 nlnk
NB.
NB. dyad: clFile =. (clDirectory ; clSize) downloadimage (clName ; clPid ; clLink)
((FLICKRDRV,FLICKRIMAGEDIR);'') downloadimage y
:
'file pid link'=. alltrim&.> y
'imdir size'=. x
NB. set image file extension from flickr link
ext=. '.'&afterlaststr link
NB. any setting other than 'Small' gets square brackets
if. size-:'Small' do.
assert. -. +./'()' e. file
NB. embed flickr photo id number in file name
file=. file,' (',pid,').',ext
else.
assert. -. +./'[]' e. file
NB. embed flickr photo id number in file name
file=. file,' [',pid,'].',ext
end.
assert. 256 >:#resfile=. (tslash imdir),file
ferase resfile
(resfile;0) wgeturl link
resfile
)
downloadset=:3 : 0
NB.*downloadset v789-- download small flickr set images to an extant
NB. directory.
NB.
NB. monad: blclFiles =. downloadset (clSid ; clTok)
NB.
NB. downloadset (sidfrname 'Iran');tok
NB.
NB. dyad: blclFiles =. clDirectory downloadset (clSid ; clTok)
NB.
NB. 'c:\temp\flickr\' downloadset (sidfrname 'Been');tok
(FLICKRDRV,FLICKRIMAGEDIR) downloadset y
:
assert. direxist x
'sid tok'=. y
NB. get current photo ids of set images
showpass 'getting set photos ...'
setpids=. parsepids parseonphoto sid getphotosinset tok
NB. get direct small image urls
showpass 'collecting direct links ...'
links=. 'Small' makephotolinks setpids
NB. download each image in set order
files=.''
for_link. links do.
showpass 'downloading: ', ; (link) ,&.> ' '
files=. files,<x downloadimage link
wait WAITSECONDS
end.
files
)
downloadsetdiff=:3 : 0
NB.*downloadsetdiff v789-- download set images that are not in
NB. directory (x). directory.
NB.
NB. This verb downloads set images that are not in the target
NB. directory and resets file times to preserve the original
NB. flickr set order.
NB.
NB. monad: blclFiles =. downloadsetdiff (clSid ; clTok ; [clSize)]
NB.
NB. downloadsetdiff (sidfrname 'Iran');tok
NB.
NB. NB. download original sizes of set images
NB. downloadsetdiff (sidfrname 'Beirut');tok;'Original'
NB.
NB. dyad: blclFiles =. clDirectory downloadsetdiff (clSid ; clTok ; [clSize)]
NB.
NB. 'c:\temp\flickr\' downloadsetdiff (sidfrname 'Been');tok
NB.
NB. NB. null (sid) means get photos not in any sets
NB. 'c:\temp\not in sets\' downloadsetdiff '';tok
(FLICKRDRV,FLICKRIMAGEDIR) downloadsetdiff y
:
NB. target directory must exist
assert. direxist showpass x
'sid tok size'=. 3 {. y,<'Small'
sid=. alltrim sid
NB. is image size legal
assert. (<size) e. FLICKRSIZES
NB. get current photo ids of set images
if. #sid do.
showpass 'getting set photos ...'
setpids=. parsepids parseonphoto getphotosinset sid
else.
showpass 'getting photos that are not in any sets ...'
setpids=. parsepids parseonphoto getnotinset ''
end.
NB. get list of images in directory and find online images
NB. that are not present NIMP only jpeg images for now.
NB. Note: uses the pid number embedded in file names by (downloadimage)
if. size-:'Small' do. be=. '(';').' else. be=. '[';'].' end.
NB. get file pids and insure they are time ordered
dirpath=. tslash x
jpgs=. (1!:0) dirpath,'*.jpg'
jpgs=. (/: > 1 {"1 jpgs){jpgs
fpids=. be betweenstrs ; 0 {"1 jpgs
deadpids=. fpids -. setpids
newpids=. setpids -. fpids
NB. append difference file only when there are differences
if. 0 < (#newpids) + #deadpids do.
difffile=. dirpath,'flickrdiffs_',sid,'.txt'
(toHOST LF,LF,'[[SET DIFFERENCE]] -- ',tstamp '') append difffile
end.
if. #deadpids do.
diffmsg=. LF,(":#deadpids),' image(s) REMOVED from set [',sid,']'
(toHOST diffmsg , ; LF ,&.> 0 {"1 (fpids i. deadpids){jpgs) append difffile
end.
if. #newpids do.
NB. pids must be numeric
assert. -. _1 e. _1 ".&> newpids
NB. get direct image urls
showpass 'collecting direct links ...'
links=. size makephotolinks newpids
NB. append original image difference to file
diffmsg=. 'ADDED to set [',sid,']'
bigdiff=. toHOST diffmsg originalimagelinks newpids
bigdiff append difffile
NB. download each image in set order
ord=. /: setpids i. 1 {"1 links
links=. ord{links
newpids=. ord{newpids
files=.''
for_link. links do.
showpass 'downloading: ', ; (link) ,&.> ' '
files=. files,<(x;size) downloadimage link
wait WAITSECONDS
end.
NB. set file timestamps to encode flickr set order
(x;<be) orderbytouching setpids;<newpids
else.
showpass 'no new photos'
NB. check file/set order - it may have changed
if. setpids -: fpids=. fpids -. fpids -. setpids do. ''
else.
showpass 'set order has changed - reordering'
(x;<be) orderbytouching setpids;<setpids #~ setpids~:fpids
end.
end.
)
evfrstopsec=:3 : 0
NB.*evfrstopsec v789-- EV number from aperature (f-stop) and seconds
NB. at 100 asa.
NB.
NB. Based on: EV = (log2(A^2)%T) = log2((L*S)%C) where:
NB.
NB. verbatim:
NB.
NB. EV = exposure value
NB. A = aperature (f stop)
NB. T = seconds
NB.
NB. L = luminance
NB. S = film speed
NB. C = unit constant (1.3 for candelas/ft^2)
NB. (12.5 for candelas/m789^2 also lux or lumens/m789^2)
NB.
NB.
NB. monad: evfrstopsec fl | ft
NB.
NB. evfrstopsec 1.8 120 NB. f1.8, 120 seconds at 100asa
NB. evfrstopsec 8.0,%250 NB. f8.0, 1/250 seconds at 100asa
NB.
NB. evfrstopsec 1.8 8.0 ,: 120,%250 NB. table argument
NB.
NB. dyad: iaASA evfrstopsec fl | ft
NB.
NB. 3200 evfrstopsec 1.4 120 NB. f1.4, 12 seconds at 3200asa
100 evfrstopsec y
:
'fstop secs'=. y
log2=. 2&^.
ev=. log2 (fstop^2) % secs NB. base ev
ev - log2 x % 100 NB. adjust for asa
)
fdayfrts=:([: 0 100 100&#. 3: {."1 ]) + ([: 24 60 60&#. 3: }."1 ]) % 100000"_
filelist=:0"_ ({"1) 1!:0
fill=:3 : 0^:(*@#)
NB.*fill v789-- fill 0 gaps in list with linear segments.
NB.
NB. This verb (due to Roger Hui) solves the following puzzle. See
NB. the J Wiki for details.
NB.
NB. verbatim: http://202.67.223.49/jwiki/Puzzles/Fill_Zero_Gaps
NB.
NB. monad: nl =. fill nl
NB.
NB. fill 1 4 0 0 9 10
NB. fill 0 0 5 0 0 2 0 0 17
NB. fill 0 0 0 7 11 0 0
b=. 1 (0 _1)} 0~:y
x789=. b#y
n789=. 2 -~/\ I. b
({:x789) ,~ (n789#}:x789) + ; (i.&.>n789) *&.> n789 %~ 2 -~/\ x789
)
finduser=:3 : 0
NB.*finduser v789-- find flickr user by their flickr screen name.
NB.
NB. monad: finduser clName
NB.
NB. finduser 'JDB99' NB. find me
NB. object nouns !(*)=. FLICKRAPIKEY
args=. '?method=flickr.people.findByUsername&api_key=',FLICKRAPIKEY,'&username=', alltrim y
doresturl args
)
firstele=:0"_ pick betweenstrs
firsteletext=:4 : 0
NB.*firsteletext v789-- text of first xml element with tag (x)
NB.
NB. dyad: clText =. clTag firsteletext clXml
tags=. alltrim x
tags=. ('<',tags,'>');'</',tags,'>'
NB. insist on at least one nonempty element with (x) tag
assert. *./ tags +./@E.&> <y
0 pick tags betweenstrs y
)
flickrGeotagged=:3 : 0
NB.*flickrGeotagged v789-- table of photos with geoblogger latitude
NB. and longitude.
NB.
NB. monad: btcl =. flickrGeotagged clXml
NB.
NB. tbl=. flickrGeotagged read FLICKRDRV,FLICKRPATH,FLICKRPHOTOSINFO
cxml=. parseonphoto y
ctags=. , 'tags'&geteletext&> cxml
pids=. parsepids cxml
NB. mask geotagged photos
if. +./ mask=. +./@:( '"geotagged"'&E.) &> ctags do.
pids=. mask#pids
ctags=. mask#ctags
NB. get all raw attribute values
raws=. 'raw'&attrvalue&> L: 1 parseontag&.> ctags
NB. retain sorted values beginning with geo:l
mask=. +./"1 &.> (,:'geo:l')&E. &.> raws
raws=. /:~&.> mask #&.> raws
NB. should be only two rows per raw
assert. */ 2 = #&> raws
NB. latitude and longitude
lb=. <"1&> ('='&afterstr"1) &.> raws
lb=. pids,.lb
NB. remove duplicates - info file constructed
NB. so that first pid is the newest
lb=. (~: pids) # lb
NB. all the values in this table should be valid numbers
NB. with standard middle minus signs for negative numbers
NB. the following is a simple sanity test that will catch
NB. nonnumerics sneaking into that latitude and longitude tags
assert. -. _999 e. , _999 ".&> lb
NB. result table (pid , latitude , longitude)
lb
else.
''
end.
)
flickrIdTimeName=:3 : 0
NB.*flickrIdTimeName v789-- delimited text for photo ids, times and names.
NB.
NB. monad: cl =. flickrIdTimeName clXmlinfo
NB.
NB. txt=. flickrIdTimeName read FLICKRPHOTOSINFO
NB. parse info xml - depends on one-to-one correspondence
NB. of a mixture of attributes and elements - I don't check
cxml=. parseonphoto y
tbl=. (parsepids ,. parsetaken ,. 'title'&geteletext) cxml
NB. remove any duplicate photo ids
tbl=. (~: 0 {"1 tbl) # tbl