block by dribnet 3fa11e9afe4c8fee721cb2df36d7d88a

vibrator smartgrid (novelty filter)

Full Screen

Vibrators

Vibrators smartgrid

A quick reshuffle of Sabrina Verhage‏’s Vibrators dataset as an experiment in increasing novelty by removing redundant elements. In this version 165 of the 1371 entries were removed as being too similar to their nearest neighbors.

index.html

<head>
<link rel="stylesheet" href="leaflet.css"></script>
<style>
body {padding: 0; margin: 0;}
#image-map {
  width: 960;
  height: 500;
  border: 1px solid #ccc;
  margin-bottom: 10px;
}
</style>
</head>
<body style="background-color:white">
<div id="image-map"></div>

<script src="leaflet.js"></script>
<script language="javascript" type="text/javascript" src="zoom_image.js"></script>
<br>
<a href="grid.jpg">full size montage</a><br>
</body>

collect.sh

#!/bin/bash

# show commands and stop if there is an error
set -ex

# make the directory if it is not there
mkdir -p downloads

# clean the directory if there are old results
rm -f downloads/*

# get 5 pages
for PAGE in {1..3}
do
    # this is an example with a group
    URL='https://www.flickr.com/groups/hdr/pool/page'$PAGE
    # this is an example with tags
    # URL='https://www.flickr.com/photos/tags/'$SEARCH_STRING'/page'$PAGE

    echo "about to fetch URL: " $URL
    sleep 3

    # fetch the images
    wget --adjust-extension \
         --random-wait \
         --limit-rate=100k \
         --span-hosts \
         --convert-links \
         --backup-converted \
         --no-directories \
         --timestamping \
         --page-requisites \
         --directory-prefix=downloads \
         --execute robots=off \
         --accept=.jpg \
         $URL

# other unused arguments
         # --recursive \
         # --level 1 \
         # --domains en.wikipedia.org \
     
done

customgrid.sh

#!/bin/bash

if [ ! -d "/usr/local/anaconda/extras" ]; then
  # Control will enter here if DIRECTORY doesn't exist.
  echo "smartgrid program not found"
  echo "please first install using directions on blackboard"
  exit 1
fi

# show commands and stop if there is an error
set -ex

HOME="/usr/local/anaconda/extras/home"
export PATH="/usr/local/anaconda/bin:$PATH"

python /usr/local/anaconda/extras/smartgrid.py \
  --tile 12x6 \
  --input-glob 'resized/*' \
  --left-image 'resized/29516311783_87657c243a.jpg' \
  --right-image 'resized/33488098312_91556220b5_z.jpg' \
  --output-path customgrid

install_smartgrid.sh

#!/bin/bash

if [ -d "/usr/local/anaconda/extras" ]; then
  # Control will enter here if DIRECTORY doesn't exist.
  echo "smartgrid program already installed"
  exit 1
fi

# show commands and stop if there is an error
set -ex

# make the directory if it is not there
mkdir -p /tmp/smartgrid

# clean the directory if there are old results
rm -f /tmp/smartgrid/*

cd /tmp/smartgrid
wget http://deeptom.staff.vuw.ac.nz:9000/smartgrid.tgz
cd /usr/local
tar xvfz /tmp/smartgrid/smartgrid.tgz

echo "DONE: smartgrid program installed"

leaflet.css

/* required styles */

.leaflet-map-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-pane,
.leaflet-tile-container,
.leaflet-overlay-pane,
.leaflet-shadow-pane,
.leaflet-marker-pane,
.leaflet-popup-pane,
.leaflet-overlay-pane svg,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
	position: absolute;
	left: 0;
	top: 0;
	}
.leaflet-container {
	overflow: hidden;
	-ms-touch-action: none;
	}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow {
	-webkit-user-select: none;
	   -moz-user-select: none;
	        user-select: none;
	-webkit-user-drag: none;
	}
.leaflet-marker-icon,
.leaflet-marker-shadow {
	display: block;
	}
/* map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container img {
	max-width: none !important;
	}
/* stupid Android 2 doesn't understand "max-width: none" properly */
.leaflet-container img.leaflet-image-layer {
	max-width: 15000px !important;
	}
.leaflet-tile {
	filter: inherit;
	visibility: hidden;
	}
.leaflet-tile-loaded {
	visibility: inherit;
	}
.leaflet-zoom-box {
	width: 0;
	height: 0;
	}
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
.leaflet-overlay-pane svg {
	-moz-user-select: none;
	}

.leaflet-tile-pane    { z-index: 2; }
.leaflet-objects-pane { z-index: 3; }
.leaflet-overlay-pane { z-index: 4; }
.leaflet-shadow-pane  { z-index: 5; }
.leaflet-marker-pane  { z-index: 6; }
.leaflet-popup-pane   { z-index: 7; }

.leaflet-vml-shape {
	width: 1px;
	height: 1px;
	}
.lvml {
	behavior: url(#default#VML);
	display: inline-block;
	position: absolute;
	}


/* control positioning */

.leaflet-control {
	position: relative;
	z-index: 7;
	pointer-events: auto;
	}
.leaflet-top,
.leaflet-bottom {
	position: absolute;
	z-index: 1000;
	pointer-events: none;
	}
.leaflet-top {
	top: 0;
	}
.leaflet-right {
	right: 0;
	}
.leaflet-bottom {
	bottom: 0;
	}
.leaflet-left {
	left: 0;
	}
.leaflet-control {
	float: left;
	clear: both;
	}
.leaflet-right .leaflet-control {
	float: right;
	}
.leaflet-top .leaflet-control {
	margin-top: 10px;
	}
.leaflet-bottom .leaflet-control {
	margin-bottom: 10px;
	}
.leaflet-left .leaflet-control {
	margin-left: 10px;
	}
.leaflet-right .leaflet-control {
	margin-right: 10px;
	}


/* zoom and fade animations */

.leaflet-fade-anim .leaflet-tile,
.leaflet-fade-anim .leaflet-popup {
	opacity: 0;
	-webkit-transition: opacity 0.2s linear;
	   -moz-transition: opacity 0.2s linear;
	     -o-transition: opacity 0.2s linear;
	        transition: opacity 0.2s linear;
	}
.leaflet-fade-anim .leaflet-tile-loaded,
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
	opacity: 1;
	}

.leaflet-zoom-anim .leaflet-zoom-animated {
	-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
	   -moz-transition:    -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
	     -o-transition:      -o-transform 0.25s cubic-bezier(0,0,0.25,1);
	        transition:         transform 0.25s cubic-bezier(0,0,0.25,1);
	}
.leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile,
.leaflet-touching .leaflet-zoom-animated {
	-webkit-transition: none;
	   -moz-transition: none;
	     -o-transition: none;
	        transition: none;
	}

.leaflet-zoom-anim .leaflet-zoom-hide {
	visibility: hidden;
	}


/* cursors */

.leaflet-clickable {
	cursor: pointer;
	}
.leaflet-container {
	cursor: -webkit-grab;
	cursor:    -moz-grab;
	}
.leaflet-popup-pane,
.leaflet-control {
	cursor: auto;
	}
.leaflet-dragging .leaflet-container,
.leaflet-dragging .leaflet-clickable {
	cursor: move;
	cursor: -webkit-grabbing;
	cursor:    -moz-grabbing;
	}


/* visual tweaks */

.leaflet-container {
	background: #ddd;
	outline: 0;
	}
.leaflet-container a {
	color: #0078A8;
	}
.leaflet-container a.leaflet-active {
	outline: 2px solid orange;
	}
.leaflet-zoom-box {
	border: 2px dotted #38f;
	background: rgba(255,255,255,0.5);
	}


/* general typography */
.leaflet-container {
	font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
	}


/* general toolbar styles */

.leaflet-bar {
	box-shadow: 0 1px 5px rgba(0,0,0,0.65);
	border-radius: 4px;
	}
.leaflet-bar a,
.leaflet-bar a:hover {
	background-color: #fff;
	border-bottom: 1px solid #ccc;
	width: 26px;
	height: 26px;
	line-height: 26px;
	display: block;
	text-align: center;
	text-decoration: none;
	color: black;
	}
.leaflet-bar a,
.leaflet-control-layers-toggle {
	background-position: 50% 50%;
	background-repeat: no-repeat;
	display: block;
	}
.leaflet-bar a:hover {
	background-color: #f4f4f4;
	}
.leaflet-bar a:first-child {
	border-top-left-radius: 4px;
	border-top-right-radius: 4px;
	}
.leaflet-bar a:last-child {
	border-bottom-left-radius: 4px;
	border-bottom-right-radius: 4px;
	border-bottom: none;
	}
.leaflet-bar a.leaflet-disabled {
	cursor: default;
	background-color: #f4f4f4;
	color: #bbb;
	}

.leaflet-touch .leaflet-bar a {
	width: 30px;
	height: 30px;
	line-height: 30px;
	}


/* zoom control */

.leaflet-control-zoom-in,
.leaflet-control-zoom-out {
	font: bold 18px 'Lucida Console', Monaco, monospace;
	text-indent: 1px;
	}
.leaflet-control-zoom-out {
	font-size: 20px;
	}

.leaflet-touch .leaflet-control-zoom-in {
	font-size: 22px;
	}
.leaflet-touch .leaflet-control-zoom-out {
	font-size: 24px;
	}


/* layers control */

.leaflet-control-layers {
	box-shadow: 0 1px 5px rgba(0,0,0,0.4);
	background: #fff;
	border-radius: 5px;
	}
.leaflet-control-layers-toggle {
	background-image: url(images/layers.png);
	width: 36px;
	height: 36px;
	}
.leaflet-retina .leaflet-control-layers-toggle {
	background-image: url(images/layers-2x.png);
	background-size: 26px 26px;
	}
.leaflet-touch .leaflet-control-layers-toggle {
	width: 44px;
	height: 44px;
	}
.leaflet-control-layers .leaflet-control-layers-list,
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
	display: none;
	}
.leaflet-control-layers-expanded .leaflet-control-layers-list {
	display: block;
	position: relative;
	}
.leaflet-control-layers-expanded {
	padding: 6px 10px 6px 6px;
	color: #333;
	background: #fff;
	}
.leaflet-control-layers-selector {
	margin-top: 2px;
	position: relative;
	top: 1px;
	}
.leaflet-control-layers label {
	display: block;
	}
.leaflet-control-layers-separator {
	height: 0;
	border-top: 1px solid #ddd;
	margin: 5px -10px 5px -6px;
	}


/* attribution and scale controls */

.leaflet-container .leaflet-control-attribution {
	background: #fff;
	background: rgba(255, 255, 255, 0.7);
	margin: 0;
	}
.leaflet-control-attribution,
.leaflet-control-scale-line {
	padding: 0 5px;
	color: #333;
	}
.leaflet-control-attribution a {
	text-decoration: none;
	}
.leaflet-control-attribution a:hover {
	text-decoration: underline;
	}
.leaflet-container .leaflet-control-attribution,
.leaflet-container .leaflet-control-scale {
	font-size: 11px;
	}
.leaflet-left .leaflet-control-scale {
	margin-left: 5px;
	}
.leaflet-bottom .leaflet-control-scale {
	margin-bottom: 5px;
	}
.leaflet-control-scale-line {
	border: 2px solid #777;
	border-top: none;
	line-height: 1.1;
	padding: 2px 5px 1px;
	font-size: 11px;
	white-space: nowrap;
	overflow: hidden;
	-moz-box-sizing: content-box;
	     box-sizing: content-box;

	background: #fff;
	background: rgba(255, 255, 255, 0.5);
	}
.leaflet-control-scale-line:not(:first-child) {
	border-top: 2px solid #777;
	border-bottom: none;
	margin-top: -2px;
	}
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
	border-bottom: 2px solid #777;
	}

.leaflet-touch .leaflet-control-attribution,
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
	box-shadow: none;
	}
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
	border: 2px solid rgba(0,0,0,0.2);
	background-clip: padding-box;
	}


/* popup */

.leaflet-popup {
	position: absolute;
	text-align: center;
	}
.leaflet-popup-content-wrapper {
	padding: 1px;
	text-align: left;
	border-radius: 12px;
	}
.leaflet-popup-content {
	margin: 13px 19px;
	line-height: 1.4;
	}
.leaflet-popup-content p {
	margin: 18px 0;
	}
.leaflet-popup-tip-container {
	margin: 0 auto;
	width: 40px;
	height: 20px;
	position: relative;
	overflow: hidden;
	}
.leaflet-popup-tip {
	width: 17px;
	height: 17px;
	padding: 1px;

	margin: -10px auto 0;

	-webkit-transform: rotate(45deg);
	   -moz-transform: rotate(45deg);
	    -ms-transform: rotate(45deg);
	     -o-transform: rotate(45deg);
	        transform: rotate(45deg);
	}
.leaflet-popup-content-wrapper,
.leaflet-popup-tip {
	background: white;

	box-shadow: 0 3px 14px rgba(0,0,0,0.4);
	}
.leaflet-container a.leaflet-popup-close-button {
	position: absolute;
	top: 0;
	right: 0;
	padding: 4px 4px 0 0;
	text-align: center;
	width: 18px;
	height: 14px;
	font: 16px/14px Tahoma, Verdana, sans-serif;
	color: #c3c3c3;
	text-decoration: none;
	font-weight: bold;
	background: transparent;
	}
.leaflet-container a.leaflet-popup-close-button:hover {
	color: #999;
	}
.leaflet-popup-scrolled {
	overflow: auto;
	border-bottom: 1px solid #ddd;
	border-top: 1px solid #ddd;
	}

.leaflet-oldie .leaflet-popup-content-wrapper {
	zoom: 1;
	}
.leaflet-oldie .leaflet-popup-tip {
	width: 24px;
	margin: 0 auto;

	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
	filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
	}
.leaflet-oldie .leaflet-popup-tip-container {
	margin-top: -1px;
	}

.leaflet-oldie .leaflet-control-zoom,
.leaflet-oldie .leaflet-control-layers,
.leaflet-oldie .leaflet-popup-content-wrapper,
.leaflet-oldie .leaflet-popup-tip {
	border: 1px solid #999;
	}


/* div icon */

.leaflet-div-icon {
	background: #fff;
	border: 1px solid #666;
	}

left_right.jpg

����JFIF��C	

			

		


��C	�����	��<!1A"Qaq#2B�����C��35R�7������/!1AQa"q������#2BR���?��>��WQ�\_]h*�N'����3GB]�~���P3�88�M$n����pu-M�+/|gj{l��Mm�O#0l;�n૨>㎘]�ũ;�%��4��z��V�J9Qd%0�c�pI�/68A]�یb����t��e��,�M��|m��җ��������3��FF�N}���g?�y>}Լ�
���<���k0���$q��?�:R�2��j����b��$z��$�����������[�Wk�+KL�Z�`���[8��6̮��<�/��O�ψM/�,ڲ�Rا��e���ǢҶ��-ʼn#A���JL��Gj�Ľ�P�Xm�M,T���u�S2�N��P�X7�����JH���}{�j��F�_�e�����Vخ7n}��@�g��#�K�-��Uӻ��PWW�5��8h*Z�Q��"I�?�pˌ�(�'�.������GOW>��z5ƥ�'�Y��e�5����X�6�8�Fʕ�,2��~�\m�
��Q-ԐCW,��	$�x���_鑉�O+���.T����GލD�j�f�������S�V�YN~�P)��7�o����)�x���+�J�����:��G���!�	e!B�'�ԡf�:�Q�ؠ�u�*�x$ {u���r�}�����ZA��:��ߥ�ސ�,����X��4G���B�/��^�<\c��9��e�-�僬4T�k��쾂��\)�5��SwI$Z��-�G3g)��0b�1�
�����G�&2C��)`�Ǥ�ez�T*�3UӢ�'�Y�y�}��#���#��wF�z+埴��ME'���T�s�Cq�<s��]řٯ��I�%���-m����D�O$AWೆ�瑟Ӧ��F�������;�s�Ҭ>�#����~�<���VH�����a�`}������4ߴ�_�ډ�W�`dd/n��������8�9����;a�,��Uf��Mp��7,������)r��B�y��zY):�����:7�3SUGl�����8��SΫ�G���[��y����W���V=�{֣��Z4��%���$���+�7?���Xe�'��.����g+u^�Қ��t�Zz��IV�=V�-[�`��"��U��+��׊��Ev�*�{MS��78��e��H�cD���|�J����Am���`m��nZn�O]������i�MJZ�;�p#
�;؅p���]MU�ɦo2WB����,u"y�IW�ܱ(&F`J�1�r�J1�d����驫>qhҁn����P�1B!�|��q"�O�.�H�_t���GS��Y"��&��PD�@���@��eq�� z���0ŀ_c�=DV�c��P����j�<��
X�íY3A�3�:��A9��|t.'6n����нd	��S�
�۞�)�ϷB�<c��h�}��K,]e���{l��g�PC=ka�^��`8�68����y߯�7g�в�JӢ�=%�̧reP1�O%s����-��+��%��c��VLTE�6$�#i��x+�2:��G���4u5�Z喜b'j-�V3��'�r08�TK/W˅=�,uTBHŹj&5`��B�U�����q��i{��m3K��%��G�:��R������?�VK���WKn�>���j�x{��Pǒ�9��d�Yڊ�^���f���)���V��%V⎯{�G!��<���ۨ�E�L.v���c:��)頧y�0UH>�R&Y�B�.8���x/�i���s��n��Z���m�qJZ*:C��9�����Ƥ}E��'�A�{[ݩh�*���Q�/���b��b��,�q2I<���m�Z(�j(4�[&z����{6���a��َ@'n[p� ���4�}��G=l��b�W9�xAywFYK6���
	'q�"��s�Uk��:Hl��Y��͐���H���J�#�Vش�Zd���WE��[���8%UK��&@��#��b���\�N5�+����M�MU]Y4��2�E���ۂ�v�@#=;�fA�?�_f��"���րzD:�3A��VV?~��վ�ݘ��Le:�G6���C�s���,���T�������2G��d�	�3�y��mSiڥ5n���ۜ�R��BH��w<�'����������h�w�6���[Y[3VK
*�52�����#d��#��ج�oJ�eMOQs�H9j�4��Z%@F�����0Gfq�k�/�m��h��qFիN�Q�|$q'�o_���!� ;)\w��R[5�u�I�^��ק�`�Z7�i�X��J�ܼ�4������{m�����U�®��hi�E-@���FH��h�9 �<P�";h.�S��G�饣D��* `�8WVLŝ���{R጗^�^�$�ylŁ�d�W�i��8��e� �P�+��x��]QUYk�B5�����J�,n�ԉ[b��:�68
����zh/��xo��u��������k��e�|bU���㬸�\�����lw�1q��RU��3��?zHќ�۹;��z��o����Ev�ٯ��\(�S���R©�I1�>�w���&�F1��5I���h�u���.�D&��d�<�Ϳ�2�+(��w`d�S�Gi���R
Ye��*H)�6�i����W�v���l1�I#�U�Rު�.W�&���1G:�E�:	HW�܂���y!W���j�jڠ�۵�H7H�[û#��D7���RB�s��(���u�e��"���<}��"p:6�Z�~A1�%`��h��⿎��hס�.����w��O۫Ѡ�����><u	��n��4�z�Ӻn��Auԕ��ֶzʛ���6�i[`L{�o��-�_�	��N���Q�}�[XX�����0��r�2�� u2@��ZC�zB�p��ʑU��t{��A#ʏ�} ���>NN�$��#Q�Ωj.U��X�%)�����3���)]I۹{�x�U�t��jMASM
Ȭ�ؒś����:pF�As�v���+��6�n3��i�&X@h���H`W<�0~�um]��.�u��6�ƦZ�����]��I
.�9#;��R� ��SY��p����U���ӇH��r��I�eO�#��4���Yg�Tv*�4.TIF���,s琢����Q�����'��y-}��n���_,"���������/�pv�������ae�~���ݨ*�%nvگ�X��irn>3�E���-���.4�w'OP�H`@�\i�R�lnD��f���ό���|s\����c��{��Q
��^����Z�c�ޚ����zl�u����*�w�zBz��eSO�����8ک���� ��s�R(�׺z��l�{|3�^���X#Y�ճq|)m݃�x�W$�����å�����YlP�;m38�ӆ\�eAPX�!T�����ѧ߯�&z�����*u@ 8�AzAA��`ޭ��}�X�ͽ-
<W����z�Ds�U�a�s����K	�C�Kw_�Pth�L0U\����sQ[m��s���|G�������:�;��m�+e�I[�9�A$ճ3���S��21��>Z�6h�i�-5JPFn��̡�����%��2x��h��-/lT4kS���:�Hϝ����w�s��0T��i��=��,��[�m��Bjf��g�/��R^���T�8.Mm�.�*}Kl��5_�)�$��ê	0I� u���GWJk9y�B��#)���c�qD7T��K�������4r��#����d���ϻ=��ϭ�.�UTsUT�T��K"�R�`�F@�8�G�`Ֆ������S-��Q����)��E@�I��~�޵b»�L�m
��Ml�B�$���1�(f��8]�q��<d�^���n���CP,W4R�@�F�O�N?��g�9��5dc]v�N�MAk7}1��P��6�UU'��L�wq��=[b���w{;A0�Kjz���6�˻)���1�W$I��;nX�R�a6�/N�|qh*Z9�}��uz*��4b�ڟ=Bσ�� ��K����Yp}w���ǧ���%��=z
uy��5���cRI����%�a���:�=@U�u�3�@y��:9�z�����`����g��c���ss���tH�@G�@�=ȿo��iGۥ�DZd�j;��ݪ����8Ч����=���H�[GF�h�]x�#�&E]��w1|��~:уaV,fm,�➒�su'���x�u�~	���=��mIh*H7e(8E'��D��8<�{C\�Uim���QP�Bc��&b+������I��<����u|���f��m-4RDM]8�o�_�����]���K�V���ۻ�=l��!�4yyL�bL�0x�鞣,x"�ڻI���N���մ4�1�R,��p�G0ާ���bz����L}���w�
#_n�#٠��o�U�z��12�AP���h��%Vku������ü��U���!ډ��]��|}?�u;-`�Zt&��Zb��-t���qeh��G��>������>�V�䜠�ޟ�%���E�-�
�0��Gd���<t\��=�����[
}m]4Qܭh=)�x&?Uފ�6���A8�%ZgHԝQܘ`��X�'�[㜗�)�QOI)�ۥ�?[���;]��맣���)�����O�A��?F�s�W�3DvG�_JXͧ_��ԔU��4�E�*&UwR�$$4���F�c�'��?E���鞨*�ۭ�f2<�l��],������`��qGs��=���$t(ǎ���P?@&������ݮ��G�;�����a[��w<��N$�`c|q��Hm����I]-5�PSU
y�A�č�їqR�dƹ�<g���4XwK~�,�rQ�R�IE|��d-�2�"���Ϝ~r�,�=�O��ҍ��5϶J
�Vb9����3�������������Gm�H�-4QF}�5' ���� �s֌��h�Ǣ;sk��
��e�ap�'��3��9
��?�z,���]�v⪮{|���R���D���te�E�Y���}�/�|��A�dl��U}�wF�m��6y�8L�yp�J$�q玈>K���lݏ��I�ݦ�oЎ���N
��8?@���s�]��}��6�O�M_5m��Ws�H()��!d.UV-�%�q����:��f_�i�%��ڛ��ZTSOM
XJ_�Tk�8�F)w�}3��g���]]�t�k*�kب���ڴ�������b�n������'���YE��~��\�U�u8W�`
��)I��u\2d�`<��/%c���X4��� ���#����7���1�n��>28�Lѥ�eM]W��Ttu��'�OS�nw<�0x#��:�i<�a�ד���1����39�ת�����1�b��$�V�+p9�:�Z;�ߞ��Tt0#�:=�����,'�Ծ�Yl�`6}�^@[�Q�&��=e� ���u���d��*P4 ���K���nv�21�#��Q���+��ݺ*z���T�2R���d�Q����<�<{��91p�}޽��{A�'��G�����oC9�`x�29��[gu��֣L]�.�1�"��X�K,ѤQ��m�7t�'8��JȲ]����*tU�*�Um���~TS\Ӕؠ��)��pFps�i�T�O�t���+-��� ��-9��1�`�gہ瞅#:OJi�]=Md��v����l�2��I����8�t3�ۯ����V�ŭ��w�jZ�F����>�G?Q��t�-&V���e'{t�ƪ��J����x���2S�S���8��T�FX�;S_{?l��3�-��OE,�n;"�5��wR���8��p^QG�Bv��C��J�:�����T�5JK���lHl`8>1�z�r̵H]��e�Ui���+]OM��Z����$t��sd}����>|A��Ti�
L�:Z����E�����B\�Ζ�{�YV�����ZM�N��Q��М�tyArU��{�Ӵ�6{�U-_�PT�	_Ӛ)ia�dx����yl`�{#VZz��7���[���]5u<z4��SLD$���N�v�\�G�f�]�6���֓=TR��zՀ{�z��'ߎ�b�j��dT0����8�H�|~s��X�Վ�\��t�%���؝��sѶ�}��z��R^�?�RXwSC"�Q��P�F@�O��ֵ�Z����ߟ�_�����z+�V�z��~;y�%�����`��+�X�y�$X�8m���ǟ���ϩ�BOG]�\>�>���k~�����p�*}�G�����񚚴��qq�:۫vf�����N@���zY(,�>�,�Q�����[��m�M#�z�`����C��������v�Q�M�U([1Ċ�
�f]��󀠮z�V{k~�����ĸ����m��tx��!hĊ�b�FǐKdV�]������Z��:i��S;�Y=
2�B�!�[����#�@�3��i�՚�ݿ������p4uvq1�T@=EQ�[���8�fԷ��vcG�[/�\����R� $�l�����"�|s�9��0�!�\�C�մ�~��-��jSS�TJ�d��~������8�㫐�������bmw���Xk�
������{�oj4m���<��2J�!�;��o’��W�TE5�>���rdՍwΙ��Q9����Ui#~w�r9�QQ8$ZB��j%j����TR�)P����&���ݳ�y�I���:�tִ�Z��l�写�e~U�d`T�c|��a�Ҩ:GWi�b���t�����}(�u��.���_W'�d��<��	��?m�ME��L���AWOQ�H��m`��`66~�����>�ѱ� ԚWTP�lt�9ED3��P�[�* �/���>S#�N�F�u�ۺG,�r]��VM�I1p���g�b��"��j�����_d�i�槝��I�$+G"�����<�0X�2+X۟?߯�&z�ȥc�Z��1��G���]SW���d��ک�$��*)7m>O~���=3P�d����Y�z_C=�����O���nk
=��_B�%��bL�g�}]���5o�π�^��5��O�'�c���������u��Ά�O�+�(�U-M'�%DJ�$�)���g�]�r���_���cm�������?&P�з]ef��������zz�
��Y*��+!�q���z�Llrq�����~�Ӗ�g�����Sd�F�f�Vimgi���@&���+$�8�ٖL������8�������MOO�Iߏ�xZ��jE�k$ �U�2ֵ4���%d!K�+�<����c��I5t~ӒV��Qp}�롁u��xԕ�[,��O3P����&�y���-m}=��?��t�g�-�_��,�h�GI3�%���s�
gdvU�x���X���]�������yރWI�W�DnF*J����5%i�����ZA����?����v�'�^�ء�_�R\�em�k���Z*P0	%;�G(,���g�Nz�W�>If���h~��=<-5UuZ��ZZ!M���&9UeR�LlU�m!�=�GQ���?l�Z��)ll�C,�h��`��!>1��Xǒ��@�UOz5������QSKG-�(*��ϛ����9V��$a����!�Pk]>����k������T��٧|R�4����!I�1��c�"29k�iAn���WZ��.t��R֦Т9���~��!p[����#xi�k4��y�y�����2X��>����h�Wk�ev�zjǤ��=��N�JHՔȠ~�$���0ZFY��Y�6��١�5�b�6���A�p�1�p��uK&��E.��e�SѲW����R�R�wGL�`�]ǖ��ry�=���y�'mt����q+�kg���5�q©&[wI�A�s�6�}���f�Kd�����]-P����)K(�Q�ɸ�\�:g%���KV��[5}��H�k��H��i���G�`363�D��t'�!ݗ�t�ͺ�ڵWoi�u̲TR�ӹ�D
�'�3���3�z�,��u���u`����)���
z�H)攮�ۻq�Ḍ�R��"���I�-��k�����e����  �ň��g�'5rG�A
2�>I��_QܖOV��q�Zo9���Z�ꥨ`�$0�4�s��rs���?��?U�������u���I��D�[�Qi�}T�r�W� �RH��
��&ʜ3��ǒp?#�}VS_�*_��ޟ��ή_��ѽ���Cۛ�нU=���|U4BX�h�XF����.�
�\����oR��t����RU�%��z?�ھ�n�V��40GO]Uo]j�5SL��X�X�
�y ��������Iprs�^� ����Ma�^�kR��o����N덠H��NrnS����^�p�rV����f~������uVK����e����y�W�<o�l���ppG^{�R��sRjC&�����(��[�v}z
$�W�����iAx�[�b����I��z�|��C=���%��w����@`Yd
P�0��3s�cpG=�&�<y���J{m�{i���U^b�z
�d�/F�����,F�'��䞻j��R������I��PӦ����]&����Un��RT%,��L��ʥ��ఐTG��z�T���,��N����X�Gmi�K��Q�tȋ}/�
=?��qPI�!��g?S.q����^{��tzͶ�ػG�/�dMt���\�o���J�$lĉ��~<������z�_OJ9_?��'�4��+����펾����NT�[�⨀��A�>�s�G������ZÕ?����h�+_Έ��]�Wh�u���X�c��q��v~�O�o���j��_�*��z�꾭�J�'M�w�3��$}����~�F��}����=۪b�J��(5]6d;�݅�A�7_9���.�����VSUC��]䮞Qc�W�\Hw};�����3��|2�h��K����
@(�u�j[a��i��A!�C�+������Vy.�u�J��X��T�>���R��@F؁$o8ʐO ��g�F�t��wT��=���"����s���A��I.q�GV�0[t=l�jdX2��c����eR�5�����ЬV�	��ED��h��N9+���O�ۨl��޴ֹV�X�ܩ�L8� h�D(�8fe�q��h���jE״�!,�i:�q`�I���I�?|y=FX�X����CO�)-wo����z��*Ɔ	�j�ԭ����ry�*���V�5Gu��f��
�.���<�mb4�������|0ݻ�<�:�[3cƙ���y�/\�	[�Bِ-�Vy"f<���89㎣Hd��.��]+�X�]�ꚽ���ޔzd2�l%�o�c�㌜k�Gi��f����f����Z��Tz�5)�����bN�rz��M���Ҷ᯵�T�������n*M;���۪��w���j#�4�X��3P3�B��4��T���r��`y�(�ɛ{k{�79�n��i����u����Ӓ$Rʱ�0(�x�q99��)��Qܻ瓞�Ӈ	/΍�j����Mx��t�?S��4<)U���o�'���J��I�ѥ�6x.��5���[���hg�zz���E�D`>�`9��ɬG�����9�
3�5^���w��,v��4�D�nN�d$r�p|�:���&љT�N��-��i��z��SOnCQP�����\�D�k��� 2��8����K�G5��5j�
��dt]75���k��	z�0oV:��`�68
q��P�W�ZC��U[nV�[p���7�EIt�@��1�g>$��,Yd� ��'w�eN��=}��e��
���#M�v�����2Dl����8��֠���%&��ڧT���W�^8MJ�%,h�C�hυ$g�$��eV�����k�'7���Qگ���wZ�i)a���2H�N�+?V�	ٸ�u�˲4ڴ/��Zƨ�X�jV���`��0܍$n��$�������cq�a�)n#6I��;�߮q��V,����6����##8㑎�;c��[W�.�������)npI
S�qS2<
J��R3���x���pp��ɭ�2޵�k-=��J��#�"�P0�v��$�d�넴�m���I�{�m���ԶOQO�:LJ�
�gʃ��O�@�z��J���"�M}x�W�*��6ZYg�H)��/�� ''h�'�9�F�m�/���Pk��4$H
E�d��<��AK�\u�=��]�;���-�v[Vms�$��M<�H�r����*N�|�S��e���w׳�U��Ŗ�!�T�X1�e�<�w�,��“�pʭ������,�V���<��5+5s،#I~�rJ�V��P���d����\�b}e[K;�b�1ԅ@����Gq�[�4�z�d������i2\/ur,^A���s��'Ǖ�
%z2��zn������i�+. ����r��Ӹa��x�겆l�]��h}yl������f��+�1��|2����4Y�b9�#�_ɵE%������{�Z�E�i�%�����b���2'G�**�l��P8�H�c���]����]^��n��v���3�,���hYcI��S�H���������=�ԑi�ΫJ�J�zD5T����ǟ���s������;�2�_Z��4�j�>��o���S�R�c�F�$P���U�aY
㍍���Y�R4��Ws��oA]j���Yj�}Tԛ�1Dڛ�6�waGՑ㞮�X|����uQ�d��Z�AtY*֤C����3�g��So���{Au�=䥒�Wv����+ֱ�&+��ìL�p�)#���
+d#������������rU	)�_,�PK�zrYF;�Hm�O$o�0�\�nt1J,�l@�!�(?��Ǿ=���a�$��+\�.���]�n����9i�ıL2�0<p�
�z���p�d��~�4�U%j�Hꮹz�eU>w*�<	֒��|����,�WmO���@�1ns!xє���v�ݱX���/]aVW+C�d;�M`���[S7�KD1��1J\c,�O����1��iMQ�I&ZWn��픱jkum�f���`�I�*K3*����Cd,��2y�J靽�͍���ZR����ٜC_H^J���7��'�F9$�B��Gt99��X)K����X����He"CE2z��Xđp2�r3���G8�����LGH-��i�V5�Y�%$2��OP��(�3�G9߹�Ô�X�Ƙ�]�;}��Yj�dj�,f9���8�|�pOQj��epIj�8�꩞��2��q��l�����F���m6s���I��V���ҽ�f1��T�F�{c���#�t����DT���%t3�Yn̲1iV0C�x(���ppq�|��_k-��+����tt�i)VT�H�/��.	� A'��jI&w�[B����v����~��Fc�1)��H�Bv!8��c�	q�nj<�_�9}�w��٣�\����F��ȇ������ڣ>�ۢ�Ԗ��[�Z�Xj=U�v��d�:V8��UX�@�~�sC;rC6z���v�>6o߳%������d�d��_AW{Sp�mQ� 9��݁I���*����5%6���N���k%�-$��،�I��B�Dc�D�+��_�(-�Z�}��:i��4щ1�:o_���	�>|t�,>��:�QC-4v�یO��#j�
�c;h����T,KS�~���Ev���DX���A��30c��?צF	{���[��:��C�U-[�K����`��F3��^E�n�w�Rk���gKjR��ZWU�Yp�bFF��~��qѤ�"B�K�jk��ukŞ��5D�b���
���}6$�LcRI�$�`; \u-�HG��T�P	#��)��d%�?�@0S�d�%H��!�Ե�ut_1x���c�ˤB8�|zĜ��7};8� �h��	Ug��Q]�ޜ"��
����0����K��F1���������I��m�A@�*)i!�L�J�4�	?x�n*�0Zr=i�55����RK7���jm�.���9 2zZ������\�m��e��獞�fYW�)(���H	F'��I��E_��h�ol�毧{�EO-}�=:��=Y��9�	��"��o�<��J�Wxf8��oUuf��CSV�<S�|GǾ8���)�7��^������r[�J2ͽ�z�99U�$~��:�ͭ6�J�;f4�/6���j��(W#8�G2s���.
�K��>�QP[�k��1Q+$���L����nq��9�j�=��W�k�h�D�m���<����\��ˊ@�O<1AR�P#���g����j�I�**9g�5�d(
��-�������Q$�"�^�u8I���q�9�t��0
��*�0�A�x��ߪ�&��1�"ΫB��i�0��� ���Ǐ>�\�FvЖ���a��wrOҫ�Ǔ�:���j�Um*Օ)��@'�����:Ӌ\�ٌ����
�Yo�g��dIZ6��0?<��f���lr��]mw��ۂ���DD�ǐ<d��>q���)r��"),nIy"$�	nI����Y2��8��N�$9N����ץ��U`�Z�W��VZ.vj�e"�\"��x�eX�I,w���#����U�f
Y�N��Uݞ�OKQ-͙�%�%V��)'h�8�y<�̓��/���M��0��)X�T�G��f9
��XQ�\���X�q��%4vZXi"�v#+�x�2?��Z;��_7uU_'h�F���'��ps�u-!@a�w̊�c}ܺ�#�I;<c�?߫�
%Z3�}��7J��E%���h�ڠI�J���°#8�;F�6�Kl��
�*K�
Z;$�ӡy]س;��'��ǎ��� ���]�cIMQr���2�`=ԓ�ۑ��E��
�ܦ���bgRM�ч�{�����,�5]���Վ��3o%=D pU��9�?|��w
Y�����5��[�aRH��T``���nlP|?�"����{�$�i*�nKTt��0R������p^:�4Z���w��Yb��LY)=+|��x�$����ۦE--�;1a�J�dQI�1g��4�����If;���9�'��TO����(�M��	 9/�r7��w���[<sԢ��:�ѥ䞎���	�i�`\�N���9�O 9���I	%� ���Hmף�(�gP���>��A��ˀ9=kq��O����!����jE�vP%)�p��rF�?�E/$����܎�EQh�MZ��ke$D�c�_������.�)YSVUN�/�"9�d�u�T:�,9�`u:��η
�F��L�	�	8\���n�?n����Z��;�d�Hb}�� {y�ꌰĚ���eI�Hv����[�d ��(sS1䧂9�3�������,�Z��A�P�<�������\5�Rf	^)��I>?���-�wc����2�UO$����,��c?�o>��UM���M5�xUg0�pT&p=�I���:�L�0����)�� �q��Y���E��'��mWG#ʨpv�~�����i-��*��}_NX�Si�c���Ȍ��ϣT�����
�䕡�?�uUϰ�r8�nry>�i�v�m���M�v&����F�l�����Ч�,�������+Ib����H�s�d?>�K^E0���������q�����祡Lv��H�v��q��!*�������z`Sݺ��w;�;5
�����n�����!�.�s����g�N?ߦH䝳��WR��&>w/��Kcc��s���t��"���
^�=�uc���$����n��1/�/�F�������~���dl��ӥ�LK[�o�%���e��M�3�9ax���-�LCY���;R۵̮���T''���d����M�S'��ăS�Qښ�l����N=�<�>���S
_��H
D����+�b	�!�Iϱ��7"�b�~>#���)�E+1�-�HǏm���:nB�d����G��hUN�ܔ������Ӧ�)�>kCR�s���J�:���-�QP�H���Լ���w!�]M}�~]�X��+��?�z��i���Y>}Z��AQ����s�Wr%7Ș�H���'�a�u�țY֭��#�I=M�m~@���9�rG����_�nB�rxl{}���@~�x���Ϩ�?�����mk��C�L��~�����6�������v���}����ZU�Q#��:��PS\����齍���cA���o�ڎ��D����Cj
{���?a���I��

montage.sh

#!/bin/bash

# show commands and stop if there is an error
set -ex

# this command makes a single image of whatever was not deleted
montage \
	-tile 20x100 \
	-geometry +0+0 \
	'resized/*.jpg' \
	montage.jpg

preview.sh

#!/bin/bash

# show commands and stop if there is an error
set -ex

# NOTE: uncomment one of the following lines:
# cp colorgrid/grid.jpg montage.jpg
# cp smartgrid/grid.jpg montage.jpg
cp customgrid/grid.jpg montage.jpg

# this is just for the final versino
cp customgrid/*.png .
cp customgrid/left_right.jpg .

# convert montage to preview shaped image
convert montage.jpg \
    -resize "960x500^" \
    -gravity center \
    -crop 960x500+0+0 \
    +repage preview.jpg

# convert preview to thumbnail image
convert preview.jpg \
    -resize 50% \
    -gravity center \
    -crop 230x120+0+0 \
    +repage thumbnail.png

resize.sh

#!/bin/bash

# show commands and stop if there is an error
set -ex

# make the directory if it is not there
mkdir -p resized

# clean the directory if there are old results
rm -f resized/*

# this command resizes to 128x128, chopping what doesn't fit
mogrify \
  -path resized \
  -thumbnail 128x128^ \
  -background black \
  -gravity center \
  -extent 128x128 \
  'downloads/*.jpg'

run_all.sh

#!/bin/bash

# show commands and stop if there is an error
set -ex

# this command makes a single image of whatever was not deleted
bash collect.sh
bash resize.sh
echo "Hit <control>-C now if you want to clean up the images"
sleep 5
bash smartgrid.sh
bash preview.sh

smartgrid.sh

#!/bin/bash

if [ ! -d "/usr/local/anaconda/extras" ]; then
  # Control will enter here if DIRECTORY doesn't exist.
  echo "smartgrid program not found"
  echo "please first install using directions on blackboard"
  exit 1
fi

# show commands and stop if there is an error
set -ex

HOME="/usr/local/anaconda/extras/home"
export PATH="/usr/local/anaconda/bin:$PATH"

python /usr/local/anaconda/extras/smartgrid.py \
  --do-colors \
  --input-glob 'resized/*' \
  --output-path colorgrid

# this command makes a single image of whatever was not deleted
python /usr/local/anaconda/extras/smartgrid.py \
  --input-glob 'resized/*' \
  --output-path smartgrid

zoom_image.js

// update these image dimensions to match montage.jpg
var w = 4600;
var h = 2600;
var maxZoom = 4.4;

url = 'grid.jpg';

// Using leaflet.js to pan and zoom a big image.
// See also: http://kempe.net/blog/2014/06/14/leaflet-pan-zoom-image.html

// create the slippy map
var map = L.map('image-map', {
  minZoom: 1,
  maxZoom: maxZoom,
  center: [0, 0],
  zoom: 1,
  crs: L.CRS.Simple
});

// calculate the edges of the image, in coordinate space
var southWest = map.unproject([0, h], map.getMaxZoom()-1);
var northEast = map.unproject([w, 0], map.getMaxZoom()-1);
var bounds = new L.LatLngBounds(southWest, northEast);

// add the image overlay, 
// so that it covers the entire map
L.imageOverlay(url, bounds).addTo(map);

// tell leaflet that the map is exactly as big as the image
map.setMaxBounds(bounds);