The Shield-Maiden: A Foreworld SideQuest
![]() |
Review:One of the better sidequests. |
![]() |
Review:One of the better sidequests. |
This has been in the master branch of Nikola for a while but only now have I tried to fully integrate it, and polish all (most) of the rough edges.
By default, Nikola comes with support for search forms using Google and Duckduckgo. Some people disapprove of them for different reasons [1] so there was a request about supporting a standalone search engine.
The best of breed of those things seems to be Tipue so that's what I supported.
To use this, you need to enable a plugin, and do some configuration changes.
The plugin is called task_localsearch
and you can find it in
the Nikola source tree
Suppose your site is in a folder called mysite
then to enable this plugin you need
to create mysite/plugins
and then copy task_localsearch.plugin
and task_localsearch
in there.
Then, in your site's conf.py
find these options and change them accordingly:
SEARCH_FORM = """ <span class="navbar-form pull-left"> <input type="text" id="tipue_search_input"> </span>""" ANALYTICS = """ <script type="text/javascript" src="/assets/js/tipuesearch_set.js"></script> <script type="text/javascript" src="/assets/js/tipuesearch.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#tipue_search_input').tipuesearch({ 'mode': 'json', 'contentLocation': '/assets/js/tipuesearch_content.json', 'showUrl': false }); }); </script> """ EXTRA_HEAD_DATA = """ <link rel="stylesheet" type="text/css" href="/assets/css/tipuesearch.css"> <div id="tipue_search_content" style="margin-left: auto; margin-right: auto; padding: 20px;"></div> """
How does it work? Here's a demo site for you to try!
I would not recommend doing this for a big site, since it may load a multi-megabyte javascript file when you search, but for small to medium sites, it may be ok.
Como esta:
Cuando la patria está en peligro, todo está permitido, excepto no defenderla.
—José de San Martín
Esa frase es mala, mala, mala, desafortunada y horrible.
Es así de mala porque si bien es un lindo slogan para convencer a granjeros de que se unan al ejército de esa patria que está comenzando a existir, es un consejo horrendo para gente que vive en una nación de verdad, con leyes de verdad, un ejército, y gente que le da pelota a cualquier pavada que San Martín dijo.
Empieza con la premisa débil de "cuando la patria está en peligro" que es demasiado poco o demasiado, depende de cuanta excusa necesites para hacer algo horrible.
Si realmente querés ser mal tipo, seguro que te podés convencer que los gays, inmigrantes, extranjeros, musulmanes, judíos o jóvenes son todos un peligro para tu patria de alguna manera. Capaz que tenés que estirar un poco lo de "peligro" o agrandar un poco el significado de "patria" pero le vas a encontrar la vuelta.
Y una vez que zafaste de eso, cuando estás convencido de que tu "patria" está "en peligro", bueno, podés hacer cualquier cosa. No es sorprendente que esta frase es una vieja favorita de militares en sus discursos.
Me cae bastante bien José de San Martín. Esta frase, sin embargo, es desafortunada.
![]() |
Review:A satisfying conclussion to this trilogy. |
El autor del mail original afirma que no es una tarea escolar. De todas formas no afecta la idea de pensar cómo responder cuando alguien pregunta acerca de una tarea escolar.
Pasa siempre, como en todas las listas de programación, que de vez en cuando alguien postea en la lista de Python Argentina algo que es obviamente su tarea para el hogar. Para manejarlo hay dos escuelas de pensamiento:
Mostrarle como se hace es decirle como hacer trampa.
Mostrarle como se hace es enseñarle.
Yo me inclino más por 1) pero creo haber encontrado un camino intermedio:
1.5) Darle una solución más complicada que el problema.
De esa manera, si entiende la solución, ya hizo el trabajo. Y si no la entiende, va a ser tan obvio que no la entiende, que el profesor nunca le va a aceptar la respuesta.
Como ejemplo, este es el problema que presentaron en PyAr:
La lista viene desordenada y con dos caracteres (uno en minúscula y otro en mayúscula), por ejemplo:
['eD', 'fC', 'hC', 'iC', 'jD', 'bD', 'fH', 'mS', 'aS', 'mD']Para ordenarla debo seguir estas pautas:
Armar subconjuntos de acuerdo a la mayúscula y luego ordenar esos subconjuntos por la cantidad de miembros (en orden ascendente), la lista queda de la siguiente forma:
['fH', 'mS', 'aS', 'fC', 'hC', 'iC', 'jD', 'bD', 'eD', 'mD']Ahora cada subconjunto debe estar ordenado de manera ascendente y de acuerdo a la minúscula, con lo que la lista queda ordenada así:
['fH', 'aS', 'mS', 'fC', 'hC', 'iC', 'bD', 'eD', 'jD', 'mD']
Ignorando que el planteo es ambiguo (hay por lo menos dos maneras de leerlo, capaz que más), yo propuse esta solución, que requiere python 3:
from collections import defaultdict d1 = defaultdict(list) [d1[i[1]].append(i) for i in ['eD', 'fC', 'hC', 'iC', 'jD', 'bD', 'fH', 'mS', 'aS', 'mD']] {i: d1[i].sort() for i in d1} d2 = {len(d1[i]): d1[i] for i in d1} print([item for sublist in [d2[i] for i in sorted(d2.keys())] for item in sublist])
Produce el resultado deseado: ['fH', 'aS', 'mS', 'fC', 'hC', 'iC', 'bD', 'eD', 'jD', 'mD']
pero de una manera que para entenderlo, el alumno necesita saber mas de lo que requiere el
problema original, incluyendo tres o cuatro cosas que no creo que le hayan enseñado.