diff --git a/404.html b/404.html deleted file mode 100644 index 0f5e54e..0000000 --- a/404.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - 404 - - - - - - - - - - - - - - - -
-

You've found a secret space.

-

It seems as though you are lost in the woods. Take a moment. Breathe. And then back on your way, my friend.

- ← Back to juliaelman.com -
- - diff --git a/CNAME b/CNAME deleted file mode 100644 index 9c6f050..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -juliaelman.com diff --git a/Gemfile b/Gemfile deleted file mode 100644 index c97b11f..0000000 --- a/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source "https://rubygems.org" - -gem "jekyll", "4.2.0" diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index b42acb2..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,64 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - colorator (1.1.0) - concurrent-ruby (1.1.8) - em-websocket (0.5.2) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - eventmachine (1.2.7) - ffi (1.15.0) - forwardable-extended (2.6.0) - http_parser.rb (0.6.0) - i18n (1.8.9) - concurrent-ruby (~> 1.0) - jekyll (4.2.0) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 1.0) - jekyll-sass-converter (~> 2.0) - jekyll-watch (~> 2.0) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.0) - liquid (~> 4.0) - mercenary (~> 0.4.0) - pathutil (~> 0.9) - rouge (~> 3.0) - safe_yaml (~> 1.0) - terminal-table (~> 2.0) - jekyll-sass-converter (2.1.0) - sassc (> 2.0.1, < 3.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - kramdown (2.3.1) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.4.1) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.4.0) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (4.0.6) - rb-fsevent (0.10.4) - rb-inotify (0.10.1) - ffi (~> 1.0) - rexml (3.2.5) - rouge (3.26.0) - safe_yaml (1.0.5) - sassc (2.4.0) - ffi (~> 1.9) - terminal-table (2.0.0) - unicode-display_width (~> 1.1, >= 1.1.1) - unicode-display_width (1.7.0) - -PLATFORMS - ruby - -DEPENDENCIES - jekyll (= 4.2.0) diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 2759806..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,7 +0,0 @@ -Copyright Forever <3 Julia Elman - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 5ba06bf..0000000 --- a/_config.yml +++ /dev/null @@ -1,11 +0,0 @@ -permalink: /blog/:year/:month/:day/:title - -baseurl: "" - -# Build settings -markdown: kramdown -highlighter: rouge - -# Site specific context -title: Julia Elman -description: Julia Elman is a Security Experience Design Lead based in Durham, North Carolina. diff --git a/_includes/footer.html b/_includes/footer.html deleted file mode 100644 index 0cba03a..0000000 --- a/_includes/footer.html +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index 230d474..0000000 --- a/_includes/head.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - {% if page.title %} - {{ site.title }} | {{ page.title }} - - {% else %} - {{ site.title }} - - {% endif %} - - - - - - - - - - - - diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index dcad6f2..0000000 --- a/_includes/header.html +++ /dev/null @@ -1,7 +0,0 @@ -
-

- Pacman pie image - Julia Elman -

- {% include nav.html %} -
\ No newline at end of file diff --git a/_includes/nav.html b/_includes/nav.html deleted file mode 100644 index 05ee0a1..0000000 --- a/_includes/nav.html +++ /dev/null @@ -1,42 +0,0 @@ -{% assign current = page.url | downcase | split: '/' %} - - MENU - - \ No newline at end of file diff --git a/_includes/scripts.html b/_includes/scripts.html deleted file mode 100644 index 2c21b88..0000000 --- a/_includes/scripts.html +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/_layouts/base.html b/_layouts/base.html deleted file mode 100644 index 21846c9..0000000 --- a/_layouts/base.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - {% include head.html %} - - -
- Skip to main content -
- {% include header.html %} -
- {{ content }} -
-
- {% include footer.html %} - {% include scripts.html %} - - diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index c4fda94..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: base ---- - -

{{ page.title }}

- -{{ content }} \ No newline at end of file diff --git a/_layouts/external.html b/_layouts/external.html deleted file mode 100644 index 02531d9..0000000 --- a/_layouts/external.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - {{ page.title }} - - - - - - diff --git a/_layouts/post.html b/_layouts/post.html deleted file mode 100644 index 11ea1c5..0000000 --- a/_layouts/post.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: base ---- - -
-
-

- {{ page.title }} -

- -
- {{ content }} -
diff --git a/_posts/2011-05-20-away-we-go.md b/_posts/2011-05-20-away-we-go.md deleted file mode 100644 index 5568034..0000000 --- a/_posts/2011-05-20-away-we-go.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: post -title: And away we go... -permalink: /blog/2011/may/20/and-away-we-go/ ---- - -It's been a long time in the making, but it's finally here. My website re-design! (insert trumpets blaring here) - -After about 2 design rounds, I finally decided to go with simple and clean. Over my many years of design I find that is always the way to go. - -Another part of this whole get-up that I am completely proud of, is the fact that I built out a few things completely by scratch: - -- a portfolio app for my work pages -- building out my own slice, running on Ubuntu 10.04 (Lucid), Apache, Django, PostgreSQL - -So, I'll pat myself on the back about that, but I am still not 100% happy. This Summer I plan on making my site my laboratory (muah, ha, ha) to play around with and HAVE FUN! Because that's what being in this business is all about, isn't it? Learning new things and building cool sh*t. diff --git a/_posts/2011-08-15-django-showcase.md b/_posts/2011-08-15-django-showcase.md deleted file mode 100644 index 72aa3e2..0000000 --- a/_posts/2011-08-15-django-showcase.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: post -title: django-showcase -permalink: /blog/2011/aug/15/django-showcase/ ---- - -I've been meaning for a while now to get this app up and running on Github. It's a pretty simple, light weight app whose primary purpose is to serve as a base skeletal structure for a showcase of the users work. It can be used for writing samples, photos or almost anything else you'd like to showcase! - -[django-showcase](https://github.com/juliaelman/django-showcase) - -I plan on building this out more and making the templates more robust. There are a few ideas that I have, but suggestions are welcome! diff --git a/_posts/2011-08-20-simple-setup-of-your-django-files.md b/_posts/2011-08-20-simple-setup-of-your-django-files.md deleted file mode 100644 index 2863545..0000000 --- a/_posts/2011-08-20-simple-setup-of-your-django-files.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: post -title: A simple set-up of your django project files -permalink: /blog/2011/aug/20/simple-set-up-of-your-django-project-files/ ---- - -I like organization. Keeping things clean, simple and easy to find make for a seamless work flow and helps to keep everyone in sync when working on a team. - -I am constantly working on improving the way I set-up my projects file structure. Here is how I try to keep things clean: - -{% highlight markup %} -myproject/ - apps/ - django-showcase/ - dev/ - __init__.py - admin.py - manage.py - settings.py - assets/ - images/ - stylesheets/ - scripts/ - templates/ - urls.py -{% endhighlight %} - -First up, is the top level folder name of your Django project. I'm calling this one `myproject`. - -Next up is your apps folder. This is where you will keep your various Django applications that help make your site run. For example, I've included my application `django-showcase` inside of this folder, as I use it on my site. Also, don't forget to add your applications into your `settings.py` file under the `INSTALLED_APPLICATIONS` list. - -Now moving onto the most important part of my organization is the dev folder. This is where all of my development files are located, hence the name dev. Inside of here you'll see the magically important `__init__.py` and other files that help make the other magic parts of Django run. I do this so that I don't have any floating files hanging out in my project. To make this work correctly, you'll need to make sure to set your `DJANGO_SETTINGS_MODULE` to this folder. - -`assets` is the folder where all of my assets media is stored. So all of my front-end stylesheets, images and scripts go here. You'll need to set the path to this folder in `settings.py` file under `assets_ROOT`. - -The `templates` folder is where all of the custom templates for your site will live. You'll also need to define where this is in your `settings.py` under your `TEMPLATES_DIRS`. - -And finally, my `urls.py` configuration file. I place this outside of the dev folder mainly because it might cause issues if there are specific urls tied to various applications in my apps folder. A lot of reusable applications have their own url configuration files inside of them. By making `urls.py` a top-level file, it can access those other urls and make it the main "hub" for your sites url structure. You'll need to set the path for your `ROOT_URLCONF` to point here. - -This is a super simple way to organize your files using Django. Overall, the most important thing is that you use a method that easiest for you and/or your team to be most efficient in your production. - -To learn more about the Django `settings.py` various options, check out the docs at: -[https://docs.djangoproject.com/en/dev/topics/settings/](https://docs.djangoproject.com/en/dev/topics/settings/) diff --git a/_posts/2011-12-14-sometimes-the-best-thing-you-can-do-is-walk-away.md b/_posts/2011-12-14-sometimes-the-best-thing-you-can-do-is-walk-away.md deleted file mode 100644 index 5111f26..0000000 --- a/_posts/2011-12-14-sometimes-the-best-thing-you-can-do-is-walk-away.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: post -title: Sometimes the best thing you can do is walk away -permalink: /blog/2011/dec/14/sometimes-best-thing-you-can-do-walk-away/ ---- - -It's late. Way too late for anyone who consistently wakes up somewhere between 5-6am regardless of what day of the week it is. - -Why the heck am I up so late you ask? I've got some coding problems I am trying to solve and can't go to sleep till they are completed! Dag nabbit and harumph. - -But do I really need to sit here, loosing sleep and scratching my head trying to find/Google the answer? Lately, I am finding the best thing to do when you are heading down the coding rabbit hole is to walk away. That's right. Get out of your seat, take a walk and away from your computer. I find whenever I do this, I come back to my seat feeling refreshed and get my work done faster. - -So next time you are finding yourself stuck on a problem that doesn't seem to want to get solved... walk away. You'll probably find the answer when you get back. diff --git a/_posts/2012-03-12-thoughts-after-attending-my-first-pycon.md b/_posts/2012-03-12-thoughts-after-attending-my-first-pycon.md deleted file mode 100644 index 19fccf8..0000000 --- a/_posts/2012-03-12-thoughts-after-attending-my-first-pycon.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: post -title: Thoughts after attending my first PyCon -permalink: /blog/2012/mar/13/my-first-pycon/ ---- - -A few months ago, I was waiting outside of the Free State Brewery to meet my friend [Adam](http://www.adamfast.com/) for lunch. It was going to be one of the last times I got to eat there before my move to the East Coast. While burrowing into my phone while I waited, I heard a "Hey Julia" and looked up to see [Jacob](http://jacobian.org/), [Frank](http://www.frankwiles.com/) and [Jeff](http://twitter.com/webology/). We caught up for a bit and then the subject of attending PyCon came up. - -"Why would I go?", I said, "I mostly do front-endy kind of stuff." - -"Are you kidding?", said Jacob, "There is going to be tons of good talk and things for you. You need to go. Seriously." - -I am so glad I listened to him. - -I checked out the conference schedule and immediately saw quite a few talks I was super interested in going to! [Idan Gazit's](http://gazit.me/) two talks were especially enlightening and [motivating](http://www.youtube.com/watch?v=vfYul2E56fo) for me. - -A lot of my old co-workers from Mediaphormedia were there and we got to have a mini reunion in the conference hotel lobby. It was so great to see everyone, catch up on the awesome projects everyone is working on and what exciting ones are in store for the future. - -I was also completely amazed to see the female attendance in the crowd. It was very cool and am proud to be part of a community who is in such support of women in tech. - -Then, I surprised myself. I decided at the last minute to sign up for a lightning talk. I'm not a _huge_ fan of public speaking, but had something I felt I wanted to share with the rest of the community. Something that might be helpful to someone in the crowd. Little did I know, that my little lightning talk was being recorded and [streamed live through internet.](http://www.youtube.com/watch?v=eLuscpu4xA0) My entire family was able to watch and cheer me on! How amazing is that? Greatly amazing. Very great indeed. - -So now, sitting in the airport, I find myself thinking about all of these things and where to go from here. I only have one answer to give you. - -Let's make some cool shit. diff --git a/_posts/2012-03-20-review-of-cosmonaut-stylus.md b/_posts/2012-03-20-review-of-cosmonaut-stylus.md deleted file mode 100644 index e3ba106..0000000 --- a/_posts/2012-03-20-review-of-cosmonaut-stylus.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: post -title: Review of the Cosmonaut stylus -permalink: /blog/2012/mar/20/review-cosmonaut-stylus-pen/ ---- - -I've been looking for a way to create quick sketches digitally. Just an easy way to share, create and mock-up ideas without having touch Photoshop. After going to [Idan Gazit's](http://gazit.me/) talk on sketching at PyCon a few weeks ago, I was really impressed with the pen he used. He said it was the [Cosmonaut created by Studio Neat](http://www.studioneat.com/products/cosmonaut). I decided to order it to give it a try and here is my first impression. - -I am a sucker for packaging and product design. If something comes in a cool package, I'm all over it. The box that the Cosmonaut comes in is a simple light weight chip board and has all sorts of cute space stuff printed on it! The pen looks like it's ready for launch. - -![Cosmonaut stylus pen](/assets/images/cosmonaut1.jpg) - -The most surprising part, was how light weight it is! From the photos and video, I thought it was going to be fairly heavy and bulky. I've got little bitty hands and was a bit worried about this. Not a problem at all. It fits perfectly in my hand and is very easy to use. - -![Cosmonaut stylus pen](/assets/images/cosmonaut2.jpg) - -Another thing I like about it is that the tip of the pen is pliable. It really feels like you are writing with a large felt tip pen! Very well thought out design. - -I will note that if you are going to use this on your iPad, you might want to turn off multitasking gestures. If you like to rest your hand on your "paper", this will cause issues when you are drawing on your iPad. - -Overall, I'd definitely say to give this pen a try. For $25, it's a pretty good deal. Looking forward to lots of ideas and doodles to sprout from this. diff --git a/_posts/2012-05-07-reflections-on-imagine-how-creativity-works-by-jonah-lehrer.md b/_posts/2012-05-07-reflections-on-imagine-how-creativity-works-by-jonah-lehrer.md deleted file mode 100644 index f2e779c..0000000 --- a/_posts/2012-05-07-reflections-on-imagine-how-creativity-works-by-jonah-lehrer.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: post -title: Reflections on imagine how creativity works by jonah lehrer -permalink: /blog/2012/may/7/reflection-imagine-how-creativity-works/ ---- - -This past April, I had the pleasure of attending [Switchpoint](http://www.switchpointideas.com/) in Saxapahaw, North Carolina. The conference brought together people from all walks of life. American beat poets, global health workers, an African midwife and a Kenyan tech advocate all came together in one space for one day to see what would happen. It was pretty awesome. - -One of the speakers of the day was [Jonathan Opp](http://appliedpoetics.com/). He spoke of branding and his experience at Red Hat and the Road Tour he helped develop. I got the chance to talk with him during the conference and how I was starting to try to draw more often. He mentioned a good book that he had recently read called, "Imagine: How Creativity Works" by Jonah Lehrer and highly recommend I read it. I tend to listen when smart good folks tell me to do something, and most of the time they are right. - -I read "Imagine" this past weekend. The book is filled with anecdotes from various creative folks. The book has been coined as creating multiple "Aha" moments. It's like he is saying everything you already know, but forgot when thinking about the creativity. He speaks on the different techniques successful companies such as Pixar, 3M and Google use to foster their creative process. He mentions how the common term called "brainstorming" actually stifles us and keeps us from improving our projects with criticism and feedback. Towards the end he wrote: - -> "Here is the dis-quieting truth. Our creative problems keep getting more difficult... It's time to create the kind of culture, that won't hold us back." - -Now how did that apply to me? - -Many years ago, I started out as a design student. I took basic typography classes, where we had to trace over hundreds of different styles of type each night. I'd then go to a drawing class where pre-fabricated still life were lined up perfectly for us to replicate. -It was so completely boring. - -I decided to take a printmaking class as one of my art electives. It was a perfect blend of science, art and physical activity. What a thrill from the mundane "design" world where it seemed perfection was key! I dove head first into printmaking and gave up design. -And then, the computer lab started drawing my attention. This was the age of Napster, AIM and ease in connecting with friends all over the globe. I remember skipping my photography class so that I could spend more time in the computer lab. It was funny. I remember the design students constantly coming to me for help in figuring out how create a proper Quark layout (Yes, I said Quark.) At the time, there wasn't a "web design" program. HTML/CSS were just starting to become something that folks were realizing anyone could do. You didn't have to have a computer science degree in order to do it. - -So, my curiosity stayed with computers. I hacked around on my Compaq Presario 2286 at home and the pretty Macs at school. It was great and it was fun. Both sides of my brain were being used simultaneously with printmaking and computers. My days and nights were filled with problem solving and my brain was happy. - -I continued on with my printmaking, as well as computers. I even worked as a professional printmaker while living in Los Angeles. It was an amazing experience and I even got to help pull a print from one of my all time favorite artists, Ann Hamilton. I printed an edition for Richard Serra and even contributed my own work to an inside edition that the shop did. The halls echoed of Allen Ginsberg and I heard stories of Robert Rauschenberg coming to town. I was in art school geek heaven. - -And then, the magic faded. I was living in a friend's living room, barely able to pay my bills and have enough food to eat. The printmaking dream just wasn't working out. So, art and I broke up. I stopped drawing and creating. I was disappointed. The break up was a bitter one. - -That was almost 10 years ago. After the break up, I delved head first into the world of web programming. I've been fortunate to work with some of the smartest and most creative people I have ever met. I've seen and learned a lot in the past 10 years, but something has always felt off balance: Something that has been at my core ever since I was a kid drawing comic books on the weekend, pure creativity. - -And so, after reading "Imagine" and having many of those "Aha" moments, I am going to try to mend this part of me. Because creativity is key to each us. We all have it. Whether it's the music you've been so close to making, the book you've started writing, but never finished, or a drawing you were too pissed off to jot down. Creativity is important. It's vital to share, collaborate, adapt and create with those around you. Stop the inhibitions and the worry about making a mistake and just make. - -So art? Let's reconcile. I'll start by placing a new link on my site called "Sketchbook" and let's just see where we go from there. diff --git a/_posts/2012-06-03-lets-get-a-little-louder.md b/_posts/2012-06-03-lets-get-a-little-louder.md deleted file mode 100644 index adecdc8..0000000 --- a/_posts/2012-06-03-lets-get-a-little-louder.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: post -title: Lets get a little louder -permalink: /blog/2012/jun/3/lets-get-little-louder/ ---- - -A month ago, I attended a design/front end development conference. I was so excited to attend. My employer even sponsored the conference to show their support. - -I saw that a fellow Django colleague was speaking at the conference. Having attended DjangoCon and PyCon, where I knew lots of the attendees, this would be a conference in which I knew no one. It was cool to see someone from my community attending and I decided to connect with him. We caught up at the conference and talked in between sessions. - -Later on in the evening, a group of us headed to a post-conference social event at a local bar. My Django colleague was there as well. - -We all had some drinks and good conversation. Then, things took a turn. My colleague started making inappropriate sexual advances towards me. He singled me out and would not leave me alone, even when asked. I tried to shake it off, change the conversation and even moved away. He would not stop. I asked him what his wife would think of his behavior. He said that she would only be upset because she didn't get to watch us having sex. I then tried to change the subject completely and asked how his daughter was, thinking that would snap him out of it. And with a blank stare he said bluntly, "She's a slut." I told him he should be ashamed of himself and walked away. - -It was incredibly disappointing, humiliating and degrading on so many levels. I had been turned from a professional colleague into "a hook-up" at a bar. I was disgusted by his behavior, his comments about his family and the fact he is even associated with the Django community. - -So, what did I do? I did the only thing that you really can do in that kind of situation. Tell people. I went to the conference director the next day and explained what had happened. He looked at me and sighed, confessing that he never should have allowed this guy to come to the conference. He went on to ask me what I thought he should do. Wait. What? Really? He is organizing a conference and is asking me what to do? Wasn't there a policy in place for this sort of thing? - -After these events, it is clear to me that there is a definite lack of policies and procedures in place for sexual harassment at conferences and events. What are the rules and consequences for this type of behavior? How do conference and event organizers plan on handling these types of situations? - -So, I'd like to point to a post the company I work for recently wrote. It states that they will ["require that a zero-tolerance sexual harassment policy is established and enforced by the organizers of any conference that we sponsor or attend."](http://www.caktusgroup.com/blog/2012/05/24/narrowing-gender-gap-open-source-community/) I cannot tell you how supportive they have been, even just by writing that statement. I feel that if every employer were to adopt this kind of policy, women would feel more confident in the tech community. Just knowing that your employer has got your back makes a world of difference...to anyone really. - -On that note, this issue is not just about women. It's about men too. Men who want to promote having women in the tech field and are working on creating a safe and inclusive environment. It is guys like the one at the conference I spoke of, that tarnish any of the good work that has been done. I find this kind of disgusting and disrespectful behavior that I had to endure, also unfair to those hard-working people. - -Let's stop talking about apologies too. "After the fact" doesn't really do any good. Sexual harassment should not happen in the first place. There should be a clearly-defined set of standards in place to prevent it. Here's a few to start: - -Number One: If someone is known for sexual harassment or assault, or has a criminal record of doing so, don't invite them to your conference. I know that this seems like a "duh!" sort of thing, but I feel it needs to be stated. - -Number Two: Create a sexual harassment policy for your conference or event. Make that policy publicly available via the conference or event website and/or program. - -Number Three: Clearly state the consequences for these prohibited actions and post them publicly. - -In closing, I ask other women and men in the community to share their stories. Don't be afraid to speak out. There are good people out there who feel the same way you do and want to help. Change will not come from silence. It will only begin to change if we stand up for what we know is right and get a little louder. diff --git a/_posts/2012-06-24-a-post-post.md b/_posts/2012-06-24-a-post-post.md deleted file mode 100644 index 1d8a815..0000000 --- a/_posts/2012-06-24-a-post-post.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: post -title: A post post -permalink: /blog/2012/jun/24/post-post/ ---- - -I've been fairly silent over the past few weeks. Some of that has been personal time and some for work. Working on something that I hope will be helpful to those of us who are at a loss about the issue of sexual harassment in the tech community. What can we really do and where do we start? - -[Paul Smith](http://pauladamsmith.com/) contacted me shortly after my post with an idea his wife, Michelle, had. Why don't we create a pledge where people from the Django community can state that they will no longer attend conferences and events without a code of conduct in place? A simple form where members of the community can sign and pledge their support? - -So, I formed a team and we got to working on what is now: letsgetlouder.com - -It is a start and I am hoping that it gives a voice to those who want to see things change. Let's get loud and let the world know that the Django community does not agree with this kind of behavior. - -Lastly, I want to say thank you. Thanks to all of you who have been supportive over the past few weeks. It has been overwhelming and humbling. I am proud to say that I am a member of the Django community, not only for the technology aspect, but for the people too. diff --git a/_posts/2012-07-11-an-or-a-django-template-filter.md b/_posts/2012-07-11-an-or-a-django-template-filter.md deleted file mode 100644 index 3997ef1..0000000 --- a/_posts/2012-07-11-an-or-a-django-template-filter.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: post -title: An or a Django template filter ---- - -I find that most projects are created out of need. You either look for something that does what you need, come up with an idea, find something that almost does what you want or both. That is how I created a new filter: anora. - -I started out by looking for a template tag or filter that would determine whether or not to us "an" or "a" based on the contextual value of a given word. Django snippets returned a tag that Chris Beaven (aka SmileyChris) created that does this based on two regular expressions: [http://djangosnippets.org/snippets/1519/](http://djangosnippets.org/snippets/1519/) - -Awesome, right? Yes. This is awesome. But in order to use this you'd have to double up your template context as follows: - -{% highlight django %} -{% raw %} -{{ word | tag }} {{ word }} -{% endraw %} -{% endhighlight %} - -Which would result in something like this: 'an owl' or 'a raccoon'. - -Seems verbose and not very DRY (Don't Repeat Yourself). Thus, a need was found and created with anora: [https://github.com/juliaelman/anora/](https://github.com/juliaelman/anora/) - -So now, you can simply do {% raw %}`{{ word|anora }}`{% endraw %} and 'a' or 'an' (and a space) will be added before your word based on it's phoenetic value. - -Pretty simple, but can be very useful. Enjoy! diff --git a/_posts/2013-01-10-empowering-women-by-teaching.md b/_posts/2013-01-10-empowering-women-by-teaching.md deleted file mode 100644 index d08dc34..0000000 --- a/_posts/2013-01-10-empowering-women-by-teaching.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: post -title: Empowering women by teaching -permalink: /blog/2013/jan/10/empowering-women-by-teaching/ ---- - -Many folks have been asking the following question: how to get more women involved in various programming communities? This questioning has led to great discussions about [subsidized childcare at tech conferences](http://pycon.blogspot.com/2012/11/survey-subsidized-childcare-at-pycon.html) and more focus on diversity in programming. - -My answer: Teach women to program. - -Last night, I had the pleasure of teaching my first class for [Girl Develop It Raleigh/Durham](http://girldevelopit.com/chapters/raleigh-durham). It's an affordable opportunity for women who want to learn the basics about HTML and CSS. We had about 9 students and it was... well, awesome! By the end of the class, we were laughing and learning together. The students left with smiles on their faces and telling me how much fun they had programming. - -The other thing I learned tonight is that teaching women also empowers you as a teacher. A lot of us seasoned female veterans of programming have a lot of knowledge we can share. By getting involved and teaching other women how to program, you are not only empowering your students, but yourself too. - -So, it's like that old saying, "Teach a man to fish and..." - -Wait... let's change that to: - -Teach a woman to program and empower her for a lifetime. diff --git a/_posts/2013-03-20-thoughts-after-attending-my-second-pycon.md b/_posts/2013-03-20-thoughts-after-attending-my-second-pycon.md deleted file mode 100644 index c4574c3..0000000 --- a/_posts/2013-03-20-thoughts-after-attending-my-second-pycon.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: post -title: Thoughts after attending my second PyCon ---- - -Here I am again, sitting in an airport waiting to board my flight away from PyCon. And what a conference it has been! Where do I even begin... - -The experience this year was one of inspiration for me. After arriving at SFO, I headed straight to Santa Clara to help out with the [Young Coders](https://us.pycon.org/2013/events/letslearnpython/) tutorials, a free Python tutorial geared towards kids. It was amazing. I walked into a room with a sea of faces beaming with the new knowledge they were acquiring. (It was referred to as "coder face.") - -I also had the incredible opportunity to be a speaker this year. My colleague [Mark Lavin](http://twitter.com/DrOhYes/) and I spoke on Developers & Designers: Collaborating on your Python projects. It was such a fun talk to give and am grateful for the opportunity. We had some really great questions and many a folks telling us afterwards how much they appreciated our perspectives. Wow. It feels good to feel that you've possibly inspired or motivated someone else! - -And then, there was the gift of a Raspberry Pi to each PyCon attendee. I wish I had, had a better camera with me so that I could have gotten photos of the faces in crowd when [Jesse Noller](http://twitter.com/jessenoller/), PyCon Chair, announced that everyone in the audience would be getting a Raspberry Pi. Those faces and the kids in the audience jumping up and down in their seats, was a truly amazing site to see! - -![Raspberry Pi inside of Pibow case](/assets/images/raspberrypi.jpg) - -*My Raspberry Pi, decked out in it's new Pibow home* - -Overall, I would have to say that my experience this year was all about people. The people whom I rarely get to see in real life and more frequently talk to via a keyboard. It's these in person moments that have the most impact on us as a community. Getting to know all of the amazingly smart and kind people I am surrounded by is truly inspiring. - -Looking back on my post from [last year](/blog/2012/mar/13/my-first-pycon/), I never would have believed you if you told me what the future held at PyCon 2013. Thank you to everyone who made this year a success and making me very proud to be a member of the Python community. - -Oh yeah... and let's keep on making more cool shit. diff --git a/_posts/2013-03-21-because-it-works.md b/_posts/2013-03-21-because-it-works.md deleted file mode 100644 index 1fba9bc..0000000 --- a/_posts/2013-03-21-because-it-works.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: post -title: Because it works ---- - -Yesterday, I wrote a post about the [awesome time I had at PyCon 2013](/blog/2013/03/20/thoughts-after-attending-my-second-pycon/). What I failed to mention in that post, was what the community has been doing to ensure that there is awesomeness for all. - -Let's crunch some numbers! - -- 20% of the attendees at PyCon were women -- 40+ kids, ages 13 to 16 years old, attended the Young Coders tutorials -- Over 2500 attendees came to this years event, making it the largest Python gathering to date - -But what contributed to this diverse and welcoming conference? There are many reasons, but I'd like to point out the top three I feel helped the most. - -### Outreach - -I attended a panel with varying community leaders titled ["Scaling community diversity outreach"](https://us.pycon.org/2013/schedule/presentation/104/). At the end of the panel, someone asked the question on what is the best way to try to engage a more diverse community. [Jessica McKellar](http://web.mit.edu/jesstess/) stated that she found the best solution is by reaching out to individuals and bringing them into the community. - -I could not agree more with this sentiment. From my personal experience this year, it has meant a lot more to me to have members of the community reach out directly. I would like to especially thank [Jesse Noller](http://jessenoller.com/), who inspired me to submit a talk proposal in the first place. - -Also, [PyLadies grants](https://us.pycon.org/2013/assistance/) made it possible for those to attend the conference, who otherwise could not because of financial reasons. One of my colleagues from [Girl Develop It RDU](http://www.meetup.com/Girl-Develop-It-RDU/) received one of these grants to come to her first ever PyCon. Because of this, I got to see her face beaming every time I ran into her at the conference! - -### Activism - -In the expo hall, there was an amazing presence of many of the women in tech activist groups. [PyLadies](http://www.pyladies.com/), the [Ada Initiative](http://adainitiative.org/), [Open Hatch](https://openhatch.org/) and [Women Who Code](http://www.meetup.com/Women-Who-Code-SF/) all had booths near each other. It was so cool to watch these spaces become a welcoming hub for all to come together! Each groups activism and support of women in the Python community helps make for a better space for everyone to be in. It was great to see this happening at the conference in real time. - -### Code of conduct - -I have personally [done what I can](http://letsgetlouder.com/) to help make it clear that creating a code of conduct at conferences is imperative. The staff at PyCon greatly understands the importance of having a code of conduct and put that practice to action. - -PyCon had two incidents, of which they handled with both [care](http://pycon.blogspot.com/2013/03/pycons-response-to-inapropriate.html) and [grace](http://pycon.blogspot.com/2013/03/pycon-response-to-inappropriate.html). They were able to react swiftly. The code clearly defined how the conference handles such incidents. Without the code, I am not sure these occurrences would have been handled as well as they did. - -These three things are what helped to create a safe and respectful environment at the conference. A place where men, women and children could come together to share their love of Python. - -So, guess what folks? It works. diff --git a/_posts/2013-04-02-installing-pygame-on-osx-mountain-lion.md b/_posts/2013-04-02-installing-pygame-on-osx-mountain-lion.md deleted file mode 100644 index 847d73c..0000000 --- a/_posts/2013-04-02-installing-pygame-on-osx-mountain-lion.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -layout: post -title: Installing PyGame on OSX Mountain Lion ---- - -Setting up local development environment is par for the course when programming. We've all had to do it at one time or another in our careers and shared in the pain points it brings with it. - -My battle this week? Dun, dun, dun...installing [pygame](http://www.pygame.org/wiki/about) on OSX Mountain Lion. - -Yes yes, I know. [I just received this awesome Raspberry Pi](/blog/2013/03/20/thoughts-after-attending-my-second-pycon/) which has the Raspian distribution of pygame already installed on it. Well friends, I have other plans for that little device at the moment. So it's reserved for later. Stay tuned... - -I started doing some reading as to what was the best way to go about getting pygame installed. My initial assumption was to begin by creating a virtualenv. Bad idea. After doing some quick research, I found that virtualenv can cause various issues when setting up pygame. So, I opted out and went for the global install instead. - -Here is what you should have installed as a precursor to installing pygame. You might already have them installed, but I wanted to make sure to list them just in case you don't. I've also included a link to installation instructions for each of these as well, if you don't already have them set up: - -- [XCode v4.6.1](https://developer.apple.com/xcode/) -- [XQuartz 2.7.4](http://xquartz.macosforge.org/landing/) -- [pip v1.3.1](http://www.pip-installer.org/en/1.3.1/installing.html) -- [hg v2.5.2](http://mercurial.berkwood.com/) -- [homebrew v0.9.4](https://github.com/mxcl/homebrew/wiki/Installation) - -Next, you'll need all the little bits & pieces that make pygame go. Here is a quick explanation of all of those items (thank you Wikipedia!). - -### Simple directmedia layer (sdl) - -[http://www.libsdl.org/](http://www.libsdl.org/) - -Simple DirectMedia Layer is a cross-platform, free and open source multimedia library written in C that presents a simple interface to various platforms' graphics, sound, and input devices. It's a wrapper that supports all of the primary functionality to create your game. There are several sub-systems that are also installed to support basic functionality: - -- sdl_image: support for multiple image formats -- sdl_mixer: complex audio functions, mainly for sound mixing -- sdl_ttf: [TrueType font](http://en.wikipedia.org/wiki/TrueType) rendering support - -### SQL mpeg library (smpeg) - -[http://icculus.org/smpeg/](http://icculus.org/smpeg/) - -smpeg is a mpeg decoding library. It interfaces with the Simple DirectMedia Layer to provide cross-platform MP3 playback for games. - -### Portmidi - -[http://portmedia.sourceforge.net/portmidi/](http://portmedia.sourceforge.net/portmidi/) - -PortMidi is a computer library for real time input and output of MIDI data to aid in any music you would like to create for your game. - -### Installation - -First, you will need to install all of the SDL goodness: - -{% highlight bash %} -brew install sdl sdl_image sdl_mixer sdl_ttf portmidi -{% endhighlight %} - -You'll notice that `smpeg` is missing from this list. This was a little bit more complicated and I had to do some tapping to get this to install correctly: - -{% highlight bash %} -brew tap homebrew/headonly -brew install smpeg --HEAD -{% endhighlight %} - - -As explained in [this Github comment](https://github.com/samueljohn/homebrew-python/issues/22#issuecomment-14958411), these options pull the latest (and possible unstable) version of smpeg. This is not ideal, but this is what ended up working for me. - -And now, onto pygame! I really don't like installing pre-packaged distributions and much rather work with active code. So, I installed via hg in order for it to work properly, and run `sudo` because of my folder permissions setup (I swear, I'll fix that one day!): - -{% highlight bash %} -sudo pip install hg+http://bitbucket.org/pygame/pygame -{% endhighlight %} - -Now, open up a python shell prompt and type `import pygame`. Did it work? If so, congratulations! pygame is now installed on your machine. diff --git a/_posts/2013-04-29-razzytails.md b/_posts/2013-04-29-razzytails.md deleted file mode 100644 index 0afe63f..0000000 --- a/_posts/2013-04-29-razzytails.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: post -title: Razzytails ---- - -Over the past few months, my colleague [Caleb](https://twitter.com/CalebSmithNC) and I had been developing a game using [pygame](http://www.pygame.org/). We had worked on it from time to time, figuring out the game mechanics, writing code, sketching out ideas and creating game assets. - -Last week the company I work for, [Caktus Consulting Group](http://caktusgroup.com), hosted our second [Ship It Day](http://www.caktusgroup.com/blog/2012/10/01/planning-our-first-shipit-day-caktus/). It's a wonderful perk of working there and a great opportunity to work on projects we've been thinking about doing. Caleb and I decided that the next Ship It Day would be a great stretch of time to work on the game we had been developing. We recruited a few other Caktus colleagues, [David](https://twitter.com/david_codes) and [Vinod](https://twitter.com/vkurup), to help us out in creating this open source game. - -![Team meeting to discuss game mechanics, features and assets](/assets/images/razzytails1.jpg) - -On Thursday afternoon we met and built a plan of attack for the initial release. We already had the mechanics drawn up for the overall game experience, and quite a bit of code, but still needed to complete a bit more before making it live. With the help of our co-workers, we were able to make our first release! - -The final result is called [Razzytails](https://github.com/calebsmith/razzytails/). The goal of the game is to help Razzy, the mascot for [Raspberry IO](http://raspberry.io), collect all of the assets for her Raspberry Pi (Raspberry Pi, SD Card, power cord, monitor, mouse and keyboard). But, there is one catch... there are zombie honey badgers roaming around to test your Raspberry Pi + Python knowledge and keep you from collecting the items. Answer the question wrong and you lose all of the assets out of your inventory. If you win, you get to the win screen that points you to the Raspberry IO website to learn more about using your Raspberry Pi. Razzytails also works swimmingly on a Raspberry Pi, which comes with pygame already installed. - -![Razzytails on a Raspberry Pi](/assets/images/razzytails2.jpg) - -One of the other objectives we had for the game was to create a possible educational tool for using Raspberry Pi with pygame. Here are a few ideas we came up with in ways to use it for educational purposes: - -- editing the JSON files such as [questions.json](https://github.com/calebsmith/razzytails/blob/master/assets/questions.json) as a way to test Python/Raspberry Pi knowledge -- engaging new coders in pygame mechanics by tweaking the code and making edits - -There are definetly more ways in which we see the community utilizing this game and making it into something useful for educational purposes. - -In closing, I have to say that developing my first game was something I really, really enjoyed! It was great to come up with the character designs, collaborate on the storyline with my teammates and get Razzytails working on my Raspberry Pi. I hope to have more opportunities like this and create more fun and educational games. - -![Julia working on Razzytails](/assets/images/razzytails3.jpg) - -*All photos courtesy of Caktus Consulting Group* diff --git a/_posts/2013-06-27-what-ive-been-up-to-lately.md b/_posts/2013-06-27-what-ive-been-up-to-lately.md deleted file mode 100644 index 0446225..0000000 --- a/_posts/2013-06-27-what-ive-been-up-to-lately.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: post -title: What I've been up to lately ---- - -So. It's been a while since I wrote a post. Mostly because... well... I've been busy. - -First off, I am proud to announce that I have joined [Girl Develop It RDU](http://girldevelopit.com/chapters/raleigh-durham) as one of their new co-leader's. It's been a lot of fun organizing events, classes and engaging with other tech-minded women around the Triangle. I've already met some amazing women in my community and am proud to be part of such a diverse group. We have some really great classes lined up, one of which is an [Introduction to Python](http://www.meetup.com/Girl-Develop-It-RDU/events/122999952/) class which started this week! - -Another big venture I am helping to organize is a Teen Tech Camp in Durham, NC. Last year, I helped out with the first camp, which focused primarily on varying web technologies. After what I saw come out of the [Young Coders tutorials at PyCon 2013](https://us.pycon.org/2013/events/letslearnpython/), I thought the Teen Tech Camp would be a great avenue for teens in my area to learn Python programming on a [Raspberry Pi](http://www.raspberrypi.org/). I helped write a grant proposal with other area volunteers ([Sarah Kahn](https://twitter.com/aarahkahak), Autumn Winters, [Kurt Grandis](https://twitter.com/kgrandis) + [Clinton Dreisbach](https://twitter.com/cndreisbach)) to the [Python Software Foundation](http://www.python.org/psf/) to ask for assistance with funding for the main camp materials. We received notice a few weeks ago that the board accepted the proposal (THANK YOU PSF). The Teen Tech Camp is happening on August 13th at the Southwest Durham Regional Public library. There is still a lot of work to do, but I am so happy to be bringing something like the Young Coders tutorial to the Triangle! - -I'll also be leaving in a few weeks [to speak at OSCON 2013](http://www.oscon.com/oscon2013/public/schedule/detail/28590) with my colleague, [Mark Lavin](https://twitter.com/DrOhYes). It is a real honor to be speaking at such a historic conference (celebrating it's 15th year) and I am looking forward to learning a lot of new and interesting things. - -AND, I am currently working on another talk for [SecondConf 2013](http://www.secondconf.com/2013/) in Chicago. It's a talk I've been wanting to give for a while and am glad I'll be giving it in one of my favorite cities! - -Needless to say, I am pretty busy. But all-in-all, this busy-ness is enlivening, inspiring and these are all amazing things be a part of. - -Plus, I just don't think I could do it any other way. diff --git a/_posts/2013-07-31-durham-teen-tech-camp-press-release.md b/_posts/2013-07-31-durham-teen-tech-camp-press-release.md deleted file mode 100644 index 23fdcc0..0000000 --- a/_posts/2013-07-31-durham-teen-tech-camp-press-release.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: post -title: 2013 Teen Tech camp press release ---- - -FOR IMMEDIATE RELEASE - -Local Teens Learn Computer Programming Using Raspberry Pi Microcomputers - -Durham, NC – [Refresh the Triangle](http://www.meetup.com/refreshthetriangle/) is proud to announce [Teen Tech Camp 2013](http://durhamcountylibrary.org/2013/06/teen-tech-camp-2013/), a one-day event to teach computer programming to area youth. The camp is the second to be hosted by Refresh the Triangle, in partnership with [Durham County Library](http://durhamcountylibrary.org/). - -This year, students will learn basic [Python](http://python.org/) computer programming concepts through the use of interactive curriculum with a [Raspberry Pi](http://www.raspberrypi.org/), a pocket sized PC developed in the UK by the [Raspberry Pi Foundation](http://en.wikipedia.org/wiki/Raspberry_Pi_Foundation) with the intention of promoting the teaching of basic computer science in schools. - -Along with generous community volunteer support, a grant from the [Python Software Foundation](http://www.python.org/psf/) has made it so that each of the 20 students will receive his or her own Raspberry Pi, books and other materials to help further computer programing education. - -Support from the following organizations has also helped to make this event possible: [Ayima](http://www.ayima.com/), [Adzerk](http://www.adzerk.com/), [Caktus Group](http://caktusgroup.com/), [Greenlight Community Broadband](http://www.greenlightnc.com/), [Linux New Media](http://www.linuxnewmedia.com/), [Splatspace](http://splatspace.org/), [Triangle Ecycling](http://www.triangleecycling.com/), [TriLUG](http://www.trilug.org/), [TriPython](http://trizpug.org/) and [Verified Studios](http://verifiedstudios.com/). - -The event will take place Tuesday, August 13, at the Southwest Durham Regional Library (3605 Shannon Rd., Durham, NC 27707) from 10:00AM – 5:00PM. - -For more information about the Teen Tech Camp 2013 and/or to schedule interviews, please email me at: [juliaelman@gmail.com](mailto:juliaelman@gmail.com) diff --git a/_posts/2013-08-20-teen-tech-camp-recap.md b/_posts/2013-08-20-teen-tech-camp-recap.md deleted file mode 100644 index a9d23ad..0000000 --- a/_posts/2013-08-20-teen-tech-camp-recap.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -layout: post -title: Teen Tech camp recap ---- - -As some of you [may already know](http://exitevent.com/teen-tech-camp-hosts-future-developers-1389.asp), last week I had the honor and privilege to help organize the 2013 Teen Tech Camp in Durham, North Carolina. The event was extremely challenging, fun and one of the most rewarding things I have ever been a part of. - -#### the idea - -The idea for the camp came from my experience at the Teen Tech Camp in 2012. [Refresh the Triangle](http://www.meetup.com/refreshthetriangle/), a community made up of area designers and developers, hosted the camp and focused it around web applications, websites and web design. The kids learned about HTML, CSS, web design and other web-related technologies from local professional technologists. - -This year, I wanted to help move the camp in a different direction... - -At the 2012 Teen Tech Camp, one of the volunteers brought in a [Raspberry Pi](http://raspberrypi.org/) for the students to learn about. It was by far one of the most interesting aspects of that event. Almost every participant gathered around the device out of curiosity and to find out what it was. We were impressed to see so many of the kids wanting to learn about this tiny micro-computer and what it could do. - -![2012 Teen Tech campers checking out a Raspberry Pi](/assets/images/2012teentechcamp.jpg) -_Students checking out Raspberry Pi at 2012 Teen Tech Camp_ - -Since the kids from the previous year seemed so intrigued by the Raspberry Pi, that it seemed only natural to focus this year's event around it. After seeing the initiatives from my colleagues [Barbara](https://twitter.com/bshaurette) and [Katie](https://twitter.com/kcunning) at the [Young Coders](https://us.pycon.org/2013/events/letslearnpython/) tutorial, which focused on teaching [Python](http://python.org/) through Raspberry Pi, I decided to start organizing a similar event for the 2013 Teen Tech Camp. - -#### the planning - -Shortly after returning from [PyCon 2013](https://us.pycon.org/2013/), I spoke with Refresh organizer [Sarah Kahn](https://twitter.com/aarahkahak) about my idea for the next Teen Tech Camp. She was totally psyched about the new angle for the event and we started formulating a game plan to make it all happen. - -We started by gathering information and creating to-do items for each of us. We formulated an equipment list, started recruiting volunteers, re-connected with [Autumn Winters](http://linkedin.com/pub/autumn-winters/11/a74/5b2/) (Teen Librarian at [Southwest Durham Regional Library](http://durhamcountylibrary.org/location/southwest/) and co-organizer for 2012 Teen Tech Camp) and reached out to sponsors for fundraising. - -In that vein, we also applied for a grant from the [Python Software Foundation (PSF)](http://python.org/psf/) to provide funds for the Raspberry Pi's, some basic peripherals (SD Card + power supply) and books for the students to take home with them to continue their computer programming education after the camp. After reviewing the proposal, the PSF granted us the funds to pay for all of the proposed items and gave us a great head start! - -Other peripherals for the event came from generous donations from businesses like [Triangle Ecylcing](http://www.triangleecycling.com/), an electronics recycling business, [Ayima](http://ayima.com/) and the members at [Splatspace](http://splatspace.org/), who created twenty unique 3D Raspberry Pi cases. It was amazing to see my local community come together to donate equipment for the camp. Very cool, indeed. - -![Splatspace 3D printed Raspberry Pi cases](/assets/images/splatspace-rpi-cases.jpg) -_3D printed Raspberry Pi cases from [@splatspace](https://twitter.com/splat_space)_ - -#### the event - -The night before the camp, we set up all of the equipment. I had spent some time testing all of the peripherals weeks ahead of time, but wanted to make sure that everything would be ready the day of. Volunteers from around the Triangle area came to the library to help set up tables and chairs, plug in monitors, tape down cords and test equipment. It was great to get so much support from the community and also see their enthusiasm for this event! - -![Volunteers setting up 2013 Teen Tech Camp](/assets/images/2013teentechcamp-1.jpg) -_Volunteers setting up 2013 Teen Tech Camp_ - -After about 2 hours, lots of volunteer help and some masterful debugging by [Clinton Dreisbach](https://twitter.com/cndreisbach), we were able to get everything set up for the next day. We never could have gotten this accomplished in such a short amount of time without everyone's help. - -![2013 Teen Tech Camp Raspberry Pi setup](/assets/images/2013teentechcamp-2.jpg) -_2013 Teen Tech camp setup_ - -The day of the event finally arrived. I stopped by and picked up pastries and juice for the students + volunteers (thank you, [Caktus](http://caktusgroup.com/)!) and headed to the library. - -The students started to trickle in one-by-one, each of them peering over at the work stations to see what awaited them. We passed out name tags, Raspberry Pi magazines donated by [Linux New Media](http://linuxnewmedia.com/) and let them settle in. - -We started off the camp with teacher and student introductions. Each of us gave our name and favorite video game (most common answer: Minecraft). We then moved on to the first portion of the lesson: What is a Raspberry Pi? - -During the first lesson, we went through each component of the Pi and what it does (e.g. SD card, USB output, etc.). We felt it was important for the kids to learn exactly what this little computer really was and what all of the different parts were. - -![2013 Teen Tech Camp lead instructor Clinton Dreisbach explaining the workings of a Raspberry Pi](/assets/images/2013teentechcamp-3.jpg) -_2013 Teen Tech Camp instructor Clinton Dreisbach giving a Raspberry Pi tour, photo courtesy of [@rmurphey](https://twitter.com/rmurphey)_ - -We next moved away from the slides and opened up the [iPython notebooks](http://ipython.org/notebook.html) for the Python coding examples (slides and examples are [availabe on Github](https://github.com/kgrandis/teentechcamp)). Each student followed along on his/her own machine` using [LXTerminal](http://wiki.lxde.org/en/LXTerminal), the command line terminal program that comes with the Raspbian distribution. We reviewed how to use Python to do basic math equations, assign variables, input/output concepts (e.g. print), comparisons, control structures, conditionals and loops. During each section, we went through a few examples and then had the kids try it themselves. With six teaching assistants and one lead instructor, we were able to to go around to each student to provide individual guidance and support. We also included a few Minecraft and other gaming breaks to keep the students engaged. - -![Students giving a thumbs up](/assets/images/2013teentechcamp-4.jpg) -_Students giving a thumbs up while learning conditionals_ - -There were also parts of the camp where we would ask for group participation. For each correct, or even "good try", answer we had various donated gift items from local companies like [Greenlight Community Broadband](http://greenlightnc.com/) to hand out. - -During the lunch break, [Caleb](https://twitter.com/CalebSmithNC) and I did a demo of the game we collaborated on called [Razzytails](https://github.com/calebsmith/razzytails/). Both of us went over the parts we contributed towards the game. We then demo'd the actual game and had the kids participate in the Pythonic questions [Razzy](https://github.com/calebsmith/razzytails/blob/master/assets/images/razzy.png) encountered. - -After lunch, we moved onto piecing all of the lessons we learned in the morning to help start writing functions. The students moved out of LXTerminal and opened up [IDLE](http://wiki.python.org/moin/IDLE), a simple Python IDE, where they could easily run their functions and save their Python script files. We taught them about the .py file extension and how to actually run the script to make the program responsive. It was so amazing to see what the kids came up with on their own! They had gone from learning how to compute basic math equations to writing whole functions. - -![Students learning how to run and write functions](/assets/images/2013teentechcamp-5.jpg) -_Learning how to run and write Python functions, photo courtesy of [@rmurphey](https://twitter.com/rmurphey)_ - -Towards the end of class, we stopped coding and showed each of them how to take apart their Pi's and put them back together. We then let them know that each of them would take home their own Raspberry Pi, any of the peripherals they would need and a "goodie" bag filled with Raspberry Pi stickers, educational books and other materials that would help them in their adventures in programming. It was so cool to see all of their faces light up with joy when they realized what they were going to take home! One of them even said to me, "Are you joking? Are there cameras waiting to come out and surprise me?" - -![End of the day photo](/assets/images/2013teentechcamp-6.jpg) -_2013 Teen Tech camp students and their Raspberry Pi's_ - -#### the outcome - -My goal for the 2013 Teen Tech Camp was not to have the students walk out of the library, ready to take on complex computer programming challenges. It was to spark interest in the students and get them excited about learning computer programming. By using varying techniques and providing a safe space for learning, we were able to engage every student at an individual pace. While I know that the students probably did not come away with a deep understanding of computer programming, they did come away with a positive and supportive experience. They will take away the motivation, energy and drive to keep on learning, because someone believes in them. Because sometimes all you need in order to succeed is someone else telling you, "You got this." and cheering you from the sidelines. Kids need this the most and it's programs like the Teen Tech Camp where we can bring a supportive, nurturing environment, along with a challenging learning experience. - -Organizing the Teen Tech Camp has really sparked something in me. Having experienced the trials and successes of running an event like this has motivated me to do more and continue to teach computer programming education for our youth. The importance of getting them excited about technology is imperative. I truly believe that it is our responsibility as technologists to reach out to the younger generation and guide them. - -The Python community is just beginnning to understand the importance of raising the next generation to be creators and not just consumers. After-school Python clubs, tutorials and classes are starting to spring up around the globe, and more resources are becoming readily available. We all hear the call and I can sense a strong collaboration coming, which will provide any child the type of education necessary to be successful. - -[Stay tuned](https://twitter.com/juliaelman/) and [keep in touch](mailto:juliaelman@gmail.com). We're already planning the 2014 Teen Tech Camp and I can't wait to tell you all about it. diff --git a/_posts/2013-10-22-mozilla-summit.md b/_posts/2013-10-22-mozilla-summit.md deleted file mode 100644 index 75833fd..0000000 --- a/_posts/2013-10-22-mozilla-summit.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -layout: post -title: 2013 Mozilla Summit ---- - -Earlier this month, I had the honor of being invited to attend the [2013 Mozilla Summit](https://wiki.mozilla.org/Summit2013) in Brussels, Belgium. It was an amazing experience and I wanted to share some of the highlights from my trip. - -#### What is the Mozilla Summit? -Mozilla hosts triennial meetings in which Mozillians from all over the world come together. The 2013 Mozilla Summit was hosted in three cities: Brussels, Santa Clara and Toronto. Throughout the Summit, there were keynotes and breakout sessions that focused on varying parts of the organization and the cool things they are doing. - -#### What cool things did you learn about? -There are a few things that Mozilla is up to that I found particularly interesting. Here are some of the highlights: - -##### WebMaker -[https://webmaker.org](https://webmaker.org) - -Webmaker is a global community whose focus is promoting web literacy through making, teaching and remixing. Mozilla created this out of the desire to engage users not only to create content, but also to understand how the web works. - -As many of you know, I am heavily involved with programming education on varying levels. It was great to see how Mozilla has created its own community and suite of tools to help expand the knowledge base for web literacy. - -Here are a few brief explanations of each of the Webmaker tools, and what they do to help in this global effort. - -##### Popcorn -[https://popcorn.webmaker.org/](https://popcorn.webmaker.org/) - -Popcorn Maker is an easy way to make your own web video, audio and images by remixing already existing media. By providing an easy-to-use editing browser interface, users can create customized mixes of their favorite media and share them with the world. The layout reminds me of a Flash timeline, where you can drag-and-drop your files and slice them together. - -##### X-Ray Goggles -[https://goggles.webmaker.org/](https://goggles.webmaker.org/) - -X-Ray Goggles is a simplified web page inspector for those looking to understand the elements that make up a page. After activating X-Ray Googles in your browser, users can hover over each element of the page to see what HTML tag creates that portion of it. You can then click, view and edit to create your own remix of that markup. I feel this could be an incredibly useful tool for folks to use to dig in and get a better understanding of how web pages are made up. It also makes it simpler for newer users to grasp the concept of a web inspector, which contains a multitude of other tools that could make things more confusing. - -##### Thimble -[https://thimble.webmaker.org/](https://thimble.webmaker.org/) - -Thimble is, by far, my favorite of all of the tools provided by Webmaker! It's a simple way for users to create and share code they have been working on. It is paired up nicely with a mirrored output viewer, so you can see immediately how your page looks as you write it. - -So what is so different about Thimble in comparison to something like [Codepen](http://codepen.io/) or [JSFiddle](http://jsfiddle.net/)? For starters, the interface is amazingly simple and clean to work with. This helps newer users to move past any inhibitions they may have when starting to code. - -Secondly is the "Show Hints" option. When selected, this activates hints to appear for any coding errors they see (e.g. missing closing tags). I definitely see this as a great tool for those looking to learn HTML/CSS, as well as to teach it to others. - -Each one of these tools has its merits and I am really impressed by the effort Mozilla has put in to creating them. I definitely plan to try them out in my [Girl Develop It RDU](http://www.meetup.com/Girl-Develop-It-RDU/) classes! - -#### OpenNews -[http://www.mozillaopennews.org/](http://www.mozillaopennews.org/) - -OpenNews is a global network of developers, journalists, makers and hackers whose focus is the creation of tools journalism needs to thrive on the open web. It is an effort Mozilla has embarked on with the [Knight Foundation](http://www.knightfoundation.org/) and I had a chance to learn more about it during the Innovation Fair. - -Every year, several fellows are selected to travel to a selected news outlet (e.g. The Guardian) for 10 months as an embedded part of the newsroom. Each fellow works at leveraging open source technologies, as well as assisting each establishment with integrating these practices into their business. - -Having worked with [Django](http://djangoproject.com) for nearly six years now, I can't help but be interested in anything related to making the news industry a happier place. It was great to meet some of the fellows and hear about the interesting things they are working on in their assigned destinations. - -#### Shumway -[http://mozilla.github.io/shumway/](http://mozilla.github.io/shumway/) - -If you have worked on the web at any capacity, you've probably worked somewhere in the realms of Flash. At times, it has been a pain point to work with, especially within the mobile space. [Mozilla Labs](https://mozillalabs.com/en-US/) has come out with a way to render SWF files using Javascript and the HTML5 canvas element. - -So, why is this cool? Many mobile devices have little to no support to run SWF files. With Shumway, you can easily see a rendered version of the file on your device easily. With everything Mozilla is doing in the mobile space (e.g. Firefox OS), it is really cool to see what new innovations they are coming up with to strengthen the mobile platform. - -#### Community -I'd have to say that the main thing I learned from attending the 2013 Mozilla Summit is the amazing community surrounding this global organization. Every Mozillian I met had an interesting story to tell about the projects they were working on and what they were up to in their local communities. It was a real joy to meet all of the amazing people and I am excited to see all of the new things to come! diff --git a/_posts/2013-10-30-and-now-for-something-completely-different.md b/_posts/2013-10-30-and-now-for-something-completely-different.md deleted file mode 100644 index 7819a84..0000000 --- a/_posts/2013-10-30-and-now-for-something-completely-different.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: post -title: And now for something completely different ---- - -{% raw %} -
-

- I am my own worst critic. It helps you keep searching. Trying to expand. Trying to grow. And not settling into something that is familiar....[ ] -

-

I want to keep moving and keep learning. And not know everything.

- - — Michael Stipe - -
-{% endraw %} - -Throughout my career I have always worked at places where I was passionate about what I was doing. Whether it was coming up with new designs or learning about some new technology, every path I have chosen has lead me into new and uncharted waters. And now I have decided to move on yet again. - -[Caktus](http://caktusgroup.com) has been a place of growth for me. I look back and see how much I've learned over the past two years while working with this talented team, and am truly amazed. - -And while it was an extremely hard decision to make, I have decided to move my career in another direction. - -Over the past few years I have grown to realize how important new standards in education are to me. It all started with Paul Graham's keynote at [PyCon 2012](https://us.pycon.org/2012/), which he followed up with an essay titled ["Frighteningly Ambitious Startup Ideas."](http://paulgraham.com/ambitious.html) One of the ideas he wrote about in his essay was titled "Replace Universities" in which he stated: - -{% raw %} -
-

I don't think universities will disappear. They won't be replaced wholesale. They'll just lose the de facto monopoly on certain types of learning that they once had. There will be many different ways to learn different things, and some may look quite different from universities.

- - — Paul Graham - -
-{% endraw %} - -This really stuck with me because I am the product of a public university program whose capacity to engage students in new technologies was limited. - -Since this talk, [Massive Open Online Courses](http://en.wikipedia.org/wiki/Massive_open_online_course) (also known as MOOC's) have emerged all around the web. [Coursera](https://www.coursera.org), [Khan Academy](http://www.khanacademy.org) and even [Stanford](https://class.stanford.edu/) have created engaging online learning tools out of this need for easily accessible educational resources. But where does that leave those who are not individual learners? Where do these platforms leave professional educators? - -With that, I have decided to change the focus of my job towards education. Starting mid November, I'll be joining the team at [Coursefork](http://coursefork.org), a collaborative tool for sharing curriculum, as Lead Designer. I am thrilled to be joining this talented team of developers and educators to help design this new platform. - -Some of you might be wondering if I will still be working with [Django](http://djangoproject.com) in my new role at Coursefork. Possibly... but I definitely will be doing so in my spare time. I am also excited to announce that my colleague [Mark Lavin](https://twitter.com/drohyes) and I are writing a book on Django for [O'Reilly Media](http://www.oreilly.com/). I am thrilled to have this opportunity to help grow the community with a new addition to the Django library. - -Needless to say, this next year is going to be an interesting and heartfelt journey. And I can hardly wait to get started. diff --git a/_posts/2014-01-22-creating-trinket.md b/_posts/2014-01-22-creating-trinket.md deleted file mode 100644 index a3e5a91..0000000 --- a/_posts/2014-01-22-creating-trinket.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -layout: post -title: Creating trinket ---- - -For the past four weeks, I have been helping to lead a rebranding effort for [Coursefork](http://coursefork.org). It has been an interesting journey for our team and I wanted to share how we came up with our new brand. - -### Coursefork wasn't working - -As an edtech startup, it is important for us to have a brand that resonates with educators. The name "Coursefork" was just not working, primarily because of the branding approach. While "forking" is a term that most programmers understand, it is not a concept most of the educators are familiar with. In my mind, we had to change the brand to put us in a better position to connect with educators and create a successful product. - -### Brand manifesto - -We started the process by creating a brand manifesto, a brand's clear and public declaration of purpose and intent. This statement set the tone for our new brand and gave the team a centralized idea that highlighted our vision. We were able to use the brand manifesto consistently throughout the process to return to as an anchor. Here is the brand manifesto we came up with: - -{% raw %} -
-

- We’re on a journey to make the world a better place through education. Educators have been left out of edtech for too long. We’re bringing them together so that they stay at the center of education. -

-

Educators have shared knowledge with each other for centuries. By using the Internet to open up this process, we’re helping you build education's future.

-
-{% endraw %} - -### Getting started - -After establishing the brand manifesto, it was time for us to really start the process of selecting a new name. - -Nick Zafiropoulos, CEO at local startup [Brevado](http://brevado.com), recommended the [Igor Naming Guide](http://www.igorinternational.com/process/naming-guide-product-company-names.php) to help us through our rebranding process. I read through the guide and felt that it fit perfectly with the direction we wanted to take. So, we battened down our hatches and got to work! - -### Competitive analysis - -Our first step was to take a look at our competitors and rank their branding with a set of standards. Each name was categorized as either: Functional/Descriptive, Invented, Experiential or Evocative. Here are some brief explanations for each of these categories: - -- Functional/Descriptive: Company names that are descriptive are asked to perform only one task: explaining to the world the business that you are in. -- Invented: Names that are built on Greek and Latin roots and/or poetically constructed names that are based on rhythm and the experience of saying them. -- Experiential: Experiential names offer a direct connection to something real, to a part of direct human experience. -- Evocative: These names evoke the positioning of a company or product, rather than describing a function or a direct experience. - -We categorized each competitor name and talked about why each name was in that category. This part of the process helped us get our minds in sync with what we felt were successful names, and what type of name we were aiming for. - -![trinket competitive analysis chart](/assets/images/trinket-competition.gif) - -### Brainstorming - -After determining our names category target, we started brainstorming possible ideas. For two weeks all I did was think, talk and breathe about what our new name would be. The team and I would stay in the office late into the evening, white-boarding concepts for each new idea. This was one of the most invigorating, intense and frustrating parts of the process, as trying to get several possible contenders in the ring became a daunting task. Regardless, the team banded together and each member contributed ideas to the cause. - -![Photo of naming sketch papers](/assets/images/trinket-sketches.jpg) - -### Name evaluation + taglines - -As we began to whittle away at the list of names, possible contenders started to rise to the top of the pile. We ended this stage with 15 good names, and continued on with the next phase of the Igor Naming Guide process: Name Evaluation and Taglines. - -The Name Evaluation is where you determine several aspects of the possible brand name contenders and rank each one as objectively as possible. Each category helps dissect parts of the potential name into nine different categories: Appearance, Distinctive, Depth, Energy, Humanity, Positioning, Sound, "33" and Trademark. - -(I won't go into what each category means, but you can read more about them [here](http://www.igorinternational.com/process/name-evaluation-brand-evaluate-names.php).) - -We created a spreadsheet in which each name would be ranked and given a final score to determine it's potential. "Domain name" was also added to this ranking to determine what url options would be for each given name. - -The team also came up with potential taglines for each of the 15 contenders. This helped in determining the marketing and positioning strategies that we would be capable of using with each brand. Each name had anywhere from 5-20 different taglines for us to choose from. - -### Creative assets - -At this stage of the process, we had already taken a look at the competition, selected our naming aims, brainstormed 15 possible options and tag lines for the company's new branding strategy. But, there was still something missing: creative. What would the logo look like? In what direction would we want to head for the visual presentation for the brand? Colors? Fonts? - -Having gone through all these steps, making the creative assets is a step that I found helped bring the ideas to life. We chose eight different names that ranked highest in the naming evaluation process. For each name, I created 2-4 branding themes to help us really experience the name. It was a part of the process that helped the team determine which name to move forward with. Here are some of the concepts we came up with: - - - -I presented these creative assets to the team, speaking to the visual strengths and/or weaknesses for each one. We then discussed the positive aspects of those we liked and did a private polling so each team member could rank which name they thought was most connected with our brand manifesto. - -After much deliberation, thought, evaluation and effort, the team chose: - -[![trinket: the key to open teaching](/assets/images/trinket-logo.png)](http://bit.ly/1e7OyZM) - -When we think about trinkets, we think about something that is precious and small. Something that we can carry around with us and collect over time. This mindset perfectly sets our brand in a position for our users to create something meaningful and precious to them. Creating courses, and sessions within them, takes time and collection of materials. The goal for [trinket](http://get.trinket.io/) is to create this space where educators can bring those courses and materials together in the open. - -We've created a [sign-up](http://trinket.io) for our new product and are thrilled to finally be able to announce it to you all! I am very proud of my team and how we worked together seamlessly to create this new and meaningful brand. We are looking forward to hearing your feedback and joining us on the next step of our journey. diff --git a/_posts/2014-02-24-virtual-volunteering.md b/_posts/2014-02-24-virtual-volunteering.md deleted file mode 100644 index 2a0be39..0000000 --- a/_posts/2014-02-24-virtual-volunteering.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -layout: post -title: Virtual volunteering ---- - -This past weekend I had the unique opportunity to speak at a first time conference [PyTennessee 2014](http://www.pytennessee.org/) in Nashville, TN. I gave a talk called "To the Moon and Back: Taking the Leap in Solving Big Problems." It's a talk I had given at [SecondConf 2013](http://secondconf.com/2013/) and am very happy to have been given the opportunity to bring this talk to the Python community. - -During my talk, I touched on the past, present and future of solving big problems as technologists. I ran through a few scenarios outlined in the [MIT Technology Review](http://www.technologyreview.com/) article titled: [Why We Can't Solve Big Problems](http://www.technologyreview.com/featuredstory/429690/why-we-cant-solve-big-problems/), by Jason Pontin. Pontin points out a few conclusions about why we have failed to solve big problems and ends the article with this statement: - -{% raw %} -
-

- It’s not true that we can’t solve big problems through technology; we can. We must. But all these elements must be present: political leaders and the public must care to solve a problem, our institutions must support its solution, it must really be a technological problem, and we must understand it. -

- - — Jason Pontin - -
-{% endraw %} - -This statement presents an answer to the question of our ability to solve big problems. So, how can we help as technologists? Where can we even start? - -I mentioned a few virtual volunteering opportunities where we, as professional technologists, can help contribute our talents. I've started a short list below and also made it completely open source, [forkable on Github](https://github.com/juliaelman/juliaelman.github.com/blob/master/_posts/2014-02-24-virtual-volunteering.md). I encourage you to submit a pull request, or even shoot me a message on [Twitter](http://twitter.com/juliaelman) or email me at [juliaelman@gmail.com](mailto:juliaelman@gmail.com) for events and/or opportunities where professional technologists can give back. It's an exciting time and I am looking forward to hearing about all of the opportunities we have to help contribute and solve big problems. - -### Click (One-day event) -[http://www.nashvillecode.org/](http://www.nashvillecode.org/) - -A free event for teachers and programmers. I learned about this while at PyTennessee 2014 and am thrilled to hear about this opportunity to connect professional educators and developers. - -### Code for America (Organization) -[codeforamerica.org](http://codeforamerica.org) - -Code for America brings together local governments and technologists to make better cities for everyone. - -### Code Montage (Organization, Events) -[codemontage.com](http://codemontage.com) - -Code Montage helps empower coders to improve their impact on the world. On January 18, 2014, they held a "Coder Day of Service" in which 1300 volunteer coding hours helped amplify 50 projects. - -### Make Good (Virtual volunteering) -[jenmyers.github.io/makegood](http://jenmyers.github.io/makegood) - -Virtual volunteering opportunities for web designers and developers. - -### Random Hacks of Kindness (Organization, Events) -[rhok.org](http://rhok.org) - -Making the world a better place by developing practical, open source technology solutions to respond to some of the most complex challenges facing humanity. diff --git a/_posts/2014-03-17-malcolm.md b/_posts/2014-03-17-malcolm.md deleted file mode 100644 index 4d22f7c..0000000 --- a/_posts/2014-03-17-malcolm.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: post -title: Malcolm ---- - -It has been a year since Django core contributor [Malcolm Tredinnick](http://about.me/malcolmt) suddenly passed away. It was a shock and a major blow to the community to lose him, as described in [multiple posts](http://storify.com/adrianholovaty/malcolm-tredinnick-memorial) around the web. I never took a chance to contribute my own thoughts on his passing and want to take this occasion to share my own perspective and experiences with him. - -I first met Malcolm while working at World Online in Lawrence, KS. He was doing some contract work for us at the time and was in town during the Django 1.0 Sprint event. Our local Django developer community all gathered together in a meeting room in [Little Red](https://www.flickr.com/photos/ubernostrum/2237046673/) to fix bugs, contribute to features and get the Django project up to speed for it's anticipated 1.0 release. - -![Django Sprint 2008 - World Online](/assets/images/2008-django-sprint-wol.jpg) -_2008 Malcolm on far left, partially off screen, photo by Cody Soyland_ - -While working with him, I quickly came to realize that Malcolm was incredibly smart. Not just book smart, but the kind of smart that completely amazed you. We were all in awe of how well he understood the complexities of the Django code base and the talent he brought to the project. And while I think most of us felt completely out of our league when working with him, he always was there to be a mentor and teacher to us all. - -I hope he knew how much his encouragement and overall kindness especially meant to me. I will never forget his compassion and willingness to teach. His spirit lives on in the people whom he helped and it will never be forgotten. We can all now return the favor by doing this for others and encouraging them in their own practice as developers. - -So, as [Matt Croydon stated in this tweet](https://twitter.com/mc/statuses/314013575406571520), "Celebrate the life of @malcolmt today: be nice to someone, help someone learn something, and push some code. Tomorrow: repeat." - -Thank you, Malcolm. diff --git a/_posts/2014-04-12-simplifying-django.md b/_posts/2014-04-12-simplifying-django.md deleted file mode 100644 index 0f46b73..0000000 --- a/_posts/2014-04-12-simplifying-django.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -layout: post -title: Simplifying Django ---- - -**The original post is listed on the O'Reilly Radar blog: [http://radar.oreilly.com/2014/04/simplifying-django.html](http://radar.oreilly.com/2014/04/simplifying-django.html)** - -Despite Django's popularity and maturity, some developers believe that it is an outdated web framework made primarily for "content-heavy" applications. Since the majority of modern web applications and services tend not to be rich in their content, this reputation leaves Django seeming like a less than optimal choice as a web framework. - -Let's take a moment to look at Django from the ground up and get a better idea of where the framework stands in today's web development practices. - -### Plain and Simple Django - -A web framework's primary purpose is to help to generate the core architecture for an application and reuse it on other projects. Django was built on this foundation to rapidly create web applications. At its core, Django is primarily a Web Server Gateway Interface (WSGI) application framework that provides HTTP request utilities for extracting and returning meaningful HTTP responses. It handles various services with these utilities by generating things like URL routing, cookie handling, parsing form data and file uploads. - -Also, when it comes to building those responses Django provides a dynamic template engine. Right out of the box, you are provided with a long list of filters and tags to create dynamic and extensible templates for a rich web application building experience. - -By only using these specific pieces, you easily see how you can build a plain and simple micro-framework application inside a Django project. - -We do know that there are some readers who may enjoy creating or adding their own utilities and libraries. We are not trying to take away from this experience, but show that using something like Django allows for fewer distractions. For example, instead of having to decide between Jinja2, Mako, Genshi, Cheetah, etc, you can simply use the existing template language while you focus on building out other parts. Fewer decisions up front make for a more enjoyable application building process. - -### Onboarding New Django Users - -A bigger issue the Django community, and other web frameworks, continue to battle is the onboarding process of new users. For example, these new users typically begin learning Django through it's official tutorial where you [build a polling application](https://docs.djangoproject.com/en/stable/intro/tutorial01/). Many of us seasoned Django developers consider it a “rite of passage” into the Django community. But is it the best way to begin learning Django? Probably not. - -Currently, there are a total of six parts to complete the polls app tutorial. While each part has it's significance, it isn't until [part three](https://docs.djangoproject.com/en/dev/intro/tutorial03/) that you finally write your first public facing view and start building out your HTTP responses. This is a far cry from the more simple “Hello World” tutorial you'll see on the front pages of popular Python micro-frameworks (e.g. Flask or Bottle). The answer we see happening is to create less of a barrier to entry for learning the parts and pieces of Django and focus on the basic request to response interaction. New users can then build from there to see how the other pieces of the framework help you with common web tasks, like session management, user authentication or the built-in admin interface. - -To show what we mean, let's build out a sample of what a more simplified Django tutorial might look like: - -{% highlight python %} -import sys - -from django.conf import settings -from django.conf.urls import patterns -from django.http import HttpResponse -from django.core.management import execute_from_command_line - -settings.configure( - DEBUG=True, - SECRET_KEY='placerandomsecretkeyhere', - ROOT_URLCONF=sys.modules[__name__], -) - -def index(request): - return HttpResponse('Powered by Django') - -urlpatterns = patterns('', - (r'^$', index), -) - -if __name__ == "__main__": - execute_from_command_line(sys.argv) -{% endhighlight %} - -Simple, right? This small bit of code is all you need to run a Django project. Let's break down each component to explain the necessity for each part. - -First, we'll need to make sure to include Django's HTTP response request utility and return the values we want to have in that response: - -{% highlight python %} -from django.http import HttpResponse - -def index(request): - return HttpResponse('Powered by Django') -{% endhighlight %} - -Normally, this code would be implemented in the standard views.py file of a typical Django project. For the simplicity of this project, we'll be placing most of the code to run our application in this single file. - -The next portion of the application ties in nicely in with this portion is the url structure. The code above expects the index url, so we'll need to create that: - -{% highlight python %} -from django.conf.urls import patterns -from django.http import HttpResponse - -def index(request): - return HttpResponse('Powered by Django') - -urlpatterns = patterns('', - (r'^$', index), -) -{% endhighlight %} - -From only seven lines of code we have already created the basics to run an application in Django! Now, we'll implement the basic settings to make the application runnable: - -{% highlight python %} -import sys - -from django.conf import settings -from django.conf.urls import patterns -from django.http import HttpResponse - -settings.configure( - DEBUG=True, - SECRET_KEY='placerandomsecretkeyhere', - ROOT_URLCONF=sys.modules[__name__], -) - -def index(request): - return HttpResponse('Powered by Django') - -urlpatterns = patterns('', - (r'^$', index), -) -{% endhighlight %} - -You'll notice in the example that we have stripped down the settings and have specifically excluded the database configuration. We see these options as a particular barrier to entry for new users with the confusion it causes when trying to determine what databases they should use. We want to make sure that we focus on specific parts to implementing our project to drop the barrier levels. - -**NOTE:** Be sure to make a private and random SECRET_KEY value in your settings.configure for the default session and cross-site request forgery (CSRF) protection. - -Since we are not generating this structure by using the startproject command, we are missing the typical manage.py file that is generated. We'll need to add the relevant portions that are part of manage.py and used to run our project: - -{% highlight python %} -import sys - -from django.conf import settings -from django.conf.urls import patterns -from django.http import HttpResponse -from django.core.management import execute_from_command_line - -settings.configure( - DEBUG=True, - SECRET_KEY='placerandomsecretkeyhere', - ROOT_URLCONF=sys.modules[__name__], -) - -def index(request): - return HttpResponse('Powered by Django') - -urlpatterns = patterns('', - (r'^$', index), -) - -if __name__ == "__main__": - execute_from_command_line(sys.argv) -{% endhighlight %} - -You should now be able to go to your command line to start your application: - -{% highlight bash %} -python project_name.py runserver -{% endhighlight %} - -Now when you browse out to your localhost at 127.0.0.1:8000, you'll get the output of “Powered by Django” in the window! - -![Browser window that display Powered by Django](/assets/images/simplifying_django_fig_1.png) - -Now you may be asking yourself, “where is the views.py or models.py?!” First off, take a deep breath and relax. Remember what Django really is: it's a Python web framework with a whole host of utilities you can easily import to do the things you need to do to run your application. This is where we see the next portion of the tutorial in teaching new users how to import those utilities. For example, building out a simple template seems like the most natural progression in this process. So, let's do that! - -The basic understanding of adding templates is through the way we define our settings and urls. We'll need to first tell Django where our template files are located by adding the necessary settings. Let's start by adding a variable to point to your where your project lives: - -{% highlight python %} -import os -import sys - -BASE_PATH = os.path.dirname(__file__) - -from django.conf import settings -from django.conf.urls import patterns, url -from django.core.management import execute_from_command_line -from django.shortcuts import render - -settings.configure( - DEBUG=True, - SECRET_KEY='placerandomsecretkeyhere', - ROOT_URLCONF=sys.modules[__name__], - TEMPLATE_DIRS=( - os.path.join(BASE_PATH, 'templates'), - ), -) - -def index(request): - return render(request, 'index.html', {'request': request}) - -urlpatterns = patterns('', - url(r'^$', index, name='index'), -) - -if __name__ == "__main__": - execute_from_command_line(sys.argv) -{% endhighlight %} - -You'll notice at the top, we've added an import of the os.path Python module. By doing this, we have created an easy way for new users to point to their project folder. Now we can easily add in our TEMPLATE_DIRS setting to point to this template directory and start taking advantage of Django's built-in tags and filters! - -As you can see, by decomposing the basics of creating a Django application into smaller parts, we can create an easier way to onboard new users. We need to re-learn how to teach Django by building Django applications without the ORM and without the Django admin. These parts of Django need to be seen for what they really are: built-in features. They aren't necessary in order to use the framework and you don't lose much if you don't feel the need to implement them. We should start with the pieces of Django, just like you would learn the Python standard library, for the good parts and not feel the weight. Let's start moving past that and see it for the open source, feature rich utility it really is. - -So, with all of this in mind, what are some applications you are considering building that could be developed in this light-weight manner? diff --git a/_posts/2014-05-09-joining-the-iron-yard.md b/_posts/2014-05-09-joining-the-iron-yard.md deleted file mode 100644 index 241d069..0000000 --- a/_posts/2014-05-09-joining-the-iron-yard.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: post -title: Joining the iron yard ---- - -This past March I had the privilege to be a mentor for [Pearl Hacks](http://pearlhacks.com/), a hackathon for college and high-school aged women at UNC-CH. It was an inspiring event for me and I really enjoyed seeing all of the amazing things that the students came up with! I had the opportunity to teach some of the attendees about [Django](http://djangoproject.com) and the fundamentals of starting their first Django project. It was very nostalgic and it also made me realize one thing: I love teaching. - -Today I am thrilled to announce that I'll be joining [The Iron Yard](http://theironyard.com/) as their Front End Engineering Instructor at the new campus in Durham. I'll be joining my talented colleague [Clinton Dreisbach](https://twitter.com/cndreisbach), who also helped me at the [2013 Teen Tech Camp](http://juliaelman.com/blog/2013/08/20/teen-tech-camp-recap/), to build an amazing school for our local community. (FYI: We'll also be doing some free coding classes for kids too!) - -Our first round of classes starts this June and I am amazed at the talented applicants that have already applied. It's going to be an adventure for us all and am looking forward to showing off all of the talent the Triangle has to offer! - -PS. We're still accepting applications for June! Learn more and apply for the class here: [http://theironyard.com/academy/front-end-engineering/](http://theironyard.com/academy/front-end-engineering/). diff --git a/_posts/2014-08-25-graduation-day.md b/_posts/2014-08-25-graduation-day.md deleted file mode 100644 index 31c5ff4..0000000 --- a/_posts/2014-08-25-graduation-day.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: post -title: Graduation day ---- - -Last week I had the honor of helping graduate the very first cohort of students from The Iron Yard in Durham, NC. The entire day was filled with gratitude, kind words, thoughts and a brilliant showcase of the amazing work the students created during their intensive twelve weeks of training. - -During the after-party on Demo Day this past Friday, I kept getting told things like "You must feel like a proud parent!" in relation to my work with the students. After hearing that a few times, I really could not seem to relate to the notion that these talented individuals and their work was being attributed to me. Because the truth is is that I feel much more like a good guide on their journey. Each student in my class got to where they are by their own perseverance, strength and utter talent. - -This 12 week intensive program is something that everyone in the school goes through together as a team. And while I felt like I had my own journey during this time, that is for another blog post. - -So congratulations to all of the students at The Iron Yard Academy in Durham! You all are amazing individuals who inspire me, each other and the world around you. - -Now go punch the sky! \o/ diff --git a/_posts/2014-08-26-pressing-pause.md b/_posts/2014-08-26-pressing-pause.md deleted file mode 100644 index 27ab7e6..0000000 --- a/_posts/2014-08-26-pressing-pause.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: post -title: Pressing pause ---- - -![Mary Cassatt, Breakfast in Bed](/assets/images/breakfast-in-bed-1897.jpg) -Mary Cassatt, _Breakfast In Bed_, 1897, oil on canvas - -This week, my daughter starts her first week of Kindergarten. I cannot believe she is already heading off to school or how quickly the time has passed. It seems like yesterday I was nuzzling this little baby under my chin, doing the hokey pokey at story time and figuring out the secrets of potty training. - -This week has also been a time of self reflection. The past twelve weeks of teaching at The Iron Yard have been filled with countless hours, days, nights and weekends of teaching, writing curriculum, lesson plans and classroom exercises. At the same time, [Mark](https://twitter.com/drohyes) and I were busy finishing up the final chapters and technical edits of our book. As you can imagine, it would not be an understatement to say that these past three months have been overly intense. With the students now graduated and [the book](http://bit.ly/lightweightdjango) officially approved for the final draft (YAY!), the level of intensity is starting to wane and life is getting back to something more normal. - -It is within this week of self reflection that I have decided to leave The Iron Yard as it's Front End Engineering Instructor. A lot has happened in my career over the past year and I am deciding to take a little time off for myself and my family. I'll still be speaking at a few conferences ([BlendConf](http://2014.blendconf.com/) + [Frontporch.io](http://frontporch.io/)), have a few other projects I am excited about and scheduling some freelance work. - -I'll also be focusing on doing more writing, creating, traveling, spending time with good friends/family, continuing to help empower women in tech as Chapter Leader for [Girl Develop It RDU](http://www.meetup.com/Girl-Develop-It-RDU/) and considering what adventures I want to head into next. I am going to use my time to gather lots of creative and intellectual input to take with me wherever I decide to go to next. - -I feel lucky to be able to take this time out for myself and my family and I am going to make the most of it. diff --git a/_posts/2014-09-15-what-i-learned-from-teaching.md b/_posts/2014-09-15-what-i-learned-from-teaching.md deleted file mode 100644 index 6be3e64..0000000 --- a/_posts/2014-09-15-what-i-learned-from-teaching.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: post -title: What I've learned from teaching ---- - -![Julia Elman, Girl Develop It RDU](/assets/images/julia-elman-gdirdu-teaching.jpg) - -In my journey into teaching, I learned many things about the craft and its role in education, primarily in the programming realm. The challenges I encountered as a teacher are beyond many of the challenges I faced as even as a programmer. In the past year or so, I have been thinking of new ways to teach and bring new awareness to students. Here are a few things I have learned and would like to share. - -### Create different learning pathways - -One of the most common challenges I faced was how to deal with the different skill levels students bring to the classroom. Some students have very little experience while others come with many years of programming knowledge. What I have found is that throwing students with varying skill levels into one class can result in mass confusion. It's important that all of the students are at or close to the same skill level so they can keep up with the pace of instruction. - -### Get help - -This is something I cannot stress enough and is crucial to your success as an educator. Having a good network of educators you can reach out to for help is something I have found useful. Getting advice and tips as well as having folks to bounce ideas off of will help strengthen your lessons and other materials. - -And if you are lucky enough to have one, hiring a good teaching assistant is something I would also highly recommend. Your time is consistently in high demand as a teacher and having someone to help with the work load is something that will benefit you (and your students) in the long run. - -### Your feedback on your job is your students - -I have typically been used to getting feedback on my job from bosses, other co-workers and colleagues. - -As a teacher, it is sometimes hard to evaluate how you are doing on the job. Were my students learning anything? Am I a horrible teacher? I spent about a week really agonizing about this and had to do a lot of thinking before coming to the conclusion that your feedback is from your students. Are they grasping the concepts? How are their projects turning out? All of these things were appropriate questions to be asking myself whenever I felt anxious about my job performance. - -### You should like people - -I love people. And I love helping people. It is why I started teaching programming, organized the [Teen Tech Camp](http://juliaelman.com/blog/2013/08/20/teen-tech-camp-recap/),helped found [Girl Develop It RDU](http://www.meetup.com/Girl-Develop-It-RDU/) and now [PyLadies RDU](http://www.meetup.com/pyladies-rdu/). If you don’t like people, confrontation or managing in general, don’t teach. You will be miserable and ineffective for the people who need you. Also, some of the best teachers I have had in my life are those I felt really cared about my education. It creates a level of trust and confidence between you and your students to show you care. - -Also, while being empathetic is important, being able to stand your ground with your students is important too. Your students look to you as the expert running the ship and it's crucial for you to stand firm in your steering. - -### Materials, materials, materials! - -Creating well-designed lesson plans and materials to teach from and provide to your students is essential for achieving a successful classroom. Here are a few types of materials and teaching styles that I have used, plus some feedback on each: - -- **Live coding:** While this method is primarily used for video tutorials, I have used this in the classroom setting too. Some colleagues have considered this method very effective for teaching coding, but I am a bit more skeptical. What I found was that this method is great for showing students where YOUR skills are and makes them possibly walk away feeling that they have a certain standard to live up to. I didn't even realize how quickly I type until I was asked to slow down and came to realize how difficult new concepts were to learn with this method. It was even more overwhelming to my students who have slower typing abilities. -- **Slides:** Creating slides can be very effective when teaching. It provides a nice outline for students to follow and helps organize each concept in am efficient way so that all students can easily understand. Slides also serve as an artifact of the classroom learnings that the students can reference. -- **In-class exercises:** Muscle memory is a term that I often hear used when people are learning to code. It's generally referred to as a way for students to start memorizing key strokes and general coding practices. Creating in-class exercises really helps students not only to practice with instruction, but also to apply directly what they have learned at the time. We do this a lot in Girl Develop It and typically break up lectures with hands-on exercises. - -Another teaching style that I have not tried yet is something called the [flipped classroom](http://en.wikipedia.org/wiki/Flipped_classroom). It's a technique in which students are given assignments prior to stepping into a lesson in order to work on their homework during class time. It then creates an environment in which the instructor is there to offer "personalized guidance" instead of the typical lecture. It's an interesting concept and one that I can see being _very_ effective in teaching programming. - -And on a final note, one of the main things I have learned is that teaching is something of an art form. It takes practice to hone your craft to get really good at it. Be sure to remind yourself to get good at any art form takes time. Rome was not built in a day and neither is a good classroom experience. diff --git a/_posts/2014-09-26-your-django-story.md b/_posts/2014-09-26-your-django-story.md deleted file mode 100644 index 1bc7b80..0000000 --- a/_posts/2014-09-26-your-django-story.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Your Django Story: Meet Julia Elman -layout: external -external_url: http://blog.djangogirls.org/post/98461055208/your-django-story-meet-julia-elman ---- \ No newline at end of file diff --git a/_posts/2015-03-06-pressing-play.md b/_posts/2015-03-06-pressing-play.md deleted file mode 100644 index 2a776cb..0000000 --- a/_posts/2015-03-06-pressing-play.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: post -title: Pressing play ---- - -![Running Towards Tomorrow](/assets/images/running-towards-sun.jpg) - -In my writing titled "[pressing pause](/blog/2014/08/26/pressing-pause/)", I talked about taking some time off for myself. It's been good to be able to take time for myself, my family and take into consideration what I want to do in my life. - -While during my time off I've been pretty quiet, I have also been *really* busy. I thought I'd do one of those "What I've Been Up To" posts and list some of the things I did during my time off just in the Fall of 2014: - -- Spent loads of time with my family. -- Caught up with close friends. -- *Finally* achieved reaching level 99 of [Bubble Bobble](http://en.wikipedia.org/wiki/Bubble_Bobble). -- Read some [inspiring](http://www.amazon.com/Bird-Some-Instructions-Writing-Life/dp/0385480016) and [motivating books](http://www.amazon.com/Yes-Please-Amy-Poehler/dp/0062268341/). -- Cleaned up the "project piles" around my house. -- Attended the [2014 Girl Develop It Leadership Summit](http://f.cl.ly/items/2g0r0v1b282o3b2E3b2Y/summit2014-groupfoto.png) in NYC. -- Spoke at [2014 Frontporch.io](http://frontporch.io/) in Dallas, TX. -- Spoke at [2014 BlendConf](http://2014.blendconf.com/) in Charlotte, NC. -- "[Lightweight Django](http://bit.ly/lightweightdjango)" book launch hosted by [Caktus Consulting Group](http://caktusgroup.com) and [Girl Develop It RDU](http://www.meetup.com/Girl-Develop-It-RDU/). - -I have also been helping lead the effort in launching the [Girl Develop It](http://girldevelopit.com) website re-design. While my role did include some developer work, I mostly help steer the project towards the finish line and keep it on track. We successfully launched February 16, 2015 and [pull requests are always welcome](https://github.com/girldevelopit/gdi-new-site)! - -In January 2015, I started working as the interim Director of Project and Community Engagement at [CodeMontage](http://codemontage.com), a web platform dedicated to helping coders improve their impact on the world. I've had the pleasure and honor of working with [Vanessa Hurst](https://twitter.com/dbness) and [Courteney Ervin](https://twitter.com/courteneyervin) to help connect non-profits and their open source projects with new contributors. It's been a truly rewarding experience to work on such an important goal and with such an amazing group of women! - -Throughout all of this time, I've spoken with several employers and colleagues about working with them. After figuring out and prioritizing my career goals, I am thrilled to announce that I am starting a new chapter in my resumé. But I'll leave that for another writing. diff --git a/_posts/2015-03-12-joining-18F.md b/_posts/2015-03-12-joining-18F.md deleted file mode 100644 index 17a8035..0000000 --- a/_posts/2015-03-12-joining-18F.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: post -title: Joining 18F ---- - -{% raw %} -
-

Unless our conception of patriotism is progressive, it cannot hope to embody the real affection and the real interest of the nation.

- - — Jane Addams - -
-{% endraw %} - -As mentioned at the end of [my last writing](/blog/2015/03/06/pressing-play/), I spent my time off speaking with several colleagues and employers about working with them. Today I am proud to finally announce that I have joined the team at [18F](https://18f.gsa.gov/). - -### What is 18F? - -18F is a digital service agency based within the [United States General Service Administration](http://www.gsa.gov/). Our focus is user centered design, lean startup methods and open source. We work with agencies within the U.S. government to help solve problems and create a significant impact on the way we interact with government services. - -In other words, it's a dream job. - -I get to work with some AMAZINGLY talented people who are like minded on making an impact inside of government. Everyone I have met this week has the same instinctual drive for the kind of work we are doing. It's thrilling to be surrounded by [this kind of energy](https://esq.io/blog/posts/joining-18f/) and the feeling of a [shared sense of purpose](https://alexgaynor.net/2015/feb/03/software-of-the-people-by-the-people-for-the-people/). - -And on that note, I've got to run... because we've got a lot of work to do! diff --git a/_posts/2015-04-03-welcome-new-coders.md b/_posts/2015-04-03-welcome-new-coders.md deleted file mode 100644 index aa1e552..0000000 --- a/_posts/2015-04-03-welcome-new-coders.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How to welcome new coders to a civic hackathon -layout: external -external_url: https://18f.gsa.gov/2015/04/03/how-to-welcome-new-coders-to-a-civic-hackathon/ ---- \ No newline at end of file diff --git a/_posts/2015-04-28-intersection-art-and-tech.md b/_posts/2015-04-28-intersection-art-and-tech.md deleted file mode 100644 index 85487ab..0000000 --- a/_posts/2015-04-28-intersection-art-and-tech.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: The intersection of art and technology -layout: external -external_url: https://18f.gsa.gov/2015/04/28/intersection-of-art-and-technology/ ---- \ No newline at end of file diff --git a/_posts/2015-06-02-taking-the-pulse.md b/_posts/2015-06-02-taking-the-pulse.md deleted file mode 100644 index a442b5e..0000000 --- a/_posts/2015-06-02-taking-the-pulse.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Taking the pulse of the federal government's web presence -layout: external -external_url: https://18f.gsa.gov/2015/06/02/taking-the-pulse-of-the-federal-governments-web-presence/ ---- \ No newline at end of file diff --git a/_posts/2015-08-14-six-months-and-counting.md b/_posts/2015-08-14-six-months-and-counting.md deleted file mode 100644 index d7eeb90..0000000 --- a/_posts/2015-08-14-six-months-and-counting.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: post -title: Six months and counting ---- - -![Six Months and Counting](/assets/images/six-months-and-counting.jpg) - -While I am not a prolific writer on this site of mine, it's been quite a while since I've written something. In fact, it's been almost exactly six months since my [last post](/blog/2015/03/12/joining-18F/) and needless to say, I've been busy. So, I thought I'd write up what I've been up to in that time. - -One of the many exciting things that has been going on was joining the wonderfully talented and dedicated team at [18F](https://18f.gsa.gov). It's an amazing atmosphere to work in and contribute my skills and talents towards serving my country. - -One of my first projects on the job was [Pulse](https://pulse.cio.gov) ([https://github.com/18F/pulse](https://github.com/18F/pulse)), how federal government domains are meeting best practices on the web. I worked with a small team for six weeks to design and develop a website in which various agencies around government are able to access and [measure the health of their HTTPS compliance and Digital Analytics Program (DAP) participation](https://18f.gsa.gov/2015/06/02/taking-the-pulse-of-the-federal-governments-web-presence/). We're currently gearing up for the next phase of the project and are helping to develop more features for agencies towards building out this useful tool. - -Another project that is currently under development is the [U.S. Federal Web Design Standards](https://github.com/18F/usfwds) website. While still at the [alpha](https://18f.gsa.gov/dashboard/stages/#alpha) stage, the focus of this project is to create a centralized location for government agencies to use and reuse design patterns in relation to the websites and applications they are building. It's a tremendous effort that I am proud to be a part of, with an incredibly dedicated team who is working hard to create accessible and reusable patterns to help guide agencies around government create beautiful websites and applications that are easy for everyone to use. - -And more recently, [Mark](https://twitter.com/drohyes) and I also worked on creating an updated release of ["Lightweight Django,"](http://shop.oreilly.com/product/0636920032502.do) which launched at the end of July. This new release includes an upgrade to Django 1.8.2 final, Django REST framework 3.1.3 and errata updates from our contributors (thank you!). It's pretty great to look back on last year when we were just finishing up the book. It's even better to see how much the community is enjoying it and how it has helped those wanting to learn more about Django! - -And while I am no longer one of the co-leaders for [Girl Develop It RDU](http://www.meetup.com/Girl-Develop-It-RDU/), I am still actively mentoring women who are, or are interested in, working in the software engineering field. Having not had many mentors myself, I find helping other women as my way of giving back, but also find that I am learning a lot about myself too. - -
-

@harrisj @juliaelman Julia it's okay to sleep sometimes or maybe eat some food

— Eric Mill (@konklone) July 22, 2015 -
- - -Yup. Busy. That is the one word I'd reply with when asked, "How are you doing, Julia?". Needless to say, I am happy and feeling very fulfilled these days. There is always more to come, things to learn and people to meet. It's a big part of why I love what I do and see myself doing so for a long time to come. diff --git a/_posts/2016-03-29-best-practices-accessibility.md b/_posts/2016-03-29-best-practices-accessibility.md deleted file mode 100644 index 63b880a..0000000 --- a/_posts/2016-03-29-best-practices-accessibility.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Best practices for building an accessible website using the Draft U.S. Web Design Standards -layout: external -external_url: https://18f.gsa.gov/2016/03/29/best-practices-for-building-an-accessible-website-using-the-draft-us-web-design-standards/ ---- \ No newline at end of file diff --git a/_posts/2017-03-21-nasas-journey-with-the-us-web-design-standards.md b/_posts/2017-03-21-nasas-journey-with-the-us-web-design-standards.md deleted file mode 100644 index ffed895..0000000 --- a/_posts/2017-03-21-nasas-journey-with-the-us-web-design-standards.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: NASA’s journey with the U.S. Web Design Standards -layout: external -external_url: https://18f.gsa.gov/2017/03/21/nasa-journey-with-us-web-design-standards/ ---- \ No newline at end of file diff --git a/_posts/2017-03-23-leaving-18F.md b/_posts/2017-03-23-leaving-18F.md deleted file mode 100644 index de4af79..0000000 --- a/_posts/2017-03-23-leaving-18F.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: post -title: Leaving 18F ---- - -![Julia Elman in front of the entrance to the West Wing, The White House](/assets/images/julia-elman-ww.jpg) - -In March 2015, I went to New York City to co-work with my new colleagues at the then-budding 18F NYC location (also referred to as "the beige"). We went out for lunch and talked about all our ideas for transforming government digital services and planting the seeds of change. - -I started my tenure at 18F by designing and building the infrastructure for two projects I’m incredibly proud of: the [U.S. Web Design Standards](https://standards.usa.gov/) and [Pulse](https://pulse.cio.gov/). Each of these projects helped make it more possible for U.S. government agencies to build usable, well-structured, and secure digital services They’ve ignited conversations about best practices for building web applications, and have become tools and guidelines for implementing impactful change far beyond 18F. Over 100 agencies have used the Standards on websites and applications. And since the launch of Pulse, HTTPS compliance has increased by 118 percent. I am so proud of this work and of the people I have had the privilege to work alongside on both these projects. - -And that's just the thing: it's the people throughout the federal government I have collaborated with, had virtual teas with, laughed, cried, and bonded with through these past few years that has made an impact on me in return. Working alongside these brave and kind individuals has reflected back to me my own bravery and driven home how much we, as technologists, are capable of doing. - -Today is my last day at 18F. And while I could use the metaphor of seeds of change, I feel like we accomplished more than just the planting. We built a forest, and it's denser and more full of life than I could have expected back when we were thinking about the seeds. diff --git a/_posts/2017-11-14-remote-design-culture.md b/_posts/2017-11-14-remote-design-culture.md deleted file mode 100644 index de4b03f..0000000 --- a/_posts/2017-11-14-remote-design-culture.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remote Designː How Zapier Is Building a Distributed Design Culture -layout: external -external_url: https://zapier.com/blog/remote-design-culture/ ---- diff --git a/_posts/2018-03-09-zapier-visual-identity.md b/_posts/2018-03-09-zapier-visual-identity.md deleted file mode 100644 index fa865fe..0000000 --- a/_posts/2018-03-09-zapier-visual-identity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Introducing the Zapier Visual Identityː How a Remote Design Team Created a New Brand Site in Six Months -layout: external -external_url: https://zapier.com/blog/remote-design-visual-identity/ ---- diff --git a/_posts/2019-04-17-user-centered-design-apis.md b/_posts/2019-04-17-user-centered-design-apis.md deleted file mode 100644 index bd1b5e2..0000000 --- a/_posts/2019-04-17-user-centered-design-apis.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Creating A User Centered Information Architecture On VA's Developer Portal -layout: external -external_url: https://adhoc.team/2019/04/17/lighthouse/ ---- diff --git a/_posts/2021-01-11-practicing-security-experience.md b/_posts/2021-01-11-practicing-security-experience.md deleted file mode 100644 index 1fa7ace..0000000 --- a/_posts/2021-01-11-practicing-security-experience.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: post -title: On practicing Security Experience ---- - -![What's the difference between viruses, trojans, worms, etc? It doesn't matter. It's all crap no one wants on their computer. Stop teaching users worthless information that they'll never use. Taylor Swift](/assets/images/swift-on-security.png) - -Image source: [@SwiftOnSecurity](https://twitter.com/SwiftOnSecurity) - -The practice of delivering online products and services is ever evolving. We are forced to move alongside the shifting tides of technology. In this changing of the tides, new features are created and implemented. How do these changes impact the security and privacy of users? This question brings up something I'd like to call "security experience". - -For a long while now, the role for maintaining the security and privacy of users has only been designated to Security Operations (SecOps), Site Reliability Engineers (SREs) and/or Engineering practices. These disciplines, and industries, have created [standards](https://www.nist.gov/) and [guidelines](https://pages.nist.gov/800-63-3/) that aim to keep in step with the ever changing landscape that is the web. Their role is meant to ensure that the online products and services are secure and have the users best interest in mind. - -Remove this idea from your brain. - -Security and privacy of users is everyone’s job and it should be something every person on your team is incorporating into their workflows. So, let's talk about what I mean when I specifically say "security experience". - -Security experience is the practice of visual designers, content writers and user researchers focusing on the best practices of the security and privacy experience of users. It is the doing of the work traditionally assigned to SecOps or SREs on a given team and incorporating those practices to create a usable, secure experience. - -Content is part of our daily experience while interacting with websites and applications. Whether it’s listening to a podcast or making a purchase online, content guides us through various processes and experiences that helps to establish understanding and trust with users. However, in my nearly two decades of experience as a software engineer content is the “thing” that gets changed the most frequently on the web. Let’s go over a specific example to help grok this concept a bit more. - -Let’s pretend that you have come to a website to create a new account for a subscription based service you’d like to start using. You start to fill out the form that says to enter the username you’d like to use. You decided to use your email address as your username, since it is easy for you to remember. You complete the account creation process and sign up for your subscription based service - yay! A few weeks into your subscription, you start receiving emails from various services that you have never subscribed to before. You find out that your email address for our account creation of your newly acquired service has shared your email address publicly. You then go to try to change your username, to find out that the username field is not changeable. Yikes! This all could have been prevented if there would have been content that clearly explained that your username would be public and not-changeable. - -So, you’ve read this far and maybe I’ve convinced you, and you are wondering how to get started. Here are three tips on how User Experience professionals can get make the shift in to Security Experience: - -1. **Learn about your products and/or services security and privacy practices.** Start breaking down the silo of UX and Security and learn about your product and/or service's security. This could look like grabbing a (virtual) coffee or tea with the folks on your team who practice security and privacy on your team. What do they find important? What does their day to day look like? It's also a great way to meet some super rad and smart people. I might be biased :) -2. **Join your team's security drills.** Most security teams run regular drills as a way to prepare. Join them! Be a fly on the wall and learn how they operate during an incident. This helps you to build empathy and learn how your team operates. It will also give you incentive to how and when users are alerted of incidents. -3. **ABTAS: Always be thinking about security.** ALWAYS. With products and/or services shifting to primarily being online, it's critical for us to ask ourselves in regards to the security of what we are designing, writing and/or researching. How would [x] feature impact the security and privacy of users? What can we do to help ensure we are building the best product possible? - -My hope in writing this is to start the conversation for the disciplines of visual design, content writing and user research to incorporate security into their practices. To do so is as irresponsible as creating in-accessible products and services. We hold this responsibility as people “making things on the internet” now more than ever. diff --git a/_posts/2021-03-02-security-is-everyones-job.md b/_posts/2021-03-02-security-is-everyones-job.md deleted file mode 100644 index b89ca7c..0000000 --- a/_posts/2021-03-02-security-is-everyones-job.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Security is Everyone’s Jobː Delivering Secure, Usable Login for Government -layout: external -external_url: https://digital.gov/2021/03/02/security-is-everyones-job-delivering-secure-usable-login-for-government/ ---- diff --git a/_posts/2021-03-20-skating-and-coding.md b/_posts/2021-03-20-skating-and-coding.md deleted file mode 100644 index 1443e73..0000000 --- a/_posts/2021-03-20-skating-and-coding.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: post -title: Skating and Coding ---- - -I recently watched the film [mid90s](https://en.wikipedia.org/wiki/Mid90s). And it got me thinking a lot about skating... and coding... and how the two relate to each other in my life. - -Skating was how I spent part of my Kansas high school summers. My friends and I would spend all day (and sometimes night), heading to different spots around town to skate. We all seemed to have a lot of freedom, with little to no supervision or adults telling us what to do. But we all knew what we wanted to do. We wanted to skate. - -When it came to skate sessions, there would usually be one trick we'd each be focusing on honing each time. Every skater would spend hours and hours (and sometimes days) focusing on the same trick. And while the challenge of learning the trick was our own, my friends and I would cheer each other on. Because we knew that all of the falls, bruises, scrapes were one step closer to landing that most sought after trick. - -Coding and open source work has also has had a similar path for me as skating did. Learning computer science is hard and takes a lot of trial and error to learn. For example, I remember trying to compile PIL (know known as [Pillow](https://pillow.readthedocs.io/en/stable/)) from source in order to get my local development environment running properly. This pre-dates [Homebrew](https://brew.sh/) and [pypi](https://pypi.org/) and was an INCREDIBLY frustrating task for a newb. But I did not give up. I kept trying and learning and banging on my keyboard until... I got it to work! I landed the trick. - -And what a feeling it is to land that trick. Seeing that prompt with zero ERROR returns, and 100% tests passing, exuded the same feeling as landing that front side grind I had been working on for weeks. - -Twenty plus years in, and I still love skating and coding. Because there will always be tricks to learn and land. And I know that I have a community around me to see me do it. - -Shout out the "The Pink Mafia", Dave, Greg, Jeff, Josh and Ron. Let's all go fishing and see you at Denny's. diff --git a/_posts/2021-05-12-in-the-moment.md b/_posts/2021-05-12-in-the-moment.md deleted file mode 100644 index b4530fb..0000000 --- a/_posts/2021-05-12-in-the-moment.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -layout: post -title: In the Moment ---- - -It was early summer 2011 and the dog needed a walk. I got my things together, strapped on my walking shoes and headed out for the usual loop through the neighborhood. - -I was about halfway through the loop when a young man coming from the opposite direction ran past me. I remember thinking to myself, "I really should start running again," and continued on my stroll with the dog. - -A few moments later, I heard a loud *thump* as if someone had tripped and fallen to the ground. I turned around and saw the jogger who had just passed me laying half on the sidewalk and half on the street. - -“Maybe that is his yard and he is resting on his lawn.” I thought. - -Suddenly, his back arched and his chest lifted off the ground. It was as if someone was pulling a string from the middle of his chest, trying to lift him up. I ran over. - -“Sir. Sir, are you okay?” - -His breathing was shallow. His eyes rolled back into his head and he had some cuts on his leg from the fall. He looked like he was in his late teens or early twenties. - -I called 911 from my cell. - -“911, what is your emergency.” - -“Yes, someone just collapsed on the pavement. His breathing is shallow... he was just running and... here, listen!” - -I held the phone up to his face so that the operator could hear his breathing pattern. - -“Okay, ma’am. You need to start doing chest compressions right now. I'll walk you through it.” - -I didn't even think twice. I tied the dog's leash around me and I started doing CPR. - -Just then, a tan suburban pulled up. - -“What happened? Is everything ok?”, said the driver. I didn't answer and kept focusing on what I was doing in the moment. - -The driver pulled over and came out of her car. She offered to watch my dog as I kept my focus on the compressions. - -1, 2, 3... 1, 2, 3... - -“Come on, kid. Come on.” I said aloud. - -I heard sirens in the distance and the neighbors starting to crowd around me. - -The emergency crew showed up, after what seemed an eternity. I remember someone placing a hand on my shoulder. - -“Ma'am, we'll take it from here." - -I stood up and walked backwards, staring as the rescue workers continued CPR. One of the neighbors knew who this young man was and went to tell his family. I gave a police officer my account of what happened. The young man thankfully hadn't hit his head in the fall and the rescue workers were doing all they could to save him. - -Then, his mother showed up. Stabs of fear tore through everyone's hearts when we heard her cries. - -The workers put the young man in an ambulance, now doing chest compressions with something called a thumper. One of the officers pointed me out to the young man's mother and stated that I was the person who had called 911. She hugged me with thanks and went off to follow the ambulance to the hospital. - -The crowd slowly disappeared as the ambulance sirens grew softer in the distance. The woman from the tan suburban offered to drive me home. I thanked her, but said at that moment I preferred to walk. She gave me her phone number and said to call her if I needed anything. The daylight started to dim and I walked back home with the dog. - -I barely slept or ate that night. I worried about what had happened to the young man from my walk. Was he okay? - -**** - -The next morning was very surreal and I anxiously worried about the outcome of the young man. I decided to call the police department to see if they knew what his condition was. - -"Yes, um. I was the officer on call last night. He passed away yesterday evening." - -My heart swallowed my insides, and then shot straight through my feet. I had a terrifying ache of loss and failure. - -I thanked the officer and hung up and called the lady with the tan suburban. She had been there with me and I felt the most connected to her at that moment. I told her the bad news. We cried and talked for a while longer. - -*** - -A week or so later, after scouring the obituaries in the local paper, I saw his name and a date for the funeral. I called the lady with the tan suburban, and we made plans to attend together to pay our respects. - -The day of the funeral was a beautiful, sunny day. There were hundreds of people at the service. You could tell he was deeply loved and had an amazing community surrounding him. At that moment, I felt this terrible feeling of guilt and grief. Why could I not have saved him? - -After the service, we went to give our condolences to the family. I was terrified. There was a very long processional and I didn't think we would get the chance to pay our respects. The lady I came with grabbed me by the arm and said, "You need to talk to them. Let's go." She pushed her way through the crowd and caught the parents, right before they were about to leave. - -"Excuse me, but this is the woman who called 911 and did CPR on your son. We were both there and came to pay our respects. We are sorry for your loss." - -I could not breathe. My entire body was dripping with fear. His father was in the car, telling his mother that they had to go. His mother leaned into the car to tell him who I was. - -Pure, utter, fear and sadness. What would they say to me? I didn't save their son and now he was gone. - -His father stepped out of the car. He looked at me for a moment. - -And then, I felt his arms around me in an embrace. Tears started streaming down my face. He wiped them away and I remember telling him how sorry I was, over and over again. They both said how grateful they were that someone had stopped to help their son and not left him there alone to die. At that moment, I experienced a wave of relief and love that flowed right through me. - -*** - -For some time afterwards, I still had a feeling of incredible guilt and sadness. How could this have happened to someone so loved, so promising and only twenty-two years old? What else could I have done to try to save him? - -What I have realized is this: I will never really know if I could have saved him. I do know that in order to respect his life, I need to enjoy every moment of mine. Taking the good with the bad, and appreciating those around me and the things that matter most. Things like spending time with close friends and family, enjoying nature, art, good food, conversation, music, and most of all... love. - -Random events such as mine can connect us closely to people we otherwise would never have known. Strangers become intertwined in our lives in an instant, and we become closer to them unlike anyone else. It is strange to me that it sometimes takes an event like mine to find the connections we have to each other and bring out the best in us. - -*** - -This post was [originally published on Medium](https://medium.com/this-happened-to-me/in-the-moment-ea95477e9d1b) on April 23, 2013. Jamal Lamar Martin was the name of the young man I posted about in this story. Here are some words printed about Jamal from his funeral program: - -*"He was 22 years old when he passed away and was attending college at Missouri Western in St. Joseph, MO in the Fall of 2007, where he declared his major in Art Studies. At the time of his passing he was diligently pursuing his degree at Longview Community College...[ ]"* - -*"Jamal had a heart that was geared to love, and negativity was as foreign to him as the thought that G0d does not exist. His ability to focus on the good in every person and every situation, was as effortless and natural as taking in the air we breathe. And that smile, of that smile, had to be part of his attire, because you never saw him and his face was not adorned by it. He had the spirit of a man that held the spirit of G0d."* diff --git a/assets/fonts/opensans-bold.ttf b/assets/fonts/opensans-bold.ttf deleted file mode 100755 index fd79d43..0000000 Binary files a/assets/fonts/opensans-bold.ttf and /dev/null differ diff --git a/assets/fonts/opensans-bold.woff b/assets/fonts/opensans-bold.woff deleted file mode 100755 index cfde444..0000000 Binary files a/assets/fonts/opensans-bold.woff and /dev/null differ diff --git a/assets/fonts/opensans-bold.woff2 b/assets/fonts/opensans-bold.woff2 deleted file mode 100755 index 83144d3..0000000 Binary files a/assets/fonts/opensans-bold.woff2 and /dev/null differ diff --git a/assets/fonts/opensans-italic.ttf b/assets/fonts/opensans-italic.ttf deleted file mode 100755 index c90da48..0000000 Binary files a/assets/fonts/opensans-italic.ttf and /dev/null differ diff --git a/assets/fonts/opensans-italic.woff b/assets/fonts/opensans-italic.woff deleted file mode 100755 index 9a09d12..0000000 Binary files a/assets/fonts/opensans-italic.woff and /dev/null differ diff --git a/assets/fonts/opensans-italic.woff2 b/assets/fonts/opensans-italic.woff2 deleted file mode 100755 index a220f36..0000000 Binary files a/assets/fonts/opensans-italic.woff2 and /dev/null differ diff --git a/assets/fonts/opensans-regular.ttf b/assets/fonts/opensans-regular.ttf deleted file mode 100755 index db43334..0000000 Binary files a/assets/fonts/opensans-regular.ttf and /dev/null differ diff --git a/assets/fonts/opensans-regular.woff b/assets/fonts/opensans-regular.woff deleted file mode 100755 index 39e9563..0000000 Binary files a/assets/fonts/opensans-regular.woff and /dev/null differ diff --git a/assets/fonts/opensans-regular.woff2 b/assets/fonts/opensans-regular.woff2 deleted file mode 100755 index 99bf3fb..0000000 Binary files a/assets/fonts/opensans-regular.woff2 and /dev/null differ diff --git a/assets/fonts/raleway-bold.ttf b/assets/fonts/raleway-bold.ttf deleted file mode 100755 index 38c099c..0000000 Binary files a/assets/fonts/raleway-bold.ttf and /dev/null differ diff --git a/assets/fonts/raleway-bold.woff b/assets/fonts/raleway-bold.woff deleted file mode 100755 index e494b45..0000000 Binary files a/assets/fonts/raleway-bold.woff and /dev/null differ diff --git a/assets/fonts/raleway-bold.woff2 b/assets/fonts/raleway-bold.woff2 deleted file mode 100755 index ff9b8a2..0000000 Binary files a/assets/fonts/raleway-bold.woff2 and /dev/null differ diff --git a/assets/fonts/raleway-medium.ttf b/assets/fonts/raleway-medium.ttf deleted file mode 100755 index 7a71a6f..0000000 Binary files a/assets/fonts/raleway-medium.ttf and /dev/null differ diff --git a/assets/fonts/raleway-medium.woff b/assets/fonts/raleway-medium.woff deleted file mode 100755 index a0bb711..0000000 Binary files a/assets/fonts/raleway-medium.woff and /dev/null differ diff --git a/assets/fonts/raleway-medium.woff2 b/assets/fonts/raleway-medium.woff2 deleted file mode 100755 index 22eb7bc..0000000 Binary files a/assets/fonts/raleway-medium.woff2 and /dev/null differ diff --git a/assets/images/2008-django-sprint-wol.jpg b/assets/images/2008-django-sprint-wol.jpg deleted file mode 100644 index 36df2ff..0000000 Binary files a/assets/images/2008-django-sprint-wol.jpg and /dev/null differ diff --git a/assets/images/2012teentechcamp.jpg b/assets/images/2012teentechcamp.jpg deleted file mode 100644 index df1ac40..0000000 Binary files a/assets/images/2012teentechcamp.jpg and /dev/null differ diff --git a/assets/images/2013teentechcamp-1.jpg b/assets/images/2013teentechcamp-1.jpg deleted file mode 100644 index 5f66f88..0000000 Binary files a/assets/images/2013teentechcamp-1.jpg and /dev/null differ diff --git a/assets/images/2013teentechcamp-2.jpg b/assets/images/2013teentechcamp-2.jpg deleted file mode 100644 index 06bb25d..0000000 Binary files a/assets/images/2013teentechcamp-2.jpg and /dev/null differ diff --git a/assets/images/2013teentechcamp-3.jpg b/assets/images/2013teentechcamp-3.jpg deleted file mode 100644 index e159fcb..0000000 Binary files a/assets/images/2013teentechcamp-3.jpg and /dev/null differ diff --git a/assets/images/2013teentechcamp-4.jpg b/assets/images/2013teentechcamp-4.jpg deleted file mode 100644 index 3b1674d..0000000 Binary files a/assets/images/2013teentechcamp-4.jpg and /dev/null differ diff --git a/assets/images/2013teentechcamp-5.jpg b/assets/images/2013teentechcamp-5.jpg deleted file mode 100644 index 6ecac51..0000000 Binary files a/assets/images/2013teentechcamp-5.jpg and /dev/null differ diff --git a/assets/images/2013teentechcamp-6.jpg b/assets/images/2013teentechcamp-6.jpg deleted file mode 100644 index c90a138..0000000 Binary files a/assets/images/2013teentechcamp-6.jpg and /dev/null differ diff --git a/assets/images/breakfast-in-bed-1897.jpg b/assets/images/breakfast-in-bed-1897.jpg deleted file mode 100644 index 27591bd..0000000 Binary files a/assets/images/breakfast-in-bed-1897.jpg and /dev/null differ diff --git a/assets/images/cosmonaut1.jpg b/assets/images/cosmonaut1.jpg deleted file mode 100644 index a91f0a0..0000000 Binary files a/assets/images/cosmonaut1.jpg and /dev/null differ diff --git a/assets/images/cosmonaut2.jpg b/assets/images/cosmonaut2.jpg deleted file mode 100644 index d8ae0ff..0000000 Binary files a/assets/images/cosmonaut2.jpg and /dev/null differ diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico deleted file mode 100644 index 6d0011c..0000000 Binary files a/assets/images/favicon.ico and /dev/null differ diff --git a/assets/images/fourofour.jpg b/assets/images/fourofour.jpg deleted file mode 100644 index 1c34fbe..0000000 Binary files a/assets/images/fourofour.jpg and /dev/null differ diff --git a/assets/images/julia-elman-gdirdu-teaching.jpg b/assets/images/julia-elman-gdirdu-teaching.jpg deleted file mode 100644 index dc05ea6..0000000 Binary files a/assets/images/julia-elman-gdirdu-teaching.jpg and /dev/null differ diff --git a/assets/images/julia-elman-ww.jpg b/assets/images/julia-elman-ww.jpg deleted file mode 100644 index fb0289a..0000000 Binary files a/assets/images/julia-elman-ww.jpg and /dev/null differ diff --git a/assets/images/julia-elman.jpg b/assets/images/julia-elman.jpg deleted file mode 100644 index b04afc5..0000000 Binary files a/assets/images/julia-elman.jpg and /dev/null differ diff --git a/assets/images/pacpie.png b/assets/images/pacpie.png deleted file mode 100644 index e41e361..0000000 Binary files a/assets/images/pacpie.png and /dev/null differ diff --git a/assets/images/pacpie.svg b/assets/images/pacpie.svg deleted file mode 100644 index e4ba4c3..0000000 --- a/assets/images/pacpie.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/assets/images/raspberrypi.jpg b/assets/images/raspberrypi.jpg deleted file mode 100644 index f7b160f..0000000 Binary files a/assets/images/raspberrypi.jpg and /dev/null differ diff --git a/assets/images/razzytails1.jpg b/assets/images/razzytails1.jpg deleted file mode 100644 index c3325f1..0000000 Binary files a/assets/images/razzytails1.jpg and /dev/null differ diff --git a/assets/images/razzytails2.jpg b/assets/images/razzytails2.jpg deleted file mode 100644 index 26dd603..0000000 Binary files a/assets/images/razzytails2.jpg and /dev/null differ diff --git a/assets/images/razzytails3.jpg b/assets/images/razzytails3.jpg deleted file mode 100644 index bc68356..0000000 Binary files a/assets/images/razzytails3.jpg and /dev/null differ diff --git a/assets/images/running-towards-sun.jpg b/assets/images/running-towards-sun.jpg deleted file mode 100644 index 67d8c38..0000000 Binary files a/assets/images/running-towards-sun.jpg and /dev/null differ diff --git a/assets/images/simplifying_django_fig_1.png b/assets/images/simplifying_django_fig_1.png deleted file mode 100644 index d79f107..0000000 Binary files a/assets/images/simplifying_django_fig_1.png and /dev/null differ diff --git a/assets/images/six-months-and-counting.jpg b/assets/images/six-months-and-counting.jpg deleted file mode 100644 index 7b8c5ab..0000000 Binary files a/assets/images/six-months-and-counting.jpg and /dev/null differ diff --git a/assets/images/splatspace-rpi-cases.jpg b/assets/images/splatspace-rpi-cases.jpg deleted file mode 100644 index 1ddec05..0000000 Binary files a/assets/images/splatspace-rpi-cases.jpg and /dev/null differ diff --git a/assets/images/swift-on-security.png b/assets/images/swift-on-security.png deleted file mode 100644 index 9232026..0000000 Binary files a/assets/images/swift-on-security.png and /dev/null differ diff --git a/assets/images/touch_icon.png b/assets/images/touch_icon.png deleted file mode 100644 index 6d0011c..0000000 Binary files a/assets/images/touch_icon.png and /dev/null differ diff --git a/assets/images/trinket-competition.gif b/assets/images/trinket-competition.gif deleted file mode 100644 index a76ae4a..0000000 Binary files a/assets/images/trinket-competition.gif and /dev/null differ diff --git a/assets/images/trinket-logo.png b/assets/images/trinket-logo.png deleted file mode 100644 index de5e0f0..0000000 Binary files a/assets/images/trinket-logo.png and /dev/null differ diff --git a/assets/images/trinket-sketches.jpg b/assets/images/trinket-sketches.jpg deleted file mode 100644 index b3261ba..0000000 Binary files a/assets/images/trinket-sketches.jpg and /dev/null differ diff --git a/assets/js/jquery-3.1.1.min.js b/assets/js/jquery-3.1.1.min.js deleted file mode 100644 index 4c5be4c..0000000 --- a/assets/js/jquery-3.1.1.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.1.1 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):C.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/[^\x20\t\r\n\f]+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R), -a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ka=/^$|\/(?:java|ecma)script/i,la={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};la.optgroup=la.option,la.tbody=la.tfoot=la.colgroup=la.caption=la.thead,la.th=la.td;function ma(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function na(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ma(l.appendChild(f),"script"),j&&na(g),c){k=0;while(f=g[k++])ka.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var qa=d.documentElement,ra=/^key/,sa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ta=/^([^.]*)(?:\.(.+)|)/;function ua(){return!0}function va(){return!1}function wa(){try{return d.activeElement}catch(a){}}function xa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)xa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=va;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(qa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,za=/\s*$/g;function Da(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Ea(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Fa(a){var b=Ba.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ga(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Aa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ia(f,b,c,d)});if(m&&(e=pa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ma(e,"script"),Ea),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ma(h),f=ma(a),d=0,e=f.length;d0&&na(g,!i&&ma(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ja(this,a,!0)},remove:function(a){return Ja(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.appendChild(a)}})},prepend:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ma(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!za.test(a)&&!la[(ja.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Ya(a,b,c,d,e){return new Ya.prototype.init(a,b,c,d,e)}r.Tween=Ya,Ya.prototype={constructor:Ya,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Ya.propHooks[this.prop];return a&&a.get?a.get(this):Ya.propHooks._default.get(this)},run:function(a){var b,c=Ya.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ya.propHooks._default.set(this),this}},Ya.prototype.init.prototype=Ya.prototype,Ya.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Ya.propHooks.scrollTop=Ya.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Ya.prototype.init,r.fx.step={};var Za,$a,_a=/^(?:toggle|show|hide)$/,ab=/queueHooks$/;function bb(){$a&&(a.requestAnimationFrame(bb),r.fx.tick())}function cb(){return a.setTimeout(function(){Za=void 0}),Za=r.now()}function db(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ba[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function eb(a,b,c){for(var d,e=(hb.tweeners[b]||[]).concat(hb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?ib:void 0)), -void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||r.find.attr;jb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=jb[g],jb[g]=e,e=null!=c(a,b,d)?g:null,jb[g]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function mb(a){var b=a.match(K)||[];return b.join(" ")}function nb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,nb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,nb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,nb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=nb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(nb(c))+" ").indexOf(b)>-1)return!0;return!1}});var ob=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ob,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:mb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ia.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,"$1"),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("