JavaSkop 2019
30 March 2019, Cineplexx, Skopje City Mall, Halls 5 & 6
starting at
08:30
Hall 6 | Hall 5
Agenda Hall 6 (To Hall 5)
Time | Talk | Presenter |
---|---|---|
8:00 - 9:00 | Registration | |
9:00 - 9:10 | Opening | |
9:10 - 9:50 | A deterministic way to run and test your applications with Testcontainers | Nikola Zivkov & Martin Ilievski |
Ever needed to install PostgreSQL, Redis, Elasticsearch, Kafka, and what not before being able to run the application on your dev environment? Your teammate has to do the same thing and then someone needs to repeat that on the CI server to allow integration tests to run. If only there was a way to skip this tedious process and just run your application without any hassle. Testcontainers provides a deterministic way of running and testing your applications. It automates the environment setup by leveraging Docker so you don’t need to do it manually, and spins up Docker containers for the duration of the integration tests and tears them down once the test execution has finished. | ||
9:50 - 10:10 | Coffee break | |
10:10 - 10:50 | Spring and Kotlin, is it a functional relationship? | Tomche Delev |
I want to show you how you can write your Spring applications more efficiently with expressive, short and readable code in Kotlin. This is all backed with experience in using Kotlin with Spring for more than two years. | ||
10:50 - 11:10 | Break | |
11:10 - 11:30 | Back in the days, developers used to write boilerplate code | Antonio Ivanovski |
Give a machine a code and you have solved one problem; teach a machine to code and you save yourself from lot of boilerplate code and testing. | ||
11:30 - 11:40 | Break | |
11:40 - 12:00 | JUnit: Revenge of the 5th | Martin Nachev |
JUnit is back with all-new features, ready to correct the mistakes of its predecessor. This presentation points out the major differences between JUnit 4 and JUnit 5 with focus on the novelties, and discusses the strategies for migrating from the former to the latter. | ||
12:00 - 13:00 | Lunch break | |
12:30 - 12:50 | Swagger Codegen for lazy developers | Viktor Kajtazov |
Live code session for developing client and server application using one single source (yaml) of truth. | ||
13:00 - 13:40 | Boilerhate - hate for boilerplate | Dejan Jankov |
Writing code is not hard. But writing correct code is a challenge. That involves a lot more work than the production of code itself. So we aim to minimize the amount of boilerplate code we write by applying various tools to our work, in order to decrease the time we spend on menial tasks and increase the time spent on business-impacting tasks. Code generation through annotation processor or the java.lang.reflect.Proxy can and does greatly help in achieving this goal. Ever wondered how Spring's @Transactional, @ConfigurationProperties or @Validated are applied? The presentation will explore the few ways of code generation in Java, and how Spring's BeanPostProcessor and relatives help in applying the code generation solutions automatically and on an application level. | ||
13:40 - 14:00 | Cofee and energy break | |
14:00 - 14:40 | Introduction to DDD, CQRS, and EventSourcing with Axon Framework | Milan Savić |
In this talk we'll tackle concepts of DDD (Domain-Drive Design), CQRS (Command Query Responsibility Segregation) and Event Sourcing. Later on, we'll show these concepts in practice using Axon Framework. | ||
14:40 - 15:00 | Break | |
15:00 - 15:40 | Architectural anti-patterns when delivering a software ecosystem with Kubernetes. | Laurentiu Spilca |
A full approach on Kubernetes with a live-coding presentation. | ||
15:40 - 16:00 | Break | |
16:00 - 16:40 | The eleventh hour | Panche Chavkovski |
The hour has come to switch to OpenJDK 11. | ||
16:40 - 17:00 | Closing and rewards | |
17:00 - 19:00 | Beer and Socializing |
Agenda Hall 5 (To Hall 6)
Time | Talk | Presenter |
---|---|---|
10:10 - 10:50 | Customer Driven Development | Mincho Tonev |
How nice would it be if you could address customer feedback before even releasing the product? Find out how the customers became part of our R&D process in vSphere Client! Come and see the tools we used and our success stories. | ||
10:50 - 11:10 | Break | |
11:10 - 11:30 | Confessions of a Senior Mind | Stojan Peshov |
I'd like to confess what it feels like to be a senior, everyday problems and challenges | ||
11:30 - 11:40 | Break | |
11:40 - 12:00 | OKRs for software engineers: A tool for personal and team growth. | Dragan Sahpaski |
The Objectives and Key Results (OKRs) tool, has been pioneered in Intel & Google and since publicized more in recent years it has been extensively used by companies and startups all over. It is an minimal but sufficient tool to get any team up to the pace of efficiency where 1+1 > 2. We will walk the audience through the OKR framework by presenting two OKR use-cases in a very interactive and visual manner and in just ~ 15 minutes they will grasp the basics of this powerful and life-changing framework. | ||
12:00 - 13:00 | Lunch break | |
12:30 - 12:50 | Not another UX presentation | Gjorgji Janevski |
The General idea of the presentation is presenting the different angle of how important is UX process in one current project. Showing the obstacles and difficulties in the development process if you do not research and settle right UX before you start with the work. | ||
13:00 - 13:40 | Continuous reliability | Dejan Dimitrovski |
Continuous Reliability - the key principle for success with agile. Join this session to tackle challenges and pitfalls in adoption of agile principles through real-life cases. Let’s talk how can the Continuous Reliability principle strengthen the software development process from planning, management execution, development, testing and delivery perspective, aligned to customer and request management, continuous integration, automated tests, and continuous delivery with highest level of stability. All through examples that reflect on team practices and cultural changes. | ||
13:40 - 14:00 | Coffee and energy break | |
14:00 - 14:40 | Front-end up front | Aleksandra Hristov |
The role of UX design and front-end engineering in planning and building more flexible and reusable components. | ||
14:40 - 15:00 | Break | |
15:00 - 15:40 | How we managed to make our office building, a smart office building. | Miki Jankov & Lazar Majstorchev |
What is a smart building? How do we make a building "smart" (or smart enough)? Let us discuss how we came up with the idea of a smart office building, what have we achieved, what showstoppers did we ran into and how did we handle them. |
Speakers
Nikola Zivkov
@nikolazivkov
Topic: A deterministic way to run and test your applications with Testcontainers
Gone are the days when your application consisted of just a web server and a database. The complexity of today’s applications is such that they need to persist their data in a variety of database stores (MongoDB, Cassandra), provide full text search capabilities (Elasticsearch), speak to other applications (RabbitMQ, Kafka) or simply interact with a third-party system over REST.
Setting up your local and CI environment with all these infrastructure services can be quite the challenge. Starting with the tedious process of manual setup, keeping the documentation up to date, OS and product version differences (“works on my machine” anyone?), the list of potential problems goes on and on.
Once we venture into integration testing, a different set of problems arise. Running your JPA queries against an H2 in-memory database is well supported but how do you make sure that your MongoDB or Elasticsearch queries work?
Testcontainers provides a deterministic way of running and testing your applications. It automates the environment setup by leveraging Docker so you don’t need to do it manually, and spins up Docker containers for the duration of the integration tests and tears them down once the test execution has finished. Out-of-the-box support is provided for well known RDBMS services (PostgreSQL, MySQL, MariaDB, etc.), Elasticsearch, Kafka, Webdriver, Localstack, etc but any third-party service can be wired-in by leveraging GenericContainer as base. Complex scenarios are supported through Testcontainer’s integration with Docker Compose.
Bio:
Nikola Zivkov is a Technology Line Manager for Java at Seavus. With more than 15 years of experience in building Java enterprise solutions, he’s passionate about building resilient architectures that can withstand the test of time (and crazy client demands). He’s been a member of the Macedonian JUG since the group’s second meeting.
Martin Ilievski
@martinmaxs
Topic: A deterministic way to run and test your applications with Testcontainers
Gone are the days when your application consisted of just a web server and a database. The complexity of today’s applications is such that they need to persist their data in a variety of database stores (MongoDB, Cassandra), provide full text search capabilities (Elasticsearch), speak to other applications (RabbitMQ, Kafka) or simply interact with a third-party system over REST.
Setting up your local and CI environment with all these infrastructure services can be quite the challenge. Starting with the tedious process of manual setup, keeping the documentation up to date, OS and product version differences (“works on my machine” anyone?), the list of potential problems goes on and on.
Once we venture into integration testing, a different set of problems arise. Running your JPA queries against an H2 in-memory database is well supported but how do you make sure that your MongoDB or Elasticsearch queries work?
Testcontainers provides a deterministic way of running and testing your applications. It automates the environment setup by leveraging Docker so you don’t need to do it manually, and spins up Docker containers for the duration of the integration tests and tears them down once the test execution has finished. Out-of-the-box support is provided for well known RDBMS services (PostgreSQL, MySQL, MariaDB, etc.), Elasticsearch, Kafka, Webdriver, Localstack, etc but any third-party service can be wired-in by leveraging GenericContainer as base. Complex scenarios are supported through Testcontainer’s integration with Docker Compose.
Bio:
Martin Ilievski is a Senior Developer at Seavus, technology geek and a frontend aficionado. He is an Oracle certified Java Master and holds a Bachelor's degree of Computer Science from FSCE. In his spare time, he enjoys coding, playing guitar, and eating pizza.
Tomche Delev
@tdelev
Topic: Spring and Kotlin, is it a functional relationship?
Spring Framework 5 introduced dedicated Kotlin support to ensure that Spring and Kotlin play well together. One of the key strengths of Kotlin is that it provides a very good interoperability with libraries written in Java. But there are ways to go even further and allow writing fully idiomatic Kotlin code when developing your next Spring application.
In the presentation I will cover the following:
- a very brief introduction to Kotlin
- how to write a minimal Spring Boot application using only Kotlin
- Kotlin plugins for Spring support
- JPA and data classes
- nullability support
- extension methods and more.
With many examples of code I will try to show you can write more expressive and functional applications in your favorite framework using the full power of Kotlin.
Bio:
Former TA at FINKI, with industry experience in start-up with great passion about sharing knowledge. Worked as developer and architect for ten years on business applications and personal projects in many different technologies and programming languages. Passionate about Java and JVM technologies, clean code, programming languages and from recently functional programming.
Antonio Ivanovski
Topic: Back in the days, developers used to write boilerplate code
Few of today most popular libraries like Dagger, AutoValue and ButterKniffe are made possible by the ability to generate code at compile time. In this talk I will touch on the basics of Annotation Processing and dive a bit deeper on code generation with JavaPoet.
Bio:
Working as Android Developer at Netcetera. Like to live on the edge by using latest and grea... not tested technologies. However, working mainly on serious banking related projects, this is not always possible. Because of this I have developed love for pet projects that allow me to experiment and go crazy.
Martin Nachev
Topic: JUnit: Revenge of the 5th
JUnit 4 might be considered the standard testing framework in Java, but since its release in 2006 not much has changed, as the framework neglected to provide ways to simplify testing or make it more flexible. Luckily, in 2017, a developer-friendly upgrade - JUnit 5 - was released with its main goals being to be both backwards and forwards compatible. JUnit 5 features include parallel and conditional test execution, tagging, nested tests, dynamic tests, repeated tests, parametrized tests, custom display names and more. Furthermore, with the new JUnit Platform, third-party test engines can be developed for other JVM languages. This presentation walks the audience through the JUnit 5 architecture, highlights the advantages over its predecessor, and covers the way to migrate from JUnit 4 to JUnit 5.
Bio:
Martin Nachev is an Oracle certified Java Knight with four years of experience in the battlefield. Martin is a clean code devotee and a fan of automation testing, hence the passion for unit testing. He is in constant search for improvement, thus he spends his spare time voraciously reading programming books and attending conferences. This time, he is walking onto stage as one of the presenters himself.
Gjorgji Janevski
Topic: Not another UX presentation
Across different plastic examples spectators should understand the importance of the UX process. Getting out and talking with clients and potential users is equal important as the development process of the product. The pillars of the project and its intuitive and usability perfection is also based on the UX process. UX is not a profession it is experience gathered with practice and research results. Basically you dont need UI if you understand in total the user needs, habits, daily routine etc.
Bio:
I’m graphic a designer from Skopje, Macedonia with more than 10+ years of experience. I cover large area of techniques and design software and love to explore design in every aspect of life. Currently focused on solving problems with interface and UX concept in Sorsix.
Viktor Kajtazov
Topic: Swagger Codegen for lazy developers
Live code session for developing client and server application using one single source (yaml) of truth.
Bio:
Viktor Kajtazov is 4 years experienced software engineer at Polar Cape. Has been working with several technologies and different software architectures. Passionate about clean code and scalable architectures.
Dejan Jankov
@dejanjankov
Topic: Boilerhate - hate for boilerplate
Writing code is not hard. But writing correct code is a challenge. That involves a lot more work than the production of code itself. So we aim to minimize the amount of boilerplate code we write by applying various tools to our work, in order to decrease the time we spend on menial tasks and increase the time spent on business-impacting tasks. Code generation through annotation processor or the java.lang.reflect.Proxy can and does greatly help in achieving this goal.
The presentation will explore the few ways of code generation in Java, and how Spring's BeanPostProcessor and relatives help in applying the code generation solutions automatically and on an application level. Ever wondered how Spring's @Transactional, @ConfigurationProperties or @Validated are applied? Will cover the ways in which Spring retrofits our code to add functionality on top of it like the mentioned transaction management, bean validation, and how we can use the same approach to develop similar solutions on our own. And will go through the annotation processing way of code generation again with a personal example, and open source projects like QueryDsl, Lombok, Dagger, MapStruct, and others.
Bio:
Dejan Jankov is a Certified Scrum Master. Besides not benefiting from this certification in any way, he is a full time developer and lead of a remote team. With more than 6 years of experience in building Java enterprise and Android applications, his interests span from talking requirement owners out of bad ideas to cooking, designing solutions and constant refactoring.
Milan Savić
@MilanSavic14
Topic: Introduction to DDD, CQRS, and EventSourcing with Axon Framework
DDD (Domain-Driven Design) offers a number of valuable architectural guardrails such as bounded contexts, domain events and sets a good base for CQRS (Command Query Responsibility Segregation). If we apply these architectural concepts wisely, they enable us to write a friendly, structured monolith that can be transformed into microservices in a controlled manner. The Axon Framework helps even more by providing a clean, location-transparent, event-driven way of implementing these architectural concepts.
In this talk, we will zoom in on this DDD/CQRS approach to evolutionary microservices with Axon. As part of the talk, there will be a live coding demo showing Axon in action. Join me to learn from each other new ways of dealing with software complexity!
Bio:
Milan Savić is a Software Engineer at AxonIQ. He has experience with various software projects ranging from chemical analyzers to contactless mobile payment systems. In some of those projects, CQRS and Event Sourcing came as a natural solution, but things had to be built from scratch almost every time. Finding out about AxonFramework got him interested in being a part of the solution. In March 2018 he joined AxonIQ team on a mission to build tools and frameworks which would help others in building event-driven, reactive systems.
Laurentiu Spilca
Topic: Architectural anti-patterns when delivering a software ecosystem with Kubernetes.
The link between the architecture and how to deploy a software environment is one of the most important factors that lead to a great result: a high available, fast accessible, reliable and easy to change software service. Let's discover through live-coding approach what the aspects and common pitfalls are when delivering your software with Kubernetes.
Bio:
Laurentiu Spilca is a dedicated development lead and trainer at Endava, where he is leading the development of a project in the financial market of European Nordic countries. He has over nine years of experience. Previously, he was a software developer building one of the biggest ERP solutions with worldwide installations. Laurentiu believes it’s important to not only deliver high-quality software but also share knowledge and help others to upskill, which has driven him to design and teach courses related to Java technologies and deliver presentations and workshops. Outside work, Laurentiu is passionate about traveling and scuba diving.
Panche Chavkovski
@hsilomedus
Topic: The eleventh hour
Have you chosen your JDK 11 flavor yet? No?
Learn what you need to do in order to get along with the new release train, and get your project up to date: what options are there, how painful the migration is, what can you do.
Also, the story is not over yet. Get a quick peek at what's coming next to JDK near you.
Bio:
Pance is a senior software engineer at Netcetera and one of the JUGMK leaders. He is a Java and IoT developer on daily basis, part-time hardware maker, and one of the team behind the codefu.mk coding competition. Every now and then, Pance blogs at pance.mk
Mincho Tonev
Topic: Customer Driven Development
How nice would it be if you could address customer feedback before even releasing the product?
Find out how the customers became part of our R&D process in vSphere Client!
Come and see the tools we used and our success stories.
While building the new vSphere Client, we were able to constantly gather feedback from our customers.
We were able to address many requests and bugs found on the customer environment.
The more we listened, the more customers continued to share.
They were willing to present their use-cases, environment and organization to make us see how our product fit their needs.
Bio:
Mincho is a Staff engineer in the company and one of the most successful product owners in the Vsphere UI team. He has significant impact on the vSphere Client quality and customer experience.
Stojan Peshov
@spesov
Topic: Confessions of a Senior Mind
I'd like to confess what it feels like to be a senior, maybe that would help juniors undestand us better. :) I'll try to briefly run over my everyday problems and challenges and see how much can the audience identify with it. It's tough to be a senior, but also fun at the same time.
Bio:
Stojan Peshov is Java developer with more than 10 years experience in web and back-end development. He has worked on a wide range of projects and business domains using open source libraries and frameworks such as Spring, Hibernate, Magnolia CMS, IceFaces, Hessian, RobotFramework, AngularJS, etc. As such, he has tasted different flavors of Java: JSP, JSF, JPA, JTA, CDI, as well as Test Automation, ETL, HTML5, Javascript and Web Services.
Dragan Sahpaski
@dragansah
Topic: OKRs for software engineers: A tool for personal and team growth.
Many of us are hands-on software engineers and it is often that we face challenges when working in a team or collaborating with few or many people. OKRs are a management tool which can be used from small individual teams to large and cascaded organizations. We will focus on small and nimble teams and even individuals managing themselves. The secret of 1+1 > 2 lies in good collaboration and what other better tool for software developers than one invented by engineers at Intel and pioneered by Google from when they were a 30 person team until today when they're still using it and perfecting it.
We will go through two interactive examples which are enough for understanding the basics and inspiring oneself to look more closely into OKRs. The advantages of OKRs will be obvious, even for the young audience which hasn't been yet introduced to management methods for better team work.
OKRs have been implemented in many Silicon Vally startups and other companies under the mentorship of John Doer (who also mentored Google) and have been vastly popularized in the past several years mainly with his book "Measure What Matters".
We will engage the audience with interactive examples and will give out copies of John Doer's book "Measure What Matters".
Bio:
Dragan is the CTO of Sorsix. Dragan has over fifteen years’ experience at all levels of software development, and in his current role is involved in establishment of standards for development and software project management at Sorsix.
Dejan Dimitrovski
@ddejan
Topic: Continuous reliability
Congratulations, you decided to adopt one of the agile methodologies. You have implemented the CI/CD workflow with boards, sprints, standups, and retrospectives with all the bells and whistles. So, what is wrong? Why are you still struggling with errors and unpredictable expectations? Maybe you think you are not agile enough or maybe there is a missing link in your CI/CD workflow. It is time to talk about Continuous Reliability - the key principle for success with agile. Join this session to tackle challenges and pitfalls in adoption of agile principles through real-life cases. Let’s talk how can the Continuous Reliability principle strengthen the software development process from planning, management execution, development, testing and delivery perspective, aligned to customer and request management, continuous integration, automated tests, and continuous delivery with highest level of stability. All through examples that reflect on team practices and cultural changes.
Bio:
Dejan Dimitrovski position himself as a trusted advisor to his clients and team members providing best business solutions with maximizing the usage of the technologies applying best practices. Always willing to share his dreams and visions, rising challenges and realizing opportunities into real-life solution. His best value is always to be dedicated and committed to achieve great business goals utilizing all available resources effectively.
Regular speaker on local and regional conferences and events covering topics on agile software development, best software development practices, service oriented and cloud-based solutions. As one of the founders on technical communities, he is constantly involved in all activities and events organized by the community.
He is Cloud addict, proud owner of many certificates and achievements who actively chase for interesting and attractive business adventures. He constantly improves his knowledge reading business and management books and articles. Besides that, he is passionate nature lover in a form of running, hiking and skiing.
Aleksandra Hristov
@alexhris
Topic: Front-end up front
Using pattern libraries to improve the communication between designers and developers and the importance of including the whole team and the client into the planning phase.
How to plan and build components that can be used in different contexts and within other components with examples from real projects. How we have used UX design principles to ease our front-end implementations with code examples using the latest CSS features and Angular.
Bio:
Aleksandra is a computer science engineer, currently working as a Senior UX designer and front-end developer in Netcetera, with about 10 years of professional experience. She has had talks about HTML/CSS, Responsive design, User Experience and Mobile app design within the company, at the events - Mobile Monday Macedonia, Digit, EESTEC Academy, MobileFirstMK, Front-end meetups at Skopje's Hacklab KIKA - and as a guest lecturer at the Faculty of Computer Science and Engineering.
Miki Jankov
@Miki_Mixajlo
Topic: How we managed to make our office building, a smart office building.
We'll discuss how we started the "IoT initiative" inside the company that we are currently working for, what are our plans and what have we achieved so far. Quick overview of the project(s) and the different technologies(software stack/hardware) involved in the project. We will continue with explaining what problems can we have while implementing a project like this in an existing building and what one should watch out for.
Bio:
JMiki is a senior software engineer at Intertec, currently working as a backend developer. He is a Java software engineer, embedded systems enthusiast and home automation hobbyist, trying to automate most of the tasks at home. Currently investing his free time in the "IoT smart villa" and trying to automate the office building that he is working at.
Lazar Majstorchev
Topic: How we managed to make our office building, a smart office building.
We'll discuss how we started the "IoT initiative" inside the company that we are currently working for, what are our plans and what have we achieved so far. Quick overview of the project(s) and the different technologies(software stack/hardware) involved in the project. We will continue with explaining what problems can we have while implementing a project like this in an existing building and what one should watch out for.
Bio:
Quality Assurance Engineer at Intertec - Product Development Company. In charge of the processes within the CI / CD pipeline. Striving for continuous delivery in an approach which incorporates the concepts of continuous integration, automated testing and continuous deployment. An IoT enthusiast, who loves hiking & mountain climbing.
How to post on jug.mk
Organized events
2023
Tech session #27
24 October 2023, Netaville
Tech session #26
26 September 2023, Netaville
Tech session #25
10 February 2023, Netaville
Tech session #24
30 January 2023, Netaville
2019
JavaSkop 2019
30 March 2019, Cineplexx, Skopje City Mall, Halls 5 & 6
2018
Tech session #23
11 May 2018, FINKI Amphitheatre
JavaSkop 2018
31 March 2018, Cineplexx, Skopje City Mall, Halls 5 & 6
Tech session #22
30 January 2018, FINKI Small Amphitheatre
2017
Tech session #21
09 November 2017, FINKI Small Amphitheatre
JavaSkop 2017
11 March 2017, Cineplexx, Skopje City Mall, Halls 5 & 6
Tech session #20
25 January 2017, FINKI Small Amphitheatre
2016
Tech session #19
20 October 2016, FINKI Small Amphitheatre
2015
JavaSkop 2015
13 December 2015, Cineplexx, Skopje City Mall, Halls 5 & 6
Tech session #18
04 November 2015, FINKI Small Amphitheatre
Tech talk by Endava #2
24 September 2015, Endava Offices, top floor
Tech talk by Endava
21 July 2015, Endava Offices, top floor
Tech session #17
25 March 2015, Broz Cafe (1-st) floor
2014
Java Day #4
22 November 2014, Cineplexx, Skopje city mall
Tech Session #16
30 September 2014, Club of Journalists (Клуб на новинари)
Tech Session #15
19 June 2014, PMF Building
Tech Session #14
26 February 2014, Club of Journalists (Клуб на новинари)
2013
Java Day #3
22 December 2013, Cineplexx, Skopje city mall
Tech Session #13
02 October 2013, FINKI
Java Day #2
23 February 2013, Skopje Fair
2012
Tech Session #12
06 June 2012, PMF Building
Tech Session #11
08 February 2012, FINKI
2011
10 years Eclipse Birthday Party
23 November 2011, Cafe Opera
Tech Session #10
05 October 2011, Club of Journalists (Клуб на новинари)
Java 7 Macedonia
20 July 2011, Skopje Fair Business Hall
Tech Session #9
20 April 2011, FEIT (Conference hall)
2010
Java Day #1
18 December 2010, EU Info Center
Tech Session #8
03 March 2010, FEIT (Conference hall)
2009
Tech Session #7
15 July 2009, FEIT (Conference hall)
Tech Session #6
17 June 2009, FEIT (211)
Tech Session #5
13 May 2009, ETF (Amphitheater)
Tech Session #4
08 April 2009, ETF (Amphitheater)
Tech Session #3
04 March 2009, ETF (Amphitheater)
Tech Session #2
26 January 2009, ETF (Conference hall)
2008
Tech Session #1
24 December 2008, ETF (Conference hall)
Tweets by @JavaUserGroupMK