Compare commits

...

13 Commits
yapc ... master

Author SHA1 Message Date
Tocho Tochev 1cf6847d18 Add green screen support 2021-08-11 16:57:10 +03:00
Tocho Tochev aea60ac5a7 Change to OpenFest2021 2021-08-08 14:13:13 +03:00
Petko Bordjukov 5801f6581b
Merge pull request #2 from tochev/master
Modify interlude for OpenFest2020 and clarion
2020-11-14 19:52:22 +02:00
Tocho Tochev e411b8d037 Modify interlude for OpenFest2020 and clarion 2020-11-06 16:47:52 +02:00
Petko Bordjukov b6ae81d2e9 Merge pull request #1 from user890104/openfest-2016
Modify interlude for OpenFest 2016
2016-11-14 23:33:51 +02:00
Vencislav Atanasov c355c4c655 Modify interlude for OpenFest 2016 2016-11-04 16:51:20 +02:00
Petko Bordjukov e8f8632530 Remove debugging artifact 2015-08-12 21:23:52 +03:00
Petko Bordjukov 0dcfa7efa0 Merge branch 'ittour-json-export' 2015-08-12 21:18:35 +03:00
Petko Bordjukov dc11a85f41 Calculate end time from next event's start time 2015-08-12 21:17:46 +03:00
Petko Bordjukov baa7ec4b66 Update for VarnaConf 2015-08-12 21:17:43 +03:00
Petko Bordjukov d67539e16a Update the schedule 2015-08-12 21:03:48 +03:00
Petko Bordjukov cd3f9b93a7 Update for BurgasConf 2015 2015-07-04 19:19:52 +03:00
Petko Bordjukov 8e6238c014 Add missing check 2015-07-04 19:19:35 +03:00
5 changed files with 106 additions and 146 deletions

View File

@ -1,6 +1,6 @@
<html> <html>
<head> <head>
<title>The IT Tour</title> <title>OpenFest 2021</title>
<meta charset="utf-8"> <meta charset="utf-8">
@ -24,10 +24,12 @@
</div> </div>
</div> </div>
<video id="background_video" src="background.mp4" loop autoplay /> <!-- <video id="background_video" src="background.mp4" loop autoplay /> -->
<!-- TODO: fix display of speakers -->
<script id="agenda_template" type="text/ractive"> <script id="agenda_template" type="text/ractive">
<section id="agenda"> <section id="agenda">
<h3>{{room}}</h3>
<table class="reveal"> <table class="reveal">
<tbody> <tbody>
{{#pastEvents}} {{#pastEvents}}
@ -72,26 +74,26 @@
<script id="current_talk_template" type="text/ractive"> <script id="current_talk_template" type="text/ractive">
<section id="current_talk"> <section id="current_talk">
<h3>В момента</h3> <h4>В момента</h4>
<h1>{{currentEvent.title}}</h1> <h2>{{currentEvent.title}}</h2>
<p>{{currentEvent.description}}</p> <p>{{currentEvent.abstract}}</p>
</section> </section>
</script> </script>
<script id="speaker_template" type="text/ractive"> <script id="speaker_template" type="text/ractive">
<section> <section>
<h3>Лектор</h3> <h4>Лектор</h4>
<h1>{{name}}</h1> <h2>{{name}}</h2>
<p>{{description}}</p> <p>{{description}}</p>
</section> </section>
</script> </script>
<script id="next_talk_template" type="text/ractive"> <script id="next_talk_template" type="text/ractive">
<section id="next_talk"> <section id="next_talk">
<h3>Следва</h3> <h4>Следва</h4>
<h1>{{nextEvent.title}}</h1> <h2>{{nextEvent.title}}</h2>
<p>{{nextEvent.description}}</p> <p>{{nextEvent.abstract}}</p>
<h4>({{nextEvent.startTime.fromNow()}})</h4> <h5><i>({{nextEvent.startTime.from(now)}})</i></h5>
</section> </section>
</script> </script>
@ -122,20 +124,19 @@
</section> </section>
{{/eventCount}} {{/eventCount}}
<!-- <section> -->
<!-- <h1>Обратна връзка</h1> -->
<!-- <h2>http://bit.ly/burgasconf-2014-feedback</h2> -->
<!-- </section> -->
<section> <section>
<h1>#VarnaConf</h1> <h1>#OpenFest2021</h1>
<h2>В Twitter и IRC на irc.it-tour.bg</h2> <h2>в Twitter</h2>
<!-- <a class="twitter-timeline" href="https://twitter.com/search?q=%23BurgasConf" data-widget-id="466029214940925952">Tweets about "#BurgasConf"</a> -->
<!-- <script src="https://platform.twitter.com/widgets.js" id="twitter-wjs"></script> -->
</section> </section>
</script> </script>
<script type="text/javascript" src="ractive-init.js"></script> <script type="text/javascript" src="ractive-init.js"></script>
<script type="text/javascript" src="reveal-init.js"></script> <script type="text/javascript" src="reveal-init.js"></script>
<script type="text/javascript">
// use for green screen background
if ($.urlParam('background')) {
$('body').css('background-color', $.urlParam('background'));
}
</script>
</body> </body>
</html> </html>

BIN
logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -15,9 +15,12 @@ var reactive = new Ractive({
}); });
function refreshEvent() { function refreshEvent() {
schedule.update();
reactive.set({pastEvents: schedule.pastEvents(), reactive.set({pastEvents: schedule.pastEvents(),
currentEvent: schedule.currentEvent(), currentEvent: schedule.currentEvent(),
nextEvent: schedule.nextEvent(), nextEvent: schedule.nextEvent(),
futureEvents: schedule.futureEvents(), futureEvents: schedule.futureEvents(),
eventCount: schedule.allEvents().length}); eventCount: schedule.allEvents().length,
now: schedule.now(),
room: schedule.room()});
} }

View File

@ -1,16 +1,53 @@
function Schedule() { function Schedule(hallId, date, setPageTitle) {
var events = []; var events = [];
this.addEvent = function(event) { var apiEndpointPrefix = 'https://cfp.openfest.org/api/conferences/8';
events.push(event);
events = _.sortBy(events, function(event) { var pageTitle = 'OpenFest';
return event.startTime.unix() var room = '';
var nextLectureDelayMinutes = 4; // show the current lecture as next for the first N minutes
$.getJSON(apiEndpointPrefix + '/halls.json', function(data) {
room = data[hallId]['name']['bg'];
if (room === undefined) {
room = '';
}
});
this.update = function() {
$.getJSON(apiEndpointPrefix + '/events.json', function(eventsData) {
$.getJSON(apiEndpointPrefix + '/slots.json', function(slotsData) {
$.each(slotsData, function(slotId, slot) {
$.extend(eventsData[slot['event_id'].toString()], slot);
$.extend(eventsData[slot['event_id'].toString()], {"slotId": slotId});
});
var scheduleEvents = $.map(eventsData, function(event, eventId) {
event['id'] = eventId;
event['startTime'] = moment(event['starts_at']);
event['endTime'] = moment(event['ends_at']);
event['hallId'] = event['hall_id'];
if (event['startTime'].date() !== date) {
return null;
}
if (event['hallId'] !== hallId) {
return null;
}
return event;
});
events = scheduleEvents.sort(function (a,b) {return a['startTime'].isBefore(b['startTime']) ? -1 : 1});
});
}); });
this.setPageTitle();
} }
this.upcomingEvents = function() { this.upcomingEvents = function() {
var now = this.referenceTime();
return _.select(events, function(event) { return _.select(events, function(event) {
return event.startTime.isAfter(moment()); return event.startTime.isAfter(now);
}); });
} }
@ -20,8 +57,7 @@ function Schedule() {
this.currentEvent = function() { this.currentEvent = function() {
var latestEvent = _.last(this.pastEvents()); var latestEvent = _.last(this.pastEvents());
var nextEvent = this.nextEvent(); if (typeof(latestEvent) != 'undefined' && latestEvent.endTime.isAfter(this.now())) {
if (typeof nextEvent != 'undefined' && (latestEvent.displayNext || moment(nextEvent.startTime).subtract('minutes', 10).isAfter(moment()))) {
return latestEvent; return latestEvent;
} else { } else {
return undefined; return undefined;
@ -33,8 +69,9 @@ function Schedule() {
} }
this.pastEvents = function() { this.pastEvents = function() {
var now = this.referenceTime();
return _.select(events, function(event) { return _.select(events, function(event) {
return event.startTime.isBefore(moment()); return event.startTime.isBefore(now);
}); });
} }
@ -42,122 +79,38 @@ function Schedule() {
return events; return events;
} }
this.addDelay = function(time) { this.now = function() {
_.each(this.upcomingEvents(), function(event, index, agenda) { now = $.urlParam("now");
event.startTime.add(time); if (now) {
}); return moment(now);
} else {
return moment();
}
}
this.referenceTime = function() {
return this.now().subtract(nextLectureDelayMinutes, 'minutes');
}
this.room = function() {
return room;
}
this.setPageTitle = function() {
if (setPageTitle) {
$('title').text(pageTitle + " room=" + room + " date=" + date);
}
} }
} }
var schedule = new Schedule(); $.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null){
return null;
}
else{
return results[1] || 0;
}
}
schedule.addEvent({ var schedule = new Schedule(parseInt($.urlParam('roomId')), parseInt($.urlParam('date')), true);
title: 'Кафе',
startTime: moment({hour: 9, minute: 30})
});
schedule.addEvent({
title: 'Откриване',
startTime: moment({hour: 9, minute: 50})
});
schedule.addEvent({
title: 'Node.js and Open Source Software Development on Microsoft Azure',
startTime: moment({hour: 10}),
speakers: [
{
name: 'Михаил Матеев',
description: 'Михаил е разработчик в Infragistics. Работил е в различни области, свързани с технологии на Microsoft, като Silverlight, WPF, Windows Phone, Visual Studio LightSwitch, Windows Store приложения, WCF RIA Services, MS SQL Server и Microsoft Azure. През последните десет години, Михаил е писал статии за Computer World и различни блогове за .NET технологии. Той е сътрудник и технически редактор на PACKT Publishing and Wiley. Повече от пет години е работил в ESRI България. Няколко години Михаил е бил лектор в ФМИ на Софийския университет "Св. за Климент Охридски ". Също така е и преподавател по компютърни системи в Университет по Архитектура, Строителство и Геодезия в София.'
}
]
});
schedule.addEvent({
title: 'Редизайн на „държавата“ и препрограмиране на „системата“',
startTime: moment({hour: 11, minute: 10}),
speakers: [
{
name: 'Антон Стойчев',
description: 'Антон е прекарал последните 2 години във Великобритания, работейки като разработчик, предимно на саморегулиращи се системи за извличане и анализ на данни, достигащи на размер стотици сървъри на AWS. Сега е тук и иска да добави смисъл и желание за неизбежния, целодневен престой пред монитор; Чрез “Civic Hacking” нещо започващо с работещите в дигиталната сфера, но обхващащо всички други. Живее живота си майсторейки и обичайки, в опити за рисуване, писане, четене и прекарвайки часове в сглобяване на извинения за честите си пътувания.'
}
]
});
schedule.addEvent({
title: 'iOS Development - Tips & Tricks',
startTime: moment({hour: 12, minute: 10}),
speakers: [
{
name: 'Галин Кърджилов',
description: 'Галин е проактивен и творчески настроен софтуерен инженер с повече от 10 години опит. В момента е посветен на мобилните разработки и работи като Senior iOS Developer в MentorMate София. Неговият стремеж е да генерира максимално въздействие към потребителите.'
},
{
name: 'Стефан Цвятков',
description: 'Стефан е започнал кариерата си като разработчик за Mac. През 2008 г. Apple пуска iOS SDK и това е началото на една ера. Оттогава, той работи по създаването iOS приложения. В MentorMate той успява да изгради най-големия екип от iOS програмисти в България. Стефан е известен с желанието си да подобри мобилните приложения, за да бъдат по-интерактивни, ефективни и оптимизирани за нуждите на бизнеса.'
}
]
});
schedule.addEvent({
title: 'Обяд',
startTime: moment({hour: 12, minute: 40})
});
schedule.addEvent({
title: 'The Cloud Beyond the Buzzword',
startTime: moment({hour: 13, minute: 30}),
speakers: [
{
name: 'Божидар Божанов',
description: 'Божидар Божанов е програмист, а понякога и архитект. От скука е направил http://computoser.com - компютърен композитор, а друго негово хоби е лингвистиката. Притежател на "дебел" stackoverflow профил.'
}
]
});
schedule.addEvent({
title: 'Мета-програмиране с Nimrod',
startTime: moment({hour: 14, minute: 20}),
speakers: [
{
name: 'Захари Караджов',
description: 'Захари е C++ ветеран от гейм-индустрията, а понастоящем технически директор в Даркиум Студио, където с помощта на кофейн и CoffeeScript се разработва нов социално ориентиран уеб браузър. Твърдо убеден е, че използваните в момента езици за програмиране ще бъдат изместени от нови по-бързи, по-мощни и по-красиви такива и от нетърпение сам се е захванал да допринесе за това, участвайки в разработката на Nimrod.'
}
]
});
schedule.addEvent({
title: 'File editing on the client side (Javascript)',
startTime: moment({hour: 15, minute: 10}),
speakers: [
{
name: 'Росен Колев',
description: 'Росен работи като софтуерен разработчик повече от 5 години. В моментът е Senior .NET Developer в MentorMate Варна. Пише главно на .NET, C#, JavaScript и от време на време Objective-C. Обича добре подредед код и мрази лошата архитектура.'
}
]
});
schedule.addEvent({
title: 'Кафе пауза ☕',
startTime: moment({hour: 15, minute: 50})
});
schedule.addEvent({
title: 'Екстремно програмиране',
startTime: moment({hour: 16, minute: 10}),
speakers: [
{
name: 'Стефан Кънев',
description: 'Стефан се занимава с програмиране откакто се помни. Сред любимите му неща са Ruby, Vim, автоматизирани тестове, папийонки, Apple продуктите и всевъзможни екзотични езици за програмиране. В заетото си време програмира на Rails, а в свободното - води един-два курса във ФМИ към СУ, пише много код, който после трие и се опитва да не се нарани с планинското си колело. Никак не обича PHP и е амбивалентен към Java.'
}
]
});
schedule.addEvent({
title: 'Lightning Talks',
startTime: moment({hour: 17, minute: 00})
});
schedule.addEvent({
title: 'Закриване',
startTime: moment({hour: 18, minute: 00})
});

View File

@ -2,6 +2,7 @@ body {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
/* background-color: #06172A; */ /* BigBlueButton background */
} }
body, body,
@ -13,6 +14,8 @@ body,
.reveal h5, .reveal h5,
.reveal h6 { .reveal h6 {
font-family: "Roboto Condensed", tahoma, verdana, arial, sans-serif; font-family: "Roboto Condensed", tahoma, verdana, arial, sans-serif;
font-weight: bold;
-webkit-text-stroke: 0.01em black;
} }
#background_video { #background_video {