Django Carrots – PyCon Edition is a one-day, intensive, free programming workshop for anyone who wants to learn how to code.
- When: Monday April 13th, during PyCon 2015
- Where: Palais des Congrès in Montreal
- More information: Workshop description
- Cost: Free!
Organized by Geek Girls Carrots (GGC), the Django Carrots curriculum emphasizes individual contact between the student and mentor (before, during and after the workshop), a horizontal structure (students learn from mentors but also from each other), and sharing general knowledge about communities, organization and internet resources to help our participants after the workshop.How can I sign up?
Please fill out this registration form. Registration is open from February 2nd to March 1st. Everyone who registered should get a response before March 5th. You do not need a ticket for PyCon to attend the Django Carrots workshop during PyCon, but we strongly encourage you to attend the conference as well.What do I need during the workshop?
- laptop & charger
Remember: You don’t need to have any additional knowledge about programming to attend (we mean that!). The most important thing is your motivation and readiness to learn!Who are the mentors?
Our mentors are active programmers working in leading tech companies and universities in Europe and North America. In addition to knowledge and job experience, they are skilled educators who care about diversity and cultural changes in the tech industry.We look forward to coding with you in Montreal!
Geek Girls Carrots is a global community and social enterprise focused on connecting, teaching and inspiring women in Tech and IT. We create community by organizing meetings, workshops, hackathons and other events, gathering people to share their knowledge and experience. We gather in 22 cities, including Warsaw, NYC, London, Berlin, Luxembourg and Sydney.
I've always been a fan of putting aftermarket firmware on consumer-grade routers. Whether it's DD-WRT, Tomato, OpenWRT or whatever your favorite flavor of "better than stock" firmware might be, it just makes economic sense. Unfortunately, my routing needs have surpassed my trusty Linksys router. more>>
Tuesday March 3rd, we're inviting Montreal startups to present their startups to a panel of investors and VCs. Presentations will last 5mn, including a demonstration of the product.
There will be various startups at various stages of growth, from new startups looking for traction to growing startups.
This is a paid event to sustain our costs and to provide appetizers and wine for the networking parts.
Please get your discounted early bird 8$ tickets at https://www.eventbrite.ca/e/mtl-newtech-pycon-edition-tickets-15867698714
for more informations about PyCon: https://us.pycon.org/2015/
8 startups to pitch:Agenda:
- 5:45pm Doors open
- 6:15pm Event Presentation. Each startup has 5 minutes to pitch, including a demo. Expect 1 or 2 questions from judges
- 7:30pm End of presentations. Judges deliberate
- 7:45pm Announcement of the Startup selected for Pycon
- 7:45pm Stay for networking!
Is it weird to say that DNS is my favorite protocol? Because DNS is my favorite protocol. There's something about the simplicity of UDP packets combined with the power of a service that the entire Internet relies on that grabs my interest. Through the years, I've been impressed with just how few resources you need to run a modest DNS infrastructure for an internal network. more>>
In my last article, we began an exploration of date math by validating a given date specified by the user, then explored how GNU date offers some slick math capabilities, but has some inherent limitations, the most notable of which is that it isn't on 100% of all Linux and UNIX systems. more>>
PyCon is partening again with MTL NewTech and us this year to bring one lucky Montreal startup to Pycon, to present alongside with Google, Facebook, Stripe, heroku, Microsoft, Mozilla and many other technology companies.
If you are a startup that meets the requirements below, apply now by filling this form:
With the following information: a) size of the team, b) age of the startup c) your use of Python. Deadline for applications: February 26nd 23h59. Announcement of the startups selected: Starting on February 24th. MTL NewTech Demo & announcement of the winner: March 3rd Feel free to invite fellow startups
Tuesday March 3rd, we're inviting Montreal startups to present their startups to a panel of investors and VCs. Presentations will last 5mn, including a demonstration of the product. There will be various startups at various stages of growth, from new startups looking for traction to growing startups. Startups presenting should be less than 2 years old, less than 15 employees, and must use Python in one way or another (front-end, back-end, etc.).
// Agenda: 5:45pm Doors open 6:15pm Event Presentation. Each startup has 5 minutes to pitch, including a demo. Expect 1 or 2 questions from judges 7:30pm End of presentations. Judges deliberate 7:45pm Announcement of the Startup selected for Pycon 7:45pm Stay for networking!
P.S. Eligible companies must meet the following criteria: Fewer than 15 employees, including founders Less than two years old Use Python somewhere in your startup: backend, frontend, testing, wherever If selected, please confirm that you will staff your booth in the Expo Hall on your appointed day. We will try accommodate your preferences: Friday or Saturday * No repeats. If you were on startup row in a previous year, please give another a startup a chance this year.
Join us on march 3rd if you want to assist to the event: http://www.meetup.com/mtlnewtech/events/220568217/
For some time now, there has been tremendous growth in the world of Web applications. It's quite amazing to see what you can do just via a Web browser—not only can you buy just about anything, but also a growing number of sites offer "software as a service", often abbreviated as SaaS. The idea is that in exchange for a monthly service fee, you get access to a service. more>>
I work at a university, and one of our faculty members often repeats to me, "Software needs to be like a rock; it needs to be that easy to use." And, she's right. Because if software is too hard to use, no one will want to use it. more>>
I've looked at specialty distributions that were created for engineers and biologists in previous articles, but these aren't the only scientific disciplines that have their own distributions. So in this article, I introduce a distribution created specifically for astronomers, called Distro Astro. more>>
I suspect there are as many Ubuntu-based Linux distributions as there are all other distributions combined. Many of them are designed with a specific purpose in mind. Whether the desire is for a different looking desktop, custom kernel or just pre-installed packages, there's probably a version of *buntu out there to fit every need. more>>
We're once again excited to offer our free tutorials for kids! Called "The Young Coder: Let's Learn Python", we invite kids 12 and over to join us for a day of learning how to program using Python.
We first offered the Young Coders tutorial at PyCon 2013 in Santa Clara and it was an immediate hit. The followup blog post from that event is the most popular post in our blog's history. Kids came from all over to attend it. One flew from South Africa and helped teach other kids. I gave my laptop to a girl who took the tutorial and wanted to attend Richard Jones' PyGame tutorial the next day. Overall, it was so awesome to see kids so excited about learning, about computers, and about Python.
Last year, our second year offering the tutorial and our first year in Montréal, the tutorial was offered both in French and English. We're going to be offering the same this year: a French version of the tutorial will take place on Saturday April 11, and an English version takes place the next day, on Sunday April 12.
Whether you're bringing your kids along for the trip to Montréal or you're local and want to expose your kids to programming, this is a great way to get them interested. The curriculum has now been taught and refined at several events over the last several years, and the kids love it. After learning the basics of Python, through the basic data types and loops and comparisons, the end result is creating a game using the PyGame library. Having been around the room when the tutorial ends, it's one of the best times of PyCon, to see a room full of bright eyed kids who just learned how to tell a computer what to do.
Would your kids be interested in this? Are you a kid who is interested in this? Sign up today! (If you're actually a kid, have a parent sign you up)
The tutorials start at 9 AM, break for lunch around 1 PM, and wrap up around 4 PM. Registration is limited to please sign up if you're interested.
See the full details of the program at https://us.pycon.org/2015/events/letslearnpython/
Years ago, I worked for an automotive IT provider, and occasionally we went out to the plants to search for rogue Wireless Access Points (WAPs). A rogue WAP is one that the company hasn't approved to be there. So if someone were to go and buy a wireless router, and plug it in to the network, that would be a rogue WAP. more>>
TLPL; j'ai changé de logiciel pour la gestion de mon blog.
TLDR; I have changed my blog from Drupal to Ikiwiki.
Note: since this post uses ikiwiki syntax (i just copied it over here), you may want to read the original version instead of this one.
will continue operating for a while to
give a chance to feed aggregators to catch that article. It will also
give time to the Internet archive to catchup with the static
stylesheets (it turns out it doesn't like Drupal's CSS compression at
all!) An archive will therefore continue being available on the
internet archive for people that miss the old stylesheet.
Eventually, I will simply redirect the anarcat.koumbit.org URL to
the new blog location, . This will likely be my
last blog post written on Drupal, and all new content will be
available on the new URL. RSS feed URLs should not change.
I am migrating away from Drupal because it is basically impossible to
upgrade my blog from Drupal 6 to Drupal 7. Or if it is, I'll have to
redo the whole freaking thing again when Drupal 8 comes along.
And frankly, I don't really need Drupal to run a blog. A blog was
originally a really simple thing: a web blog. A set of articles
written on the corner of a table. Now with Drupal, I can add
ecommerce, a photo gallery and whatnot to my blog, but why would I do
that? and why does it need to be a dynamic CMS at all, if I get so
So I'm switching to ikiwiki, for the following reason:
- no upgrades necessary: well, not exactly true, i still need to
upgrade ikiwiki, but that's covered by the Debian package
maintenance and I only have one patch to it, and there's no data migration! (the last such migration in ikiwiki was in 2009 and was fully supported)
- offline editing: this is a a big thing for me: i can just note
things down and push them when I get back online
- one place for everything: this blog is where I keep my notes, it's
getting annoying to have to keep track of two places for that stuff
- future-proof: extracting content from ikiwiki is amazingly
simple. every page is a single markdown-formatted file. that's it.
Migrating will mean abandoning the
barlow theme, which was
seeing a declining usage anyways.
So what should be exported exactly. There's a bunch of crap in the old
blog that i don't want: users, caches, logs, "modules", and the list
goes on. Maybe it's better to create a list of what I need to extract:
- title ([[ikiwiki/directive/meta]] title and guid tags, guid to avoid flooding aggregators)
- body (need to check for "break comments")
- nid (for future reference?)
- tags (should be added as \[[!tag foo bar baz]] at the bottom)
- URL (to keep old addresses)
- published date ([[ikiwiki/directive/meta]] date directive)
- modification date ([[ikiwiki/directive/meta]] updated directive)
- attached files
- RSS feed
- author name
- attached files
- each tag should have its own RSS feed and latest posts displayed
Some time before summer 2015.Who
Well me, who else. You probably really don't care about that, so let'S
get to the meat of it.
How to perform this migration... There are multiple paths:
- MySQL commandline: extracting data using the commandline mysql tool (drush sqlq ...)
- Views export: extracting "standard format" dumps from Drupal and
parse it (JSON, XML, CSV?)
Both approaches had issues, and I found a third way: talk directly to
mysql and generate the files directly, in a Python script. But first,
here are the two previous approaches I know of.
LeLutin switched using MySQL requests,
although he doesn't specify how content itself was migrated. Comments
importing is done with that script:
Kind of ugly, but beats what i had before (which was "nothing").
I do think it is the good direction to take, to simply talk to the
MySQL database, maybe with a native Python script. I know the Drupal
database schema pretty well (still! this is D6 after all) and it's
simple enough that this should just work.
[[!img 2015-02-03-233846_1440x900_scrot.png class="align-right" size="300x" align="center" alt="screenshot of views 2.x"]]
mvc recommended views data export on Lelutin's
blog. Unfortunately, my experience with the views export interface has
been somewhat mediocre so far. Yet another reason why I don't like
using Drupal anymore is this kind of obtuse dialogs:
I clicked through those for about an hour to get JSON output that
turned out to be provided by views bonus instead of
views_data_export. And confusingly enough, the path and
format_name fields are null in the JSON output
(whyyy!?). views_data_export unfortunately only supports XML,
which seems hardly better than SQL for structured data, especially
considering I am going to write a script for the conversion anyways.
Basically, it doesn't seem like any amount of views mangling will
provide me with what i need.
Nevertheless, here's the [[failed-export-view.txt]] that I was able to
come up with, may it be useful for future freedom fighters.
I ended up making a fairly simple Python script to talk directly to
the MySQL database.
The script exports only nodes and comments, and nothing else. It makes
a bunch of assumptions about the structure of the site, and is
probably only going to work if your site is a simple blog like mine,
but could probably be improved significantly to encompass larger and
more complex datasets. History is not preserved so no interaction is
performed with git.
First, I imported the MySQL dump file on my local mysql server for easier
development. It is 13.9MiO!!
I decided to not import revisions. The majority (70%) of the content has
1 or 2 revisions, and those with two revisions are likely just when
the node was actually published, with minor changes. ~80% have 3
revisions or less, 90% have 5 or less, 95% 8 or less, and 98% 10 or
less. Only 5 articles have more than 10 revisions, with two having the
maximum of 15 revisions.
Those stats were generated with:SELECT title,count(vid) FROM anarcatblogbak.node_revisions group by nid;
Then throwing the output in a CSV spreadsheet (thanks to
mysql-workbench for the easy export), adding a column numbering the
rows (B1=1,B2=B1+1), another for generating percentages
(C1=B1/count(B$2:B$218)) and generating a simple graph with
that. There were probably ways of doing that more cleanly with R,
and I broke my promise to never use a spreadsheet again, but then
again it was Gnumeric and it's just to get a rough idea.
There are 196 articles to import, with 251 comments, which means an
average of 1.15 comment per article (not much!). Unpublished articles
(5!) are completely ignored.
Summaries are also not imported as such (break comments are
ignored) because ikiwiki doesn't support post summaries.
The script is in [[drupal2ikiwiki.py]]. It is called with:./drupal2ikiwiki.py -u anarcatblogbak -d anarcatblogbak blog -vv
The -n and -l1 have been used for first tests as well. Use this
command to generate HTML from the result without having to commit and
More plugins are of course enabled in the blog, see the setup file for
more information, or just enable plugin as you want to unbreak
things. Use the --rebuild flag on subsequent runs. The actual
invocation I use is more something like:
I had problems with dates, but it turns out that I wasn't setting
dates in redirects... Instead of doing that, I started adding a
"redirection" tag that gets ignored by the main page.
The script should keep the same URLs, as long as pathauto is enabled
on the site. Otherwise, some logic should be easy to add to point to
To redirect to the new blog, rewrite rules, on original blog, should
be as simple as:
When we're sure:Redirect permanent / http://anarc.at/blog/
Now, on the new blog, some magic needs to happen for files. Both
/files and /sites/anarcat.koumbit.org/files need to resolve
properly. We can't use symlinks because
ikiwiki drops symlinks on generation.
So I'll just drop the files in /blog/files directly, the actual
A few pages to test images:
There are some pretty big files in there, 10-30MB MP3s - but those are
already in this wiki! so do not import them!
Running fdupes on the result helps find oddities.
The meta guid directive is used to keep the aggregators from finding
duplicate feed entries. I tested it with Liferea, but it may freak out
some other sites.
- postsparkline and calendar archive disrespect meta(date)
- merge the files in /communication with the ones in /blog/files
- import non-published nodes
- check nodes with a format different than markdown (only a few 3=Full
HTML found so far)
- replace links to this wiki in blog posts with internal links
More progress information in [[the script|drupal2ikiwiki.py]] itself.