Skip to content

Commit

Permalink
Merge branch 'dbernar1-seventh-meetup'
Browse files Browse the repository at this point in the history
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
  • Loading branch information
yagudaev committed Aug 31, 2014
2 parents de16fe3 + a363631 commit 314c137
Show file tree
Hide file tree
Showing 28 changed files with 420 additions and 341 deletions.
8 changes: 1 addition & 7 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@

/**
* Module dependencies.
*/

var express = require('express'),
routes = require('./routes'),
http = require('http'),
path = require('path'),
ejs = require('ejs');
path = require('path');

var app = express();

app.configure(function(){
// change ejs delimiters to mustache style delimiters
ejs.open = '<%';
ejs.close = '%>';

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@
"start": "node app"
},
"dependencies": {
"ejs": "0.8.x",
"express": "3.0.0rc1",
"ejs": "0.8.x"
"lodash": "^2.4.1",
"meta-marked": "^0.3.1",
"moment": "^2.8.1"
}
}
Binary file added public/images/canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/createjs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/meteorjs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 11 additions & 1 deletion public/stylesheets/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,10 @@ footer {
}

#main {
padding: 10px 25px;
max-width: 1200px;
min-height: 75%;
margin: 0 auto;
padding: 10px 25px;
}

#main.index {
Expand Down Expand Up @@ -259,6 +261,7 @@ footer {
}

#main.events {
max-width: 800px;
}

#main.events img {
Expand Down Expand Up @@ -312,6 +315,7 @@ footer {
}

#main.resources {
max-width: 800px;
}

#main.resources h2.section{
Expand Down Expand Up @@ -366,3 +370,9 @@ div.transfer_link{
color: white;
}
}

.description .footnote {
border-top: 1px solid #ddd;
padding-top: 20px;
font-size: .9em;
}
67 changes: 51 additions & 16 deletions routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,47 @@ var EVENT_PAGE_NAME = 'event-page';
var EVENT_PRE_TITLE = "Event ";

var fs = require('fs'),
moment = require('moment'),
ejs = require('ejs'),
marked = require('meta-marked'),
extend = require('lodash').extend,
path = require('path');

ejs.filters.formatDate = function(date) {
if ('TBD' === date) {
return date;
} else {
return moment(date).format('h:mma ddd, MMMM Do, YYYY');
}
};

function isEventFile(filename) {
return '.md' === path.extname(filename);
}

function getEventData() {
var eventFiles = fs.readdirSync(__dirname + '/../views/events/').filter(isEventFile).reverse(),
event = {},
eventData = {};

eventFiles.forEach(function(eventFilename) {
event = getContentFor(eventFilename);
extend(event, event.meta);
event.isUpcoming = isAnUpcomingEvent(event);
eventData[event.slug] = event;
});

return eventData;
}

function isAnUpcomingEvent(event) {
return ! moment(event.date).isBefore(moment().format('YYYY-MM-DD'));
}

function getContentFor(eventFilename) {
return marked(fs.readFileSync(__dirname + '/../views/events/' + eventFilename, "utf8"));
}

/*
* GET home page.
*/
Expand All @@ -14,7 +53,7 @@ exports.index = function(req, res) {
};

exports.events = function(req, res) {
res.render('events/index', { title: 'Events', page: 'events', toDesktop: toDesktop(req) });
res.render('events/index', { title: 'Events', page: 'events', toDesktop: toDesktop(req), events: getEventData() });
};

exports.resources = function(req, res) {
Expand All @@ -30,29 +69,25 @@ exports.forum = function(req, res) {
};

exports.eventPage = function(req, res) {
// don't allow directory traversal
var page = 'events/' + req.params.date.replace(/\.\.|\./, ' ');
var eventData = getEventData();

// do not allow the layout page to be rendered by itself
if (page === 'events/layout' || page === 'events/index')
return res.status(404).render('404', { title: 'Page not Found 404', page: '404', toDesktop: toDesktop(req)});
if (req.params.date in eventData) {
var eventSlug = req.params.date,
event = getEventData()[eventSlug];

fs.exists(path.normalize(__dirname + '/../views/' + page + '.ejs'), function(exists) {
if (exists) {
res.render(page, { title: EVENT_PRE_TITLE + req.params.date, page: EVENT_PAGE_NAME, toDesktop: toDesktop(req)});
} else {
res.status(404).render('404', { title: 'Page not Found 404', page: '404', toDesktop: toDesktop(req)});
}
});

}
res.render('events/event', { title: EVENT_PRE_TITLE + req.params.date, page: EVENT_PAGE_NAME, toDesktop: toDesktop(req), event: event });
} else {
res.status(404).render('404', { title: 'Page not Found 404', page: '404', toDesktop: toDesktop(req)});
}
};

// Sets a cookie in the users browser specifying they or don't want the desktop interface (for mobile only).
// Not going to call any of the functions above as that would rely on none of them changing names later.
exports.setDesktop = function(req, res) {
var page = req.query.page;

if (page == null || page === '') {
if (!page) {
page = 'index';
}

Expand All @@ -65,7 +100,7 @@ exports.setDesktop = function(req, res) {
// set toDesktop cookie so subsequent pages know whether to render a desktop version for mobile or not
res.cookie('desktop_interface', req.query.to + '', {maxAge: 86400000});// day in milleseconds
res.render(page, { title: req.query.title, page: page, toDesktop: req.query.to == 'true' ? true : false});
}
};

// Checks if a desktop interface is requested (via a cookie)
function toDesktop(req){
Expand Down
31 changes: 31 additions & 0 deletions views/events/001-event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
date: "2012-09-26 18:00"
eventbrite: "http://www.eventbrite.com/event/4414239108?ref=elink"
location:
long:
- "1 Research Rd"
- "Winnipeg, MB R3T 6E3"
short: "UofM SmartPark - 2nd floor"
slug: sep-26-2012
synopsis:
- "We decided to do our first meeting about one of the hottest topics in the development world"
- "We will start with a quick introduction to Node.js and then go over a few uses of Node.js and when not to use it. We will then dive into a few popular frameworks and see what each is good for and which you should use for your projects. <a href=\"/events/sep-26-2012\">More</a>"
thumbAltText: Node.js
thumbnail: /images/nodejs-logo.jpg
title: "First Meetup: Intro to Node.js"
---

![Node.js](/images/nodejs-logo.jpg "Node.js")
We decided to do our first about one of the hottest topics in the web development world, Node.js.

We will start with a quick introduction to Node.js and then go over a few uses of Node.js and when not to use it. We will then dive into a few popular frameworks and see what each is good for and which you should use for your projects.

Note: the exact topics will be subject to change due to time and other considerations. If you have other ideas for talks, or want to tell us what we *must* cover contact us on twitter [@winnipegjs](http://www.twitter.com/winnipegjs).

Remeber to RSVP to the event if you are planning on attending. Hope to see you all there!

[Slides](http://www.winnipegjs.com/slides/meetup-1-intro-to-node.pptx)

[Source Code (github)](https://github.com/yagudaev/winnigram)

[Video (only first part of talk)](http://youtu.be/Rqxx7R_m1aQ)
47 changes: 47 additions & 0 deletions views/events/002-event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
date: "2012-10-30 18:00"
eventbrite: "http://www.eventbrite.com/event/4657304122"
location:
long:
- "1 Research Rd"
- "Winnipeg, MB R3T 6E3"
short: "UofM SmartPark - 2nd floor"
slug: oct-30-2012
synopsis:
- "Test Driven Development is software development methodology based on \"test first\" approach."
- "That means that before even writing a line of code we need to write a test for it."
- "The idea seems fine for languages like C# however what about Javascript? Javascript is quite a popular language (if not the most) so, are we condemned to test the UI every time I want to test my JS code? Why can't we do TDD with it?"
- "Of course we can! Join me on a session to discuss how to start with Jasmine, a JS library for testing in general, that provides great syntax to use TDD. I assure you your JS code will never be the same!"
thumbAltText: Jasmine
thumbnail: /images/jasmin-logo.png
title: "Second Meetup: Test Driven Development"
---

![Jasmine](/images/jasmin-logo.png "Jasmine")
Test Driven Development is software development methodology based on "test first" approach.

That means that before even writing a line of code we need to write a test for it.

Benefits of applying TDD includes:

* Increase development confidence
* Improve quality of the code and use quality as a driver
* Regression testing at any point
* Automatic documentation
* Bring back the joy of coding!

The idea seems fine for languages like C# however what about Javascript? Javascript is quite a popular language (if not the most) so, are we condemned to test the UI every time I want to test my JS code? Why can't we do TDD with it?

Of course we can! Join me on a session to discuss how to start with Jasmine, a JS library for testing in general, that provides great syntax to use TDD. I assure you your JS code will never be the same!

About the Speaker
-----------------

Amir Barylko started his career in 1994 working for IBM as a senior developer while he was finishing his Masters degree in computer science. Since then he worked as team leader and architect for the past 15 years.

Having started with languages like C++ and Java he spent many years coding in C# and training other developers in topics such domain modeling, abstractions, patterns, automation, dependency injection, testing, etc. Being an incurable geek, always thirsty for knowledge, his passion for technology moved him towards Ruby on Rails a few years ago, becoming an advocate of RoR web development. Also following he's teaching passion he did his first RoR training a year ago, and recently a TDD training with great reviews. Amir is a rare combination of high technical skills, lots of experience in a wide range of platforms, exceptional presentation skills and great sense of humor. His presentations are always rich in content and fun to attend.

What to Bring
-------------

If you wish to follow along you should bring your laptop with you and make sure you install Node.js. We will be using it to run the unit-tests during the presentation.
28 changes: 28 additions & 0 deletions views/events/003-event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
date: "2012-11-21 18:00"
eventbrite: "http://www.eventbrite.com/event/4841163049"
location:
long:
- "1 Research Rd"
- "Winnipeg, MB R3T 6E3"
short: "UofM SmartPark - 2nd floor"
slug: nov-21-2012
synopsis:
- "Phonegap is a platform that bridges the shortcomings of standard mobile web and native applications. It provides a standard API and tools to produce a compiled native application, while still using Javascript as our language of choice."
- "We will first discuss Mobile Web, see how far its come and see a simple demonstration of what it can do. Then, we will move onto Phonegap, what problems it solves, how it can be extended and some caveats of the platform."
thumbAltText: PhoneGap
thumbnail: /images/phonegap-logo.png
title: "Third Meetup: Phonegap - Cross Platform Mobile Development"
---

![PhoneGap](/images/phonegap-logo.png "PhoneGap")
Phonegap is a platform that bridges the shortcomings of standard mobile web and native applications. It provides a standard API and tools to produce a compiled native application, while still using Javascript as our language of choice.

Mobile device usage has grown at an incredible pace, both in developed and developing countries. The opportunities within this mobile space are huge, however, the fast differences between the environment and languages for each platform introduces many challenges. Mobile Web applications provide us with most of the tools and Phonegap gets us the rest of the way.

We will first discuss Mobile Web, see how far its come and see a simple demonstration of what it can do. Then, we will move onto Phonegap, what problems it solves, how it can be extended and some caveats of the platform.

About the Speaker
-----------------

Dan Slack ([@javaslack](https://twitter.com/javaslack)) has been working with Javascript for 8 years now. He currently works a small mobile-centric company, Niche Solutions, were he is working on mobile solutions for enterprise customers. He has both experince working on native level applications as well as using Phonegap.
26 changes: 26 additions & 0 deletions views/events/004-event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
date: "2013-02-20 18:00"
eventbrite: "http://www.eventbrite.com/event/5515131908"
location:
long:
- "1 Research Rd"
- "Winnipeg, MB R3T 6E3"
short: "UofM SmartPark - 2nd floor"
slug: feb-20-2013
synopsis:
- "CoffeeScript is a small language that compiles to Javascript that aims to solve many of the short comings of javascript (the bad parts). It makes it easier to write less code that does more in a simple and elegant way."
- "Kevin Quiring will be talking about CoffeeScript and how his team at Winnipeg Transit is using it to help them solve real problems."
thumbAltText: CoffeeScript
thumbnail: /images/coffeescript-logo.png
title: "Fourth Meetup: Introduction to CoffeeScript"
---

![CoffeeScript](/images/coffeescript-logo.png "CoffeeScript")
CoffeeScript is a small language that compiles to Javascript that aims to solve many of the short comings of javascript (the bad parts). It makes it easier to write less code that does more in a simple and elegant way.

Kevin Quiring will be talking about CoffeeScript and how his team at Winnipeg Transit is using it to help them solve real problems. Problems that would otherwise require nasty hacks if they were written in plain javascript. He will also touch base on the criticism around coffee and why you should use it in your next project.

About the Speaker
-----------------

Kevin Quiring is a passionate Ruby on Rails developer currently working for Winnipeg Transit.
19 changes: 19 additions & 0 deletions views/events/005-event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
date: "2014-05-12 19:00"
eventbrite: "https://www.eventbrite.ca/e/a-new-vision-tickets-11522416859"
location:
long:
- "355 Portage Ave"
- "Winnipeg, MB R3B 2C3"
short: "Canadian Tire Data Centre (In the Air Canada Building Downtown)"
slug: may-12-2014
synopsis:
- "Let's meetup again and bring this community back on track again. The JS related topic for this meetup is not yet determined and will be announced later but Adam Merrifield and Craig Haney from the Canadian Tire Innovations in Kitchener will talk about their vision for Winnipeg's developer community and Canadian Tire's new design studio."
- "Let's get together, share our experiences, catch up and have simply fun hanging out."
thumbAltText: "Canadian Tire"
thumbnail: "http://upload.wikimedia.org/wikipedia/en/thumb/1/13/Canadian_Tire_Logo.svg/189px-Canadian_Tire_Logo.svg.png"
title: "Fifth Meetup: A New Vision"
---

![Canadian Tire](http://upload.wikimedia.org/wikipedia/en/thumb/1/13/Canadian_Tire_Logo.svg/189px-Canadian_Tire_Logo.svg.png "Canadian Tire")
Let's meetup again and bring this community back on track again. The JS related topic for this meetup is not yet determined and will be announced later. Since Canadian Tire established their new data centre and design studio in Winnipeg, they have been planning to help build a stronger User Groups community and decided to join Winnipeg.js. At this meetup, Adam Merrifield and Craig Haney from the Canadian Tire Innovations in Kitchener will talk about their vision for Winnipeg's developer community and Canadian Tire's new design studio. There will probably be one or two speakers at the event presenting some JS related topics. If anybody would like to present something that is JS related, please let us know. You can contact us on Twitter or via email. We hope to see everybody again at this event ... share our experiences, catch up and have simply fun hanging out. And, of course, food and beverages will be provided, as always.
57 changes: 57 additions & 0 deletions views/events/006-event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
date: "2014-06-18 17:30"
eventbrite: "http://www.eventbrite.com/e/sixth-meetup-microsoft-3-javascript-intro-to-angular-and-breeze-tickets-11818823419"
location:
long:
- "374 Donald St"
- "Winnipeg, MB R3B 2J2"
short: SkullSpace
slug: jun-18-2014
synopsis:
- "This time we have two speakers: D'Arcy Lussier and Mike Sigsworth. At this event D'Arcy Lussier will tell us about Microsoft's new love for JavaScript and their support for open source JavaScript frameworks. Mike Sigsworth will show us how to develop applications using AngularJS, Breeze.js and Hot Towel."
thumbAltText: JavaScript
thumbnail: "http://upload.wikimedia.org/wikipedia/commons/9/99/Unofficial_JavaScript_logo_2.svg"
title: "Sixth Meetup: Microsoft <3 Javascript & Introduction to Angular and Breeze"
---

Of course, pizza and beverages will be provided, as always :-)

![Microsoft](http://img1.wikia.nocookie.net/__cb20130407135643/logopedia/images/4/44/Microsoft_logo.svg "Microsoft")
![JavaScript](http://upload.wikimedia.org/wikipedia/commons/9/99/Unofficial_JavaScript_logo_2.svg "JavaScript")
Microsoft <3 JavaScript
-----------------------
Microsoft has been typically seen as this big, evil, restrictive, prescriptive company that is entirely
anti-open source. But oh how the times have changed! Microsoft has embraced open source JavaScript frameworks
as part of their web stack, improved tooling support to better support JavaScript, and even made available
an object-oriented JavaScript library called TypeScript. In this session I'll walk you through the *new*
Microsoft and show you how they're being good neighbors in the JavaScript community.

### About the Speaker

D'Arcy Lussier is the Microsoft Practice Lead for Online Business Systems, a Winnipeg professional services
company. He brings over a decade of industry experience, specifically around Microsoft's web stack. Extremely
active in the developer community, D'Arcy has been involved with technology user groups for a number of years,
been awarded the Microsoft MVP award for ASP.NET for the last 8 years, started and ran the Winnipeg Code Camp,
and has run the Prairie Developer Conference since 2010 across the Canadian prairies.

Blog: [http://www.geekswithblogs.net/dlussier](http://www.geekswithblogs.net/dlussier)

Twitter: [darcy_lussier](http://twitter.com/darcy_lussier)

Site: [www.prairiedevcon.com](www.prairiedevcon.com)

<img src="http://www.breezejs.com/sites/all/themes/breeze/images/breeze_large.png" style="margin-top: 35px;">
![AngularJS](https://raw.githubusercontent.com/angular/angular.js/master/images/logo/AngularJS-Shield.exports/AngularJS-Shield-medium.png "AngularJS")

Introduction to Angular and Breeze
----------------------------------

Learn the fundamentals of AngularJS and watch as I build a sample application using AngularJS, Breeze.js,
and Hot Towel all within Visual Studio!

### About the Speaker

Mike Sigsworth is a consultant from Online Business Systems with over 7 years of experience working with
ASP.NET and C#. When he's not chasing around his two-year old son, he can be found in front of his laptop
working and/or playing with some manner of code, which has lately been a whole lot of Angular.

Loading

0 comments on commit 314c137

Please sign in to comment.