makeabilitylab / makeabilitylabwebsite

The Makeability Lab website
https://makeabilitylab.cs.washington.edu
MIT License
9 stars 65 forks source link

Tried to Upload a New PDF, Received Server Error (500) #347

Closed jonfroehlich closed 6 years ago

jonfroehlich commented 6 years ago

In trying to diagnose https://github.com/jonfroehlich/makeabilitylabwebsite/issues/344 on the test server, I attempted to upload a new TouchCam PDF in https://makeabilitylab-test.cs.washington.edu/admin/website/publication/ but received the following error:

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

image

@mechanicjay did you ever try uploading or creating a dummy publication... i.e., do you know that the website as currently configured supports uploads?

mechanicjay commented 6 years ago

It looks like this may be a permissions issue on the mapped share for the /media directory.

I'm opening up the permissions waaay up for right now to be sure there isn't a deeper issue.

The next thing to do is getting the process in the docker container to run under UID/GID 48 -- this will UID will map out of the container as a system account that I can give permissions to on the share.

Currently it seems the process running in the container is running as root, which has some bad security implications on the local system.

jonfroehlich commented 6 years ago

Hmm, just tried again and got the same thing. Can we turn on logging again so we can get some insight into what's going on? Thanks @mechanicjay.

mechanicjay commented 6 years ago

Looks like logging never actually got turned off, so the django debug log is still getting dumped to: /cse/web/research/makelab/www/debug.log

jonfroehlich commented 6 years ago

I just checked the log. The error is related to automatic thumbnail generation from the PDF and the wand package(full error below). Do we have imagemagick 6 installed?-- that's a preq for wand to work. Note cannot be imagemagick 7 as that's incompatible with wand for now. On a mac with homebrew, you could install this by typing the following in the terminal. Not sure how to do it on *nix.

> brew install imagemagick@6

Perhaps this should be added to our docker, no?

Finally, if, after installing imagemagick, this still doesn't work, we may want to consult this Stackoverflow thread: https://stackoverflow.com/a/38260320

Full error:

Internal Server Error: /admin/website/publication/add/
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 541, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 244, in inner
    return view(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1435, in add_view
    return self.changeform_view(request, None, form_url, extra_context)
  File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 67, in _wrapper
    return bound_func(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 63, in bound_func
    return func.__get__(self, type(self))(*args2, **kwargs2)
  File "/usr/local/lib/python3.6/contextlib.py", line 52, in inner
    return func(*args, **kwds)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1378, in changeform_view
    self.save_model(request, new_object, form, not add)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 991, in save_model
    obj.save()
  File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 700, in save
    force_update=force_update, update_fields=update_fields)
  File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 737, in save_base
    update_fields=update_fields, raw=raw, using=using)
  File "/usr/local/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 192, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/code/website/signals.py", line 35, in publication_post_save
    generate_and_save_thumbnail_from_pdf(pub, thumbnail_res)
  File "/code/website/signals.py", line 72, in generate_and_save_thumbnail_from_pdf
    img.format = 'jpeg'
  File "/usr/local/lib/python3.6/site-packages/wand/image.py", line 2711, in format
    raise ValueError(repr(fmt) + ' is unsupported format')
ValueError: 'jpeg' is unsupported format
mechanicjay commented 6 years ago

The right packages need to be added to the docker image. I'm not exactly certain which ones those are at this moment...there are specific wand packages, and image magic packages etc...

I've just installed the python3-wand and imagemagick packages (and all their automatically included prerequisites) in the container running on test. If that works, I'll drop a merge request with an updated dockerfile to get these packages installed as part of the image.

jonfroehlich commented 6 years ago

Appears to still not work. Getting same error as before (but there appears to be more than one exception going on--not sure if all related--needs more investigation). We need to add timestamps to log file to add debugging. See https://github.com/jonfroehlich/makeabilitylabwebsite/issues/348. I can do this...

jonfroehlich commented 6 years ago

OK, just investigated this a bit more. Getting same error as before despite @mechanicjay installing python3-wand and imagemagick packages.

  File "/usr/local/lib/python3.6/site-packages/wand/image.py", line 2711, in format
    raise ValueError(repr(fmt) + ' is unsupported format')
ValueError: 'jpeg' is unsupported format

This StackOverflow post suggests installing 'jpeg' and 'ghostscript' to potentially remedy this problem. @mechanicjay can you try that?

brew install jpeg
brew install ghostscript
mechanicjay commented 6 years ago

Okay, the issue is that when you pushed the change for logging, it wiped out the temporary change I made in the container. I just submitted a merge request which will add imagemagick to the base image.

Running on that base image I'm getting a different error when attempting to upload a pdf -- the capture of which I cant seem to attach.....

mechanicjay commented 6 years ago
 File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 894, in _resolve_lookup
    current = current[int(bit)]
ValueError: invalid literal for int() with base 10: 'can_delete_related'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 901, in _resolve_lookup
    (bit, current))  # missing attribute
django.template.base.VariableDoesNotExist: Failed lookup for key [can_delete_related] in '[{\'True\': True, \'False\': False, \'None\': None}, {\'widget\': \'\\n\\n<div class="sortedm2m-container">\\n\\n    <p class="selector-filter">\\n        <img src="/static/sortedm2m/selector-search.gif" alt="" title="Type into this box to filter down the list." />\\n        <input type="text" placeholder="Filter" />\\n    </p>\\n    <ul class="sortedm2m-items">\\n    \\n\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_0"><input class="sortedm2m" id="id_keywords_0" name="keywords" type="checkbox" value="326" /> sharedphys</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_1"><input class="sortedm2m" id="id_keywords_1" name="keywords" type="checkbox" value="327" /> bodyvis</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_2"><input class="sortedm2m" id="id_keywords_2" name="keywords" type="checkbox" value="328" /> physiological sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_3"><input class="sortedm2m" id="id_keywords_3" name="keywords" type="checkbox" value="329" /> large-screen displays</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_4"><input class="sortedm2m" id="id_keywords_4" name="keywords" type="checkbox" value="330" /> mixed-reality</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_5"><input class="sortedm2m" id="id_keywords_5" name="keywords" type="checkbox" value="331" /> scientific inquiry</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_6"><input class="sortedm2m" id="id_keywords_6" name="keywords" type="checkbox" value="332" /> collaborative learning</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_7"><input class="sortedm2m" id="id_keywords_7" name="keywords" type="checkbox" value="333" /> stem</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_8"><input class="sortedm2m" id="id_keywords_8" name="keywords" type="checkbox" value="334" /> wearables</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_9"><input class="sortedm2m" id="id_keywords_9" name="keywords" type="checkbox" value="335" /> haptics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_10"><input class="sortedm2m" id="id_keywords_10" name="keywords" type="checkbox" value="336" /> non-visual directional guidance</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_11"><input class="sortedm2m" id="id_keywords_11" name="keywords" type="checkbox" value="337" /> handsight</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_12"><input class="sortedm2m" id="id_keywords_12" name="keywords" type="checkbox" value="338" /> accessibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_13"><input class="sortedm2m" id="id_keywords_13" name="keywords" type="checkbox" value="339" /> mobility impairments</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_14"><input class="sortedm2m" id="id_keywords_14" name="keywords" type="checkbox" value="340" /> formative study</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_15"><input class="sortedm2m" id="id_keywords_15" name="keywords" type="checkbox" value="341" /> gis</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_16"><input class="sortedm2m" id="id_keywords_16" name="keywords" type="checkbox" value="342" /> navigation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_17"><input class="sortedm2m" id="id_keywords_17" name="keywords" type="checkbox" value="343" /> trip planning</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_18"><input class="sortedm2m" id="id_keywords_18" name="keywords" type="checkbox" value="344" /> interactive body learning</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_19"><input class="sortedm2m" id="id_keywords_19" name="keywords" type="checkbox" value="345" /> tangible interactive computing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_20"><input class="sortedm2m" id="id_keywords_20" name="keywords" type="checkbox" value="346" /> deaf</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_21"><input class="sortedm2m" id="id_keywords_21" name="keywords" type="checkbox" value="347" /> hard of hearing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_22"><input class="sortedm2m" id="id_keywords_22" name="keywords" type="checkbox" value="348" /> head-mounted display</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_23"><input class="sortedm2m" id="id_keywords_23" name="keywords" type="checkbox" value="349" /> wearable</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_24"><input class="sortedm2m" id="id_keywords_24" name="keywords" type="checkbox" value="350" /> sound visualization</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_25"><input class="sortedm2m" id="id_keywords_25" name="keywords" type="checkbox" value="351" /> conversation support</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_26"><input class="sortedm2m" id="id_keywords_26" name="keywords" type="checkbox" value="352" /> energy audits</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_27"><input class="sortedm2m" id="id_keywords_27" name="keywords" type="checkbox" value="353" /> thermography</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_28"><input class="sortedm2m" id="id_keywords_28" name="keywords" type="checkbox" value="354" /> robotics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_29"><input class="sortedm2m" id="id_keywords_29" name="keywords" type="checkbox" value="355" /> formative inquiry</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_30"><input class="sortedm2m" id="id_keywords_30" name="keywords" type="checkbox" value="356" /> design probes</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_31"><input class="sortedm2m" id="id_keywords_31" name="keywords" type="checkbox" value="357" /> sustainable hci</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_32"><input class="sortedm2m" id="id_keywords_32" name="keywords" type="checkbox" value="358" /> human-robotic interaction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_33"><input class="sortedm2m" id="id_keywords_33" name="keywords" type="checkbox" value="359" /> crowdsourcing accessibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_34"><input class="sortedm2m" id="id_keywords_34" name="keywords" type="checkbox" value="360" /> computer vision</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_35"><input class="sortedm2m" id="id_keywords_35" name="keywords" type="checkbox" value="361" /> google street view</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_36"><input class="sortedm2m" id="id_keywords_36" name="keywords" type="checkbox" value="362" /> amazon mechanical turk</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_37"><input class="sortedm2m" id="id_keywords_37" name="keywords" type="checkbox" value="363" /> wearable displays</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_38"><input class="sortedm2m" id="id_keywords_38" name="keywords" type="checkbox" value="364" /> e-textiles</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_39"><input class="sortedm2m" id="id_keywords_39" name="keywords" type="checkbox" value="365" /> personal informatics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_40"><input class="sortedm2m" id="id_keywords_40" name="keywords" type="checkbox" value="366" /> running</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_41"><input class="sortedm2m" id="id_keywords_41" name="keywords" type="checkbox" value="367" /> sports</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_42"><input class="sortedm2m" id="id_keywords_42" name="keywords" type="checkbox" value="368" /> health</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_43"><input class="sortedm2m" id="id_keywords_43" name="keywords" type="checkbox" value="369" /> fitness</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_44"><input class="sortedm2m" id="id_keywords_44" name="keywords" type="checkbox" value="370" /> accessible public transit</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_45"><input class="sortedm2m" id="id_keywords_45" name="keywords" type="checkbox" value="371" /> blind</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_46"><input class="sortedm2m" id="id_keywords_46" name="keywords" type="checkbox" value="372" /> low-vision</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_47"><input class="sortedm2m" id="id_keywords_47" name="keywords" type="checkbox" value="373" /> accessible urban navigation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_48"><input class="sortedm2m" id="id_keywords_48" name="keywords" type="checkbox" value="374" /> mechanical turk</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_49"><input class="sortedm2m" id="id_keywords_49" name="keywords" type="checkbox" value="375" /> data collection</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_50"><input class="sortedm2m" id="id_keywords_50" name="keywords" type="checkbox" value="376" /> accessible cities</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_51"><input class="sortedm2m" id="id_keywords_51" name="keywords" type="checkbox" value="377" /> physical accessibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_52"><input class="sortedm2m" id="id_keywords_52" name="keywords" type="checkbox" value="378" /> wheelchair</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_53"><input class="sortedm2m" id="id_keywords_53" name="keywords" type="checkbox" value="379" /> urban informatics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_54"><input class="sortedm2m" id="id_keywords_54" name="keywords" type="checkbox" value="380" /> behavioral science</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_55"><input class="sortedm2m" id="id_keywords_55" name="keywords" type="checkbox" value="381" /> behavioral theory</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_56"><input class="sortedm2m" id="id_keywords_56" name="keywords" type="checkbox" value="382" /> persuasive technology</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_57"><input class="sortedm2m" id="id_keywords_57" name="keywords" type="checkbox" value="383" /> persuasive design</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_58"><input class="sortedm2m" id="id_keywords_58" name="keywords" type="checkbox" value="384" /> behavior change</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_59"><input class="sortedm2m" id="id_keywords_59" name="keywords" type="checkbox" value="385" /> environmental sustainability</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_60"><input class="sortedm2m" id="id_keywords_60" name="keywords" type="checkbox" value="386" /> eco-feedback</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_61"><input class="sortedm2m" id="id_keywords_61" name="keywords" type="checkbox" value="387" /> touchscreen accessibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_62"><input class="sortedm2m" id="id_keywords_62" name="keywords" type="checkbox" value="388" /> older adults</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_63"><input class="sortedm2m" id="id_keywords_63" name="keywords" type="checkbox" value="389" /> motor impaired users</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_64"><input class="sortedm2m" id="id_keywords_64" name="keywords" type="checkbox" value="390" /> controlled lab study</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_65"><input class="sortedm2m" id="id_keywords_65" name="keywords" type="checkbox" value="391" /> water</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_66"><input class="sortedm2m" id="id_keywords_66" name="keywords" type="checkbox" value="392" /> environmental hci</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_67"><input class="sortedm2m" id="id_keywords_67" name="keywords" type="checkbox" value="393" /> water conservation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_68"><input class="sortedm2m" id="id_keywords_68" name="keywords" type="checkbox" value="394" /> iterative design</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_69"><input class="sortedm2m" id="id_keywords_69" name="keywords" type="checkbox" value="395" /> water sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_70"><input class="sortedm2m" id="id_keywords_70" name="keywords" type="checkbox" value="396" /> home resource management</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_71"><input class="sortedm2m" id="id_keywords_71" name="keywords" type="checkbox" value="397" /> deployment</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_72"><input class="sortedm2m" id="id_keywords_72" name="keywords" type="checkbox" value="398" /> longitudinal study</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_73"><input class="sortedm2m" id="id_keywords_73" name="keywords" type="checkbox" value="399" /> machine learning</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_74"><input class="sortedm2m" id="id_keywords_74" name="keywords" type="checkbox" value="400" /> hydrosense</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_75"><input class="sortedm2m" id="id_keywords_75" name="keywords" type="checkbox" value="401" /> smart cities</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_76"><input class="sortedm2m" id="id_keywords_76" name="keywords" type="checkbox" value="402" /> intelligent transport systems</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_77"><input class="sortedm2m" id="id_keywords_77" name="keywords" type="checkbox" value="403" /> personalization</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_78"><input class="sortedm2m" id="id_keywords_78" name="keywords" type="checkbox" value="404" /> data mining</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_79"><input class="sortedm2m" id="id_keywords_79" name="keywords" type="checkbox" value="405" /> automated fare collection</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_80"><input class="sortedm2m" id="id_keywords_80" name="keywords" type="checkbox" value="406" /> power harvesting</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_81"><input class="sortedm2m" id="id_keywords_81" name="keywords" type="checkbox" value="407" /> sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_82"><input class="sortedm2m" id="id_keywords_82" name="keywords" type="checkbox" value="408" /> home resource consumption</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_83"><input class="sortedm2m" id="id_keywords_83" name="keywords" type="checkbox" value="409" /> natural gas</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_84"><input class="sortedm2m" id="id_keywords_84" name="keywords" type="checkbox" value="410" /> disaggregation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_85"><input class="sortedm2m" id="id_keywords_85" name="keywords" type="checkbox" value="411" /> reflective hci</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_86"><input class="sortedm2m" id="id_keywords_86" name="keywords" type="checkbox" value="412" /> survey</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_87"><input class="sortedm2m" id="id_keywords_87" name="keywords" type="checkbox" value="413" /> sustainability</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_88"><input class="sortedm2m" id="id_keywords_88" name="keywords" type="checkbox" value="414" /> activity sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_89"><input class="sortedm2m" id="id_keywords_89" name="keywords" type="checkbox" value="415" /> infrastructure-mediated sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_90"><input class="sortedm2m" id="id_keywords_90" name="keywords" type="checkbox" value="416" /> shared bicycling</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_91"><input class="sortedm2m" id="id_keywords_91" name="keywords" type="checkbox" value="417" /> bicing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_92"><input class="sortedm2m" id="id_keywords_92" name="keywords" type="checkbox" value="418" /> sustainable transport</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_93"><input class="sortedm2m" id="id_keywords_93" name="keywords" type="checkbox" value="419" /> system modeling</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_94"><input class="sortedm2m" id="id_keywords_94" name="keywords" type="checkbox" value="420" /> ambient displays</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_95"><input class="sortedm2m" id="id_keywords_95" name="keywords" type="checkbox" value="421" /> mobile phones</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_96"><input class="sortedm2m" id="id_keywords_96" name="keywords" type="checkbox" value="422" /> transportation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_97"><input class="sortedm2m" id="id_keywords_97" name="keywords" type="checkbox" value="423" /> ambient display</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_98"><input class="sortedm2m" id="id_keywords_98" name="keywords" type="checkbox" value="424" /> calm technology</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_99"><input class="sortedm2m" id="id_keywords_99" name="keywords" type="checkbox" value="425" /> field experiment</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_100"><input class="sortedm2m" id="id_keywords_100" name="keywords" type="checkbox" value="426" /> mobile phone</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_101"><input class="sortedm2m" id="id_keywords_101" name="keywords" type="checkbox" value="427" /> physical activity</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_102"><input class="sortedm2m" id="id_keywords_102" name="keywords" type="checkbox" value="428" /> esm</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_103"><input class="sortedm2m" id="id_keywords_103" name="keywords" type="checkbox" value="429" /> empirical evaluation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_104"><input class="sortedm2m" id="id_keywords_104" name="keywords" type="checkbox" value="430" /> experience sampling method</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_105"><input class="sortedm2m" id="id_keywords_105" name="keywords" type="checkbox" value="431" /> recall accuracy</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_106"><input class="sortedm2m" id="id_keywords_106" name="keywords" type="checkbox" value="432" /> self-reports</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_107"><input class="sortedm2m" id="id_keywords_107" name="keywords" type="checkbox" value="433" /> survey frequency</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_108"><input class="sortedm2m" id="id_keywords_108" name="keywords" type="checkbox" value="434" /> user study</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_109"><input class="sortedm2m" id="id_keywords_109" name="keywords" type="checkbox" value="435" /> gps</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_110"><input class="sortedm2m" id="id_keywords_110" name="keywords" type="checkbox" value="436" /> global positioning system</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_111"><input class="sortedm2m" id="id_keywords_111" name="keywords" type="checkbox" value="437" /> trip prediction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_112"><input class="sortedm2m" id="id_keywords_112" name="keywords" type="checkbox" value="438" /> driving behavior analysis</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_113"><input class="sortedm2m" id="id_keywords_113" name="keywords" type="checkbox" value="439" /> repeat trips</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_114"><input class="sortedm2m" id="id_keywords_114" name="keywords" type="checkbox" value="440" /> automatically detecting routes</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_115"><input class="sortedm2m" id="id_keywords_115" name="keywords" type="checkbox" value="441" /> activity inference</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_116"><input class="sortedm2m" id="id_keywords_116" name="keywords" type="checkbox" value="442" /> activity-based applications</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_117"><input class="sortedm2m" id="id_keywords_117" name="keywords" type="checkbox" value="443" /> pdas</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_118"><input class="sortedm2m" id="id_keywords_118" name="keywords" type="checkbox" value="444" /> accessible interfaces</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_119"><input class="sortedm2m" id="id_keywords_119" name="keywords" type="checkbox" value="445" /> corners</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_120"><input class="sortedm2m" id="id_keywords_120" name="keywords" type="checkbox" value="446" /> edges</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_121"><input class="sortedm2m" id="id_keywords_121" name="keywords" type="checkbox" value="447" /> motor impairments</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_122"><input class="sortedm2m" id="id_keywords_122" name="keywords" type="checkbox" value="448" /> target acquisition</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_123"><input class="sortedm2m" id="id_keywords_123" name="keywords" type="checkbox" value="449" /> touch screens</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_124"><input class="sortedm2m" id="id_keywords_124" name="keywords" type="checkbox" value="450" /> smartphones</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_125"><input class="sortedm2m" id="id_keywords_125" name="keywords" type="checkbox" value="451" /> context-aware systems</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_126"><input class="sortedm2m" id="id_keywords_126" name="keywords" type="checkbox" value="452" /> experience sampling method (esm)</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_127"><input class="sortedm2m" id="id_keywords_127" name="keywords" type="checkbox" value="453" /> field studies</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_128"><input class="sortedm2m" id="id_keywords_128" name="keywords" type="checkbox" value="454" /> in situ evaluation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_129"><input class="sortedm2m" id="id_keywords_129" name="keywords" type="checkbox" value="455" /> mobile computing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_130"><input class="sortedm2m" id="id_keywords_130" name="keywords" type="checkbox" value="456" /> toolkit</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_131"><input class="sortedm2m" id="id_keywords_131" name="keywords" type="checkbox" value="457" /> usage logging</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_132"><input class="sortedm2m" id="id_keywords_132" name="keywords" type="checkbox" value="458" /> user surveys</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_133"><input class="sortedm2m" id="id_keywords_133" name="keywords" type="checkbox" value="459" /> user-centered design</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_134"><input class="sortedm2m" id="id_keywords_134" name="keywords" type="checkbox" value="460" /> location-aware computing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_135"><input class="sortedm2m" id="id_keywords_135" name="keywords" type="checkbox" value="461" /> social networks</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_136"><input class="sortedm2m" id="id_keywords_136" name="keywords" type="checkbox" value="462" /> socio-technical systems</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_137"><input class="sortedm2m" id="id_keywords_137" name="keywords" type="checkbox" value="463" /> mining software repositories</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_138"><input class="sortedm2m" id="id_keywords_138" name="keywords" type="checkbox" value="464" /> visualizing activity</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_139"><input class="sortedm2m" id="id_keywords_139" name="keywords" type="checkbox" value="465" /> information visualization</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_140"><input class="sortedm2m" id="id_keywords_140" name="keywords" type="checkbox" value="466" /> visual impairments</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_141"><input class="sortedm2m" id="id_keywords_141" name="keywords" type="checkbox" value="467" /> real-time ocr</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_142"><input class="sortedm2m" id="id_keywords_142" name="keywords" type="checkbox" value="468" /> blind reading</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_143"><input class="sortedm2m" id="id_keywords_143" name="keywords" type="checkbox" value="469" /> public transport</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_144"><input class="sortedm2m" id="id_keywords_144" name="keywords" type="checkbox" value="470" /> bus stop auditing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_145"><input class="sortedm2m" id="id_keywords_145" name="keywords" type="checkbox" value="471" /> crowdsourcing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_146"><input class="sortedm2m" id="id_keywords_146" name="keywords" type="checkbox" value="472" /> blind users</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_147"><input class="sortedm2m" id="id_keywords_147" name="keywords" type="checkbox" value="473" /> accessible bus stops</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_148"><input class="sortedm2m" id="id_keywords_148" name="keywords" type="checkbox" value="474" /> remote data collection</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_149"><input class="sortedm2m" id="id_keywords_149" name="keywords" type="checkbox" value="475" /> urban data mining</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_150"><input class="sortedm2m" id="id_keywords_150" name="keywords" type="checkbox" value="476" /> water usage</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_151"><input class="sortedm2m" id="id_keywords_151" name="keywords" type="checkbox" value="477" /> ability-based design</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_152"><input class="sortedm2m" id="id_keywords_152" name="keywords" type="checkbox" value="478" /> adaptive user interfaces</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_153"><input class="sortedm2m" id="id_keywords_153" name="keywords" type="checkbox" value="479" /> assistive technology</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_154"><input class="sortedm2m" id="id_keywords_154" name="keywords" type="checkbox" value="480" /> computer access</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_155"><input class="sortedm2m" id="id_keywords_155" name="keywords" type="checkbox" value="481" /> design for all</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_156"><input class="sortedm2m" id="id_keywords_156" name="keywords" type="checkbox" value="482" /> inclusive design</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_157"><input class="sortedm2m" id="id_keywords_157" name="keywords" type="checkbox" value="483" /> universal design</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_158"><input class="sortedm2m" id="id_keywords_158" name="keywords" type="checkbox" value="484" /> universal usability</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_159"><input class="sortedm2m" id="id_keywords_159" name="keywords" type="checkbox" value="485" /> user interfaces for all</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_160"><input class="sortedm2m" id="id_keywords_160" name="keywords" type="checkbox" value="486" /> electricity</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_161"><input class="sortedm2m" id="id_keywords_161" name="keywords" type="checkbox" value="487" /> gas</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_162"><input class="sortedm2m" id="id_keywords_162" name="keywords" type="checkbox" value="488" /> smart grid</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_163"><input class="sortedm2m" id="id_keywords_163" name="keywords" type="checkbox" value="489" /> evaluation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_164"><input class="sortedm2m" id="id_keywords_164" name="keywords" type="checkbox" value="490" /> methods</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_165"><input class="sortedm2m" id="id_keywords_165" name="keywords" type="checkbox" value="491" /> ubicomp</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_166"><input class="sortedm2m" id="id_keywords_166" name="keywords" type="checkbox" value="492" /> gamification</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_167"><input class="sortedm2m" id="id_keywords_167" name="keywords" type="checkbox" value="493" /> ubigreen</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_168"><input class="sortedm2m" id="id_keywords_168" name="keywords" type="checkbox" value="494" /> nest</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_169"><input class="sortedm2m" id="id_keywords_169" name="keywords" type="checkbox" value="495" /> opower</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_170"><input class="sortedm2m" id="id_keywords_170" name="keywords" type="checkbox" value="496" /> bikeshare</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_171"><input class="sortedm2m" id="id_keywords_171" name="keywords" type="checkbox" value="497" /> eco-driving</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_172"><input class="sortedm2m" id="id_keywords_172" name="keywords" type="checkbox" value="498" /> toyota prius</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_173"><input class="sortedm2m" id="id_keywords_173" name="keywords" type="checkbox" value="499" /> nissan leaf</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_174"><input class="sortedm2m" id="id_keywords_174" name="keywords" type="checkbox" value="500" /> recyclebank</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_175"><input class="sortedm2m" id="id_keywords_175" name="keywords" type="checkbox" value="501" /> ethics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_176"><input class="sortedm2m" id="id_keywords_176" name="keywords" type="checkbox" value="502" /> gamifying green</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_177"><input class="sortedm2m" id="id_keywords_177" name="keywords" type="checkbox" value="503" /> motivation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_178"><input class="sortedm2m" id="id_keywords_178" name="keywords" type="checkbox" value="504" /> credibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_179"><input class="sortedm2m" id="id_keywords_179" name="keywords" type="checkbox" value="505" /> doctoral colloquia</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_180"><input class="sortedm2m" id="id_keywords_180" name="keywords" type="checkbox" value="506" /> bicycling</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_181"><input class="sortedm2m" id="id_keywords_181" name="keywords" type="checkbox" value="507" /> thesis</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_182"><input class="sortedm2m" id="id_keywords_182" name="keywords" type="checkbox" value="508" /> sensing and feedback</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_183"><input class="sortedm2m" id="id_keywords_183" name="keywords" type="checkbox" value="509" /> visualization</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_184"><input class="sortedm2m" id="id_keywords_184" name="keywords" type="checkbox" value="510" /> awareness</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_185"><input class="sortedm2m" id="id_keywords_185" name="keywords" type="checkbox" value="511" /> open source</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_186"><input class="sortedm2m" id="id_keywords_186" name="keywords" type="checkbox" value="512" /> human-building interaction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_187"><input class="sortedm2m" id="id_keywords_187" name="keywords" type="checkbox" value="513" /> thermal cameras</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_188"><input class="sortedm2m" id="id_keywords_188" name="keywords" type="checkbox" value="514" /> text reading for blind</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_189"><input class="sortedm2m" id="id_keywords_189" name="keywords" type="checkbox" value="515" /> quantified self</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_190"><input class="sortedm2m" id="id_keywords_190" name="keywords" type="checkbox" value="516" /> failures</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_191"><input class="sortedm2m" id="id_keywords_191" name="keywords" type="checkbox" value="517" /> physical world accessibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_192"><input class="sortedm2m" id="id_keywords_192" name="keywords" type="checkbox" value="518" /> street-level accessibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_193"><input class="sortedm2m" id="id_keywords_193" name="keywords" type="checkbox" value="519" /> reflective interfaces</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_194"><input class="sortedm2m" id="id_keywords_194" name="keywords" type="checkbox" value="520" /> wellbeing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_195"><input class="sortedm2m" id="id_keywords_195" name="keywords" type="checkbox" value="521" /> culture</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_196"><input class="sortedm2m" id="id_keywords_196" name="keywords" type="checkbox" value="522" /> home sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_197"><input class="sortedm2m" id="id_keywords_197" name="keywords" type="checkbox" value="523" /> resource consumption</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_198"><input class="sortedm2m" id="id_keywords_198" name="keywords" type="checkbox" value="524" /> field study</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_199"><input class="sortedm2m" id="id_keywords_199" name="keywords" type="checkbox" value="525" /> in-situ evaluation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_200"><input class="sortedm2m" id="id_keywords_200" name="keywords" type="checkbox" value="526" /> living labs</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_201"><input class="sortedm2m" id="id_keywords_201" name="keywords" type="checkbox" value="527" /> mobile</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_202"><input class="sortedm2m" id="id_keywords_202" name="keywords" type="checkbox" value="528" /> tools</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_203"><input class="sortedm2m" id="id_keywords_203" name="keywords" type="checkbox" value="529" /> user experience</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_204"><input class="sortedm2m" id="id_keywords_204" name="keywords" type="checkbox" value="530" /> environmental sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_205"><input class="sortedm2m" id="id_keywords_205" name="keywords" type="checkbox" value="531" /> localization</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_206"><input class="sortedm2m" id="id_keywords_206" name="keywords" type="checkbox" value="532" /> inference</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_207"><input class="sortedm2m" id="id_keywords_207" name="keywords" type="checkbox" value="533" /> gsm</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_208"><input class="sortedm2m" id="id_keywords_208" name="keywords" type="checkbox" value="534" /> 3d thermography</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_209"><input class="sortedm2m" id="id_keywords_209" name="keywords" type="checkbox" value="535" /> aerial robotics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_210"><input class="sortedm2m" id="id_keywords_210" name="keywords" type="checkbox" value="536" /> automated energy auditing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_211"><input class="sortedm2m" id="id_keywords_211" name="keywords" type="checkbox" value="537" /> building assessment</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_212"><input class="sortedm2m" id="id_keywords_212" name="keywords" type="checkbox" value="538" /> google streetview</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_213"><input class="sortedm2m" id="id_keywords_213" name="keywords" type="checkbox" value="539" /> crowd verification</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_214"><input class="sortedm2m" id="id_keywords_214" name="keywords" type="checkbox" value="540" /> finger camera</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_215"><input class="sortedm2m" id="id_keywords_215" name="keywords" type="checkbox" value="541" /> touch vision</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_216"><input class="sortedm2m" id="id_keywords_216" name="keywords" type="checkbox" value="542" /> accessible touchscreens</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_217"><input class="sortedm2m" id="id_keywords_217" name="keywords" type="checkbox" value="543" /> tablets</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_218"><input class="sortedm2m" id="id_keywords_218" name="keywords" type="checkbox" value="544" /> construction kits</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_219"><input class="sortedm2m" id="id_keywords_219" name="keywords" type="checkbox" value="545" /> electronic textiles</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_220"><input class="sortedm2m" id="id_keywords_220" name="keywords" type="checkbox" value="546" /> children</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_221"><input class="sortedm2m" id="id_keywords_221" name="keywords" type="checkbox" value="547" /> making</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_222"><input class="sortedm2m" id="id_keywords_222" name="keywords" type="checkbox" value="548" /> tangible social interaction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_223"><input class="sortedm2m" id="id_keywords_223" name="keywords" type="checkbox" value="549" /> social fabric</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_224"><input class="sortedm2m" id="id_keywords_224" name="keywords" type="checkbox" value="550" /> social objects</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_225"><input class="sortedm2m" id="id_keywords_225" name="keywords" type="checkbox" value="551" /> tangible interactive art</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_226"><input class="sortedm2m" id="id_keywords_226" name="keywords" type="checkbox" value="552" /> xy servo table</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_227"><input class="sortedm2m" id="id_keywords_227" name="keywords" type="checkbox" value="553" /> sand drawings</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_228"><input class="sortedm2m" id="id_keywords_228" name="keywords" type="checkbox" value="554" /> zen gardens</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_229"><input class="sortedm2m" id="id_keywords_229" name="keywords" type="checkbox" value="555" /> physical computing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_230"><input class="sortedm2m" id="id_keywords_230" name="keywords" type="checkbox" value="556" /> tangible user interfaces</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_231"><input class="sortedm2m" id="id_keywords_231" name="keywords" type="checkbox" value="557" /> makers</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_232"><input class="sortedm2m" id="id_keywords_232" name="keywords" type="checkbox" value="558" /> pixel</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_233"><input class="sortedm2m" id="id_keywords_233" name="keywords" type="checkbox" value="559" /> sensors</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_234"><input class="sortedm2m" id="id_keywords_234" name="keywords" type="checkbox" value="560" /> actuators</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_235"><input class="sortedm2m" id="id_keywords_235" name="keywords" type="checkbox" value="561" /> programming</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_236"><input class="sortedm2m" id="id_keywords_236" name="keywords" type="checkbox" value="562" /> materials</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_237"><input class="sortedm2m" id="id_keywords_237" name="keywords" type="checkbox" value="563" /> live physiology</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_238"><input class="sortedm2m" id="id_keywords_238" name="keywords" type="checkbox" value="564" /> educational technology</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_239"><input class="sortedm2m" id="id_keywords_239" name="keywords" type="checkbox" value="565" /> teaching</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_240"><input class="sortedm2m" id="id_keywords_240" name="keywords" type="checkbox" value="566" /> anatomy</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_241"><input class="sortedm2m" id="id_keywords_241" name="keywords" type="checkbox" value="567" /> body learning</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_242"><input class="sortedm2m" id="id_keywords_242" name="keywords" type="checkbox" value="568" /> tangible interaction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_243"><input class="sortedm2m" id="id_keywords_243" name="keywords" type="checkbox" value="569" /> embodied communication</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_244"><input class="sortedm2m" id="id_keywords_244" name="keywords" type="checkbox" value="570" /> intimacy sharing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_245"><input class="sortedm2m" id="id_keywords_245" name="keywords" type="checkbox" value="571" /> emotional language</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_246"><input class="sortedm2m" id="id_keywords_246" name="keywords" type="checkbox" value="572" /> design, environment, sustainability</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_247"><input class="sortedm2m" id="id_keywords_247" name="keywords" type="checkbox" value="573" /> community, user behavior</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_248"><input class="sortedm2m" id="id_keywords_248" name="keywords" type="checkbox" value="574" /> personalized routing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_249"><input class="sortedm2m" id="id_keywords_249" name="keywords" type="checkbox" value="575" /> accessibility map visualizations</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_250"><input class="sortedm2m" id="id_keywords_250" name="keywords" type="checkbox" value="576" /> human activity inference</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_251"><input class="sortedm2m" id="id_keywords_251" name="keywords" type="checkbox" value="577" /> ecological momentary assessment</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_252"><input class="sortedm2m" id="id_keywords_252" name="keywords" type="checkbox" value="578" /> ema</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_253"><input class="sortedm2m" id="id_keywords_253" name="keywords" type="checkbox" value="579" /> myexperience</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_254"><input class="sortedm2m" id="id_keywords_254" name="keywords" type="checkbox" value="580" /> constraint solver</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_255"><input class="sortedm2m" id="id_keywords_255" name="keywords" type="checkbox" value="581" /> sat solver</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_256"><input class="sortedm2m" id="id_keywords_256" name="keywords" type="checkbox" value="582" /> walksat</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_257"><input class="sortedm2m" id="id_keywords_257" name="keywords" type="checkbox" value="583" /> educating makers</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_258"><input class="sortedm2m" id="id_keywords_258" name="keywords" type="checkbox" value="584" /> maker movement</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_259"><input class="sortedm2m" id="id_keywords_259" name="keywords" type="checkbox" value="585" /> makerwear</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_260"><input class="sortedm2m" id="id_keywords_260" name="keywords" type="checkbox" value="586" /> makershoe</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_261"><input class="sortedm2m" id="id_keywords_261" name="keywords" type="checkbox" value="587" /> fabric mousepad</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_262"><input class="sortedm2m" id="id_keywords_262" name="keywords" type="checkbox" value="588" /> ilikethisshirt</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_263"><input class="sortedm2m" id="id_keywords_263" name="keywords" type="checkbox" value="589" /> social fabric fitness</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_264"><input class="sortedm2m" id="id_keywords_264" name="keywords" type="checkbox" value="590" /> water usage sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_265"><input class="sortedm2m" id="id_keywords_265" name="keywords" type="checkbox" value="591" /> disaggregated sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_266"><input class="sortedm2m" id="id_keywords_266" name="keywords" type="checkbox" value="592" /> water usage visualization</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_267"><input class="sortedm2m" id="id_keywords_267" name="keywords" type="checkbox" value="593" /> hcil hackerspace</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_268"><input class="sortedm2m" id="id_keywords_268" name="keywords" type="checkbox" value="594" /> smart task allocation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_269"><input class="sortedm2m" id="id_keywords_269" name="keywords" type="checkbox" value="595" /> physical world access</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_270"><input class="sortedm2m" id="id_keywords_270" name="keywords" type="checkbox" value="596" /> making with a social purpose</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_271"><input class="sortedm2m" id="id_keywords_271" name="keywords" type="checkbox" value="597" /> creativity</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_272"><input class="sortedm2m" id="id_keywords_272" name="keywords" type="checkbox" value="598" /> health and wellness</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_273"><input class="sortedm2m" id="id_keywords_273" name="keywords" type="checkbox" value="599" /> makerspaces</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_274"><input class="sortedm2m" id="id_keywords_274" name="keywords" type="checkbox" value="600" /> hackerspaces</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_275"><input class="sortedm2m" id="id_keywords_275" name="keywords" type="checkbox" value="601" /> cmsc838f</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_276"><input class="sortedm2m" id="id_keywords_276" name="keywords" type="checkbox" value="602" /> instructables</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_277"><input class="sortedm2m" id="id_keywords_277" name="keywords" type="checkbox" value="603" /> crowd-powered streetview accessibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_278"><input class="sortedm2m" id="id_keywords_278" name="keywords" type="checkbox" value="604" /> acessibility</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_279"><input class="sortedm2m" id="id_keywords_279" name="keywords" type="checkbox" value="605" /> community building</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_280"><input class="sortedm2m" id="id_keywords_280" name="keywords" type="checkbox" value="606" /> designing spaces</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_281"><input class="sortedm2m" id="id_keywords_281" name="keywords" type="checkbox" value="607" /> collaboration</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_282"><input class="sortedm2m" id="id_keywords_282" name="keywords" type="checkbox" value="608" /> diy</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_283"><input class="sortedm2m" id="id_keywords_283" name="keywords" type="checkbox" value="609" /> lab</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_284"><input class="sortedm2m" id="id_keywords_284" name="keywords" type="checkbox" value="610" /> architecture</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_285"><input class="sortedm2m" id="id_keywords_285" name="keywords" type="checkbox" value="611" /> group dynamics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_286"><input class="sortedm2m" id="id_keywords_286" name="keywords" type="checkbox" value="612" /> leadership</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_287"><input class="sortedm2m" id="id_keywords_287" name="keywords" type="checkbox" value="613" /> green gamification</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_288"><input class="sortedm2m" id="id_keywords_288" name="keywords" type="checkbox" value="614" /> technology-mediated behavior change</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_289"><input class="sortedm2m" id="id_keywords_289" name="keywords" type="checkbox" value="615" /> velib</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_290"><input class="sortedm2m" id="id_keywords_290" name="keywords" type="checkbox" value="616" /> human behavior</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_291"><input class="sortedm2m" id="id_keywords_291" name="keywords" type="checkbox" value="617" /> prediction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_292"><input class="sortedm2m" id="id_keywords_292" name="keywords" type="checkbox" value="618" /> health behavior change</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_293"><input class="sortedm2m" id="id_keywords_293" name="keywords" type="checkbox" value="619" /> design processes</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_294"><input class="sortedm2m" id="id_keywords_294" name="keywords" type="checkbox" value="620" /> design knowledge</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_295"><input class="sortedm2m" id="id_keywords_295" name="keywords" type="checkbox" value="621" /> design space</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_296"><input class="sortedm2m" id="id_keywords_296" name="keywords" type="checkbox" value="622" /> water usage feedback</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_297"><input class="sortedm2m" id="id_keywords_297" name="keywords" type="checkbox" value="623" /> disaggregated water sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_298"><input class="sortedm2m" id="id_keywords_298" name="keywords" type="checkbox" value="624" /> field deployments</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_299"><input class="sortedm2m" id="id_keywords_299" name="keywords" type="checkbox" value="625" /> pressure sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_300"><input class="sortedm2m" id="id_keywords_300" name="keywords" type="checkbox" value="626" /> water usage disaggregation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_301"><input class="sortedm2m" id="id_keywords_301" name="keywords" type="checkbox" value="627" /> hackers</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_302"><input class="sortedm2m" id="id_keywords_302" name="keywords" type="checkbox" value="628" /> makers movement</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_303"><input class="sortedm2m" id="id_keywords_303" name="keywords" type="checkbox" value="629" /> arduino</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_304"><input class="sortedm2m" id="id_keywords_304" name="keywords" type="checkbox" value="630" /> squishy circuits</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_305"><input class="sortedm2m" id="id_keywords_305" name="keywords" type="checkbox" value="631" /> lilypad</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_306"><input class="sortedm2m" id="id_keywords_306" name="keywords" type="checkbox" value="632" /> art and design</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_307"><input class="sortedm2m" id="id_keywords_307" name="keywords" type="checkbox" value="633" /> sustainable transportation</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_308"><input class="sortedm2m" id="id_keywords_308" name="keywords" type="checkbox" value="634" /> design</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_309"><input class="sortedm2m" id="id_keywords_309" name="keywords" type="checkbox" value="635" /> norman doors</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_310"><input class="sortedm2m" id="id_keywords_310" name="keywords" type="checkbox" value="636" /> motivational affordances</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_311"><input class="sortedm2m" id="id_keywords_311" name="keywords" type="checkbox" value="637" /> electrisense</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_312"><input class="sortedm2m" id="id_keywords_312" name="keywords" type="checkbox" value="638" /> ubifit</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_313"><input class="sortedm2m" id="id_keywords_313" name="keywords" type="checkbox" value="639" /> mobile health</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_314"><input class="sortedm2m" id="id_keywords_314" name="keywords" type="checkbox" value="640" /> activity recognition</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_315"><input class="sortedm2m" id="id_keywords_315" name="keywords" type="checkbox" value="641" /> assisted living</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_316"><input class="sortedm2m" id="id_keywords_316" name="keywords" type="checkbox" value="642" /> aging in place</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_317"><input class="sortedm2m" id="id_keywords_317" name="keywords" type="checkbox" value="643" /> eldercare</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_318"><input class="sortedm2m" id="id_keywords_318" name="keywords" type="checkbox" value="644" /> experience sampling</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_319"><input class="sortedm2m" id="id_keywords_319" name="keywords" type="checkbox" value="645" /> context-aware experience sampling</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_320"><input class="sortedm2m" id="id_keywords_320" name="keywords" type="checkbox" value="646" /> proposal</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_321"><input class="sortedm2m" id="id_keywords_321" name="keywords" type="checkbox" value="647" /> human behavior routines</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_322"><input class="sortedm2m" id="id_keywords_322" name="keywords" type="checkbox" value="648" /> human prediction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_323"><input class="sortedm2m" id="id_keywords_323" name="keywords" type="checkbox" value="649" /> recommendation systems</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_324"><input class="sortedm2m" id="id_keywords_324" name="keywords" type="checkbox" value="650" /> pyschology</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_325"><input class="sortedm2m" id="id_keywords_325" name="keywords" type="checkbox" value="651" /> context aware computing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_326"><input class="sortedm2m" id="id_keywords_326" name="keywords" type="checkbox" value="652" /> research methods</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_327"><input class="sortedm2m" id="id_keywords_327" name="keywords" type="checkbox" value="653" /> audio</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_328"><input class="sortedm2m" id="id_keywords_328" name="keywords" type="checkbox" value="654" /> fabricated objects</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_329"><input class="sortedm2m" id="id_keywords_329" name="keywords" type="checkbox" value="655" /> acoustic sensing</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_330"><input class="sortedm2m" id="id_keywords_330" name="keywords" type="checkbox" value="656" /> squeeze interactions</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_331"><input class="sortedm2m" id="id_keywords_331" name="keywords" type="checkbox" value="657" /> corrugated acoustics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_332"><input class="sortedm2m" id="id_keywords_332" name="keywords" type="checkbox" value="658" /> on-body interaction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_333"><input class="sortedm2m" id="id_keywords_333" name="keywords" type="checkbox" value="659" /> skin texture classification</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_334"><input class="sortedm2m" id="id_keywords_334" name="keywords" type="checkbox" value="660" /> biometrics</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_335"><input class="sortedm2m" id="id_keywords_335" name="keywords" type="checkbox" value="661" /> skin-based localization</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_336"><input class="sortedm2m" id="id_keywords_336" name="keywords" type="checkbox" value="662" /> gesture recognition</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_337"><input class="sortedm2m" id="id_keywords_337" name="keywords" type="checkbox" value="663" /> microinteraction</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_338"><input class="sortedm2m" id="id_keywords_338" name="keywords" type="checkbox" value="664" /> augmented reality</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_339"><input class="sortedm2m" id="id_keywords_339" name="keywords" type="checkbox" value="665" /> reading printed text</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_340"><input class="sortedm2m" id="id_keywords_340" name="keywords" type="checkbox" value="666" /> magnification</label></li>\\n    \\n        <li class="sortedm2m-item"><label for="id_keywords_341"><input class="sortedm2m" id="id_keywords_341" name="keywords" type="checkbox" value="667" /> texture recognition</label></li>\\n    \\n    </ul>\\n\\n    <p class="help">\\n        Choose items and order by drag & drop.\\n    </p>\\n\\n</div>\\n\', \'name\': \'keywords\', \'url_params\': \'_to_field=id&_popup=1\', \'model\': \'keyword\', \'can_add_related\': True, \'add_related_url\': \'/admin/website/keyword/add/\'}, {\'block\': <Block Node: links. Contents: [<TextNode: \'\\n        \'>, <IfNode>, <TextNode: \'\\n        \'>, <IfNode>, <TextNode: \'\\n        \'>, <IfNode>, <TextNode: \'\\n    \'>]>}]'
jonfroehlich commented 6 years ago

Yah, there are multiple errors going on. :) I'm trying to handle one thing at a time. Unfortunately, I don't have my laptop at work today so I can't see whether these errors are happening on my local dev as well (and, if so, they must be benign because it's not causing any noticeable problems).

Re: new logging stuff. I just checked the log file and, for some reason, it looks like the timestamp stuff is no longer being used. It was working shortly after I checked in the new code.

@mechanicjay: are both makeabilitylab-test and makeabilitylab production logging to /cse/web/research/makelab/www/?

jonfroehlich commented 6 years ago

@mechanicjay: are both makeabilitylab-test and makeabilitylab production logging to /cse/web/research/makelab/www/?

I believe I can answer this based on some minimal tests I just ran: both makeabilitylab-test.cs.washington.edu and makeabilitylab.cs.washington.edu appear to log to debug.log.

Re: new logging stuff. I just checked the log file and, for some reason, it looks like the timestamp stuff is no longer being used. It was working shortly after I checked in the new code.

I just tested this again and timestamps are there and appear to be working

I just tried uploading a PDF via: https://makeabilitylab-test.cs.washington.edu/admin/website/publication/add/ and ran into the same problem as before. The error appears to be related to wand (which is used to auto-generate a PDF thumbnail):

ERROR 2018-05-21 17:01:29,976 base 126 140477029648128 Internal Server Error: /admin/website/publication/add/
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 541, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 244, in inner
    return view(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1435, in add_view
    return self.changeform_view(request, None, form_url, extra_context)
  File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 67, in _wrapper
    return bound_func(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 63, in bound_func
    return func.__get__(self, type(self))(*args2, **kwargs2)
  File "/usr/local/lib/python3.6/contextlib.py", line 52, in inner
    return func(*args, **kwds)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1378, in changeform_view
    self.save_model(request, new_object, form, not add)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 991, in save_model
    obj.save()
  File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 700, in save
    force_update=force_update, update_fields=update_fields)
  File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 737, in save_base
    update_fields=update_fields, raw=raw, using=using)
  File "/usr/local/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 192, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/code/website/signals.py", line 35, in publication_post_save
    generate_and_save_thumbnail_from_pdf(pub, thumbnail_res)
  File "/code/website/signals.py", line 72, in generate_and_save_thumbnail_from_pdf
    img.format = 'jpeg'
  File "/usr/local/lib/python3.6/site-packages/wand/image.py", line 2711, in format
    raise ValueError(repr(fmt) + ' is unsupported format')
ValueError: 'jpeg' is unsupported format

@aileenzeng, can you confirm that you can upload PDFs properly in your local Docker? Last time I tried (Dec 2017), it worked fine for me locally but only failed on production.

aileenzeng commented 6 years ago

@jonfroehlich PDF uploads seem to work fine locally for me

aileenzeng commented 6 years ago

@jonfroehlich This issue seems to be resolved now -- Jason was able to add a new publication earlier today.

jonfroehlich commented 6 years ago

@aileenzeng, great. Do you know what commit fixed this so we can appropriately link to it when we close this issue?

aileenzeng commented 6 years ago

@jonfroehlich f327210895de0142b247663719b1eff6f7271c87 fixed the ValueError mentioned above. I think the other issues that might have contributed to this (tables not updating, mostly from miscommunication between Django/Postgres) don't really have a commit associated with them since we just ended up manipulating the tables manually on UW servers

aileenzeng commented 6 years ago

@jonfroehlich I think we can close this issue now

jonfroehlich commented 6 years ago

Great, do it!