Video and slides synchronized, mp3 and slide download available at http://bit.ly/YA0YEx.
Jesse Wilson introduces Dagger, a dependency injection framework for Java, covering the motivation behind its creation, examples on how to use it and some of the internal details. Filmed at qconsf.com.
Jesse Wilson develops apps and open source at Square. He's worked on Android, Gson, Guice, Guava, and Shush.
Fast dependency injection for Android applications.
Check my samples out:
https://github.com/rodrigohenriques/android-mvp-clean-architecture
https://github.com/rodrigohenriques/Dagger-2-Sample
Linkedin: https://br.linkedin.com/in/henriquesrodrigo
Антон Минашкин
Android разработчик с 5-летним стажем. Сейчас занимает должность Android Developer в GlobalLogic . Выступал на UA Mobile'14 , конференции "IT- ПЕРСПЕКТИВА" , Kyiv Android gathering , Android Dev Club и др . Cоорганизатор сообществ GDG Kremenchuk и IT Kremenchuk .
This document discusses dependency injection (DI) using Dagger 2 in Java. It begins by showing an example of code without DI and the issues that arise. It then introduces DI and how Dagger 2 implements it using annotations and compile-time validation. Key features of Dagger 2 are explained, including its API, scopes, lazy injection, providers, qualifiers, and use of generated code. The document emphasizes that Dagger 2 allows injecting dependencies into classes in a clean way and catches errors at compile time. It concludes by offering some guidance on what types of objects are good candidates for injection.
This document discusses Dagger 2, a Java dependency injection framework. It introduces dependency injection and its benefits, such as making code more modular and testable. It then discusses different dependency injection frameworks like Spring and Guice before focusing on Dagger 2. It describes how to use modules and components in Dagger 2. Finally, it discusses how Dagger 2 can be used for testing Android user interfaces by mocking dependencies and simulating different response scenarios.
Dependency Injection in Android with DaggerLope Emano
Dependency injection is a design pattern where dependencies or services are passed into dependent objects rather than dependent objects creating them. This loose coupling allows for flexible and modular code. Dagger is a dependency injection framework for Android that uses annotations like @Inject and @Provides to specify dependencies and instantiate them. It handles resolving dependencies and provides instances where needed.
This document discusses managing dependencies injection (DI) with Dagger2. It begins with a quiz on DI concepts. It then covers separating construction from usage, common DI libraries like Dagger1 and Dagger2, annotations used in Dagger like @Module and @Inject, an example pet project using Dagger2, scopes like @Singleton, named dependencies with @Named, and includes links to resources on DI and Dagger2.
The document discusses dependency injection and Dagger 2. It explains that dependency injection is a design pattern where dependencies are provided to classes rather than having classes create their own dependencies. Dagger 2 uses modules annotated with @Module to provide dependencies, with methods annotated with @Provides. Classes request dependencies using @Inject. A component provides a bridge between modules and injection points so they can work together. The document provides examples of using Dagger 2 to define modules that provide dependencies and inject them into classes.
Fast dependency injection for Android applications.
Check my samples out:
https://github.com/rodrigohenriques/android-mvp-clean-architecture
https://github.com/rodrigohenriques/Dagger-2-Sample
Linkedin: https://br.linkedin.com/in/henriquesrodrigo
Антон Минашкин
Android разработчик с 5-летним стажем. Сейчас занимает должность Android Developer в GlobalLogic . Выступал на UA Mobile'14 , конференции "IT- ПЕРСПЕКТИВА" , Kyiv Android gathering , Android Dev Club и др . Cоорганизатор сообществ GDG Kremenchuk и IT Kremenchuk .
This document discusses dependency injection (DI) using Dagger 2 in Java. It begins by showing an example of code without DI and the issues that arise. It then introduces DI and how Dagger 2 implements it using annotations and compile-time validation. Key features of Dagger 2 are explained, including its API, scopes, lazy injection, providers, qualifiers, and use of generated code. The document emphasizes that Dagger 2 allows injecting dependencies into classes in a clean way and catches errors at compile time. It concludes by offering some guidance on what types of objects are good candidates for injection.
This document discusses Dagger 2, a Java dependency injection framework. It introduces dependency injection and its benefits, such as making code more modular and testable. It then discusses different dependency injection frameworks like Spring and Guice before focusing on Dagger 2. It describes how to use modules and components in Dagger 2. Finally, it discusses how Dagger 2 can be used for testing Android user interfaces by mocking dependencies and simulating different response scenarios.
Dependency Injection in Android with DaggerLope Emano
Dependency injection is a design pattern where dependencies or services are passed into dependent objects rather than dependent objects creating them. This loose coupling allows for flexible and modular code. Dagger is a dependency injection framework for Android that uses annotations like @Inject and @Provides to specify dependencies and instantiate them. It handles resolving dependencies and provides instances where needed.
This document discusses managing dependencies injection (DI) with Dagger2. It begins with a quiz on DI concepts. It then covers separating construction from usage, common DI libraries like Dagger1 and Dagger2, annotations used in Dagger like @Module and @Inject, an example pet project using Dagger2, scopes like @Singleton, named dependencies with @Named, and includes links to resources on DI and Dagger2.
The document discusses dependency injection and Dagger 2. It explains that dependency injection is a design pattern where dependencies are provided to classes rather than having classes create their own dependencies. Dagger 2 uses modules annotated with @Module to provide dependencies, with methods annotated with @Provides. Classes request dependencies using @Inject. A component provides a bridge between modules and injection points so they can work together. The document provides examples of using Dagger 2 to define modules that provide dependencies and inject them into classes.
The document discusses MVVM and RxJava and how they work well together. It provides an overview of MVVM and RxJava concepts like streams, observables, and composability. It also discusses some mistakes made and lessons learned in implementing MVVM and RxJava in an app, as well as both the benefits and challenges of using RxJava. Code examples are provided to demonstrate RxJava functionality.
Với trên 10 năm hoạt động, hiện ASCI là đại diện tuyển sinh chính thức của hàng trăm trường Đại học, Cao đẳng và PTTH hàng đầu trên thế giới. Chúng tôi đã gửi hàng ngàn học sinh đi du học tại nhiều quốc gia như Anh, Úc, Mỹ, Canada, New Zealand, Tây Ban Nha, Đức, Pháp, Hàn Quốc, Nhật Bản… Tại ASCI, sinh viên được tư vấn miễn phí, hướng dẫn và hỗ trợ hoàn thiện các thủ tục hồ sơ du học chi tiết, đầy đủ và chính xác.
Lấy con người làm nòng cốt và duy trì thế mạnh về nghiên cứu, ASCI định hướng mọi nhân sự theo chuẩn mực đào tạo của tư vấn viên quốc tế. Mọi lời khuyên, tư vấn hay quyết định được đưa ra đều là kết quả của quá trình nghiên cứu bài bản và khoa học, giúp hỗ trợ toàn diện cho các khách hàng từ việc chuẩn bị hồ sơ thuận lợi đến việc xây dựng hành trang sự nghiệp vững chắc.
THÔNG TIN LIÊN HỆ
Hotline: 0948 531 133
HÀ NỘI: 12 Hoàng Cầu, Đống Đa - Điện thoại: 04.35381798 -
Email: hn@duhoctoancau.com
HẢI PHÒNG: 41 Trần Phú, Ngô Quyền - Điện thoại: 031.3565999 - Email: hp@duhoctoancau.com
TP. HỒ CHÍ MINH: 77 Điện Biên Phủ, P.Đa Kao, Quận 1 - Điện thoại: 0979.46.11.33 - Email: hcm@duhoctoancau.com
Opnunarfyrirlestur á Afmælisráðstefnu í Upplýsingafræði. 60 ár við Háskóla Íslands. 18. nóvember 2016 í Þjóðarbókhlöðu.
Fyrirlesturinn fjallar um opinn aðgang að útgefnum vísindagreinum og rannsóknargögnum. Rætt er um hvað það þýðir að vísindaefni sé í opnum aðgangi og hversvegna það skiptir máli fyrir almenning. Farið í mismunandi skilning fólks á hugmyndafræði opins aðgangs og hver munurinn er á opnum aðgangi og öðrum aðgangi.
Rætt um höfundarétt, afnotaleyfi og útgáfurétt á vísindagreinum, vísindatímarit og varðveislusöfn. Mismunandi útgáfu- og birtingarleiðir vísindaefnis eru kynntar. Skoðaður munurinn á gullnu útgáfuleiðinni og grænu birtingarleiðinni.
Listaðar upp þær hindranir sem íslenskir vísindamenn trúa að þeir standi frammi fyrir varðandi birtingar á vísindaefni í opnum aðgangi og rætt um stöðuna á Íslandi.
This document lists 10 websites that can be explored in 120 seconds or less and provides a shortened URL for viewing the accompanying presentation again. The 10 sites are belugalearning.com, geoguessr.com, mixlr.com, enercities.eu, gethopscotch.com, scootdoodle.com, blubbr.tv, projectnoah.org, popcorn.webmaker.org, and the presentation can be viewed again at j.mp/CPDmagic.
This document provides an overview of key PHP concepts including:
1) PHP requires statements to end with semicolons and supports different comment styles.
2) PHP supports scalar, compound, and special types like booleans, integers, strings, arrays, objects, resources and NULL.
3) Strings can be specified using single quotes, double quotes, heredoc, and nowdoc syntax. Variable names are expanded in double-quoted strings.
4) Arrays are ordered maps that can be created using array syntax or short array syntax, and elements accessed using square brackets.
International Branding is a very nice and important subject to pay attention to.
The subject is here for your consideration in the Persian Language (Farsi).
Hope you enjoy reading it.
“Product/market fit means being in a good market with a product that can satisfy that market.” - Marc Andreessen
This presentation depicts how you can understand product-market fit, how to define what a "good market" is, and how you can measure market satisfaction.
Read more: http://www.pappgab.com
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/39NIjLV.
Akhilesh Gupta does a technical deep-dive into how Linkedin uses the Play/Akka Framework and a scalable distributed system to enable live interactions like likes/comments at massive scale at extremely low costs across multiple data centers. Filmed at qconlondon.com.
Akhilesh Gupta is the technical lead for LinkedIn's Real-time delivery infrastructure and LinkedIn Messaging. He has been working on the revamp of LinkedIn’s offerings to instant, real-time experiences. Before this, he was the head of engineering for the Ride Experience program at Uber Technologies in San Francisco.
Next Generation Client APIs in Envoy MobileC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2x0Fav8.
Jose Nino guides the audience through the journey of Mobile APIs at Lyft. He focuses on how the team has reaped the benefits of API generation to experiment with the network transport layer. He also discusses recent developments the team has made with Envoy Mobile and the roadmap ahead. Filmed at qconlondon.com.
Jose Nino works as a Software Engineer at Lyft.
Software Teams and Teamwork Trends Report Q1 2020C4Media
The document discusses key trends in software teams and teamwork in 2020 according to a report by InfoQ. Some of the trends discussed include the sudden shift to remote work due to COVID-19, with many teams not fully prepared; the continued spread of agile practices to other areas of organizations beyond software development; and a growing focus on diversity, inclusion, and creating more humanistic and sustainable workplaces. The report aims to help technical leaders and individual contributors navigate these trends and challenges to improve team experiences and organizational success.
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2QCmmJ0.
Mark Stoodley examines some of the strengths and weaknesses of the different Java compilation technologies, if one was to apply them in isolation. Stoodley discusses how production JVMs are assembling a combination of these tools that work together to provide excellent performance across the large spectrum of applications written in Java and JVM based languages. Filmed at qconsf.com.
Mark Stoodley joined IBM Canada to build Java JIT compilers for production use and led the team that delivered AOT compilation in the IBM SDK for Java 6. He spent the last five years leading the effort to open source nearly 4.3 million lines of source code from the IBM J9 Java Virtual Machine to create the two open source projects Eclipse OMR and Eclipse OpenJ9, and now co-leads both projects.
Kafka is evolving to remove its dependency on Zookeeper. The Kafka Improvement Proposal 500 (KIP-500) aims to manage Kafka's metadata log with a self-managed Raft consensus algorithm and controller quorum rather than relying on Zookeeper. This will improve scalability, robustness, and make deployment easier. It will take multiple releases to fully implement KIP-500, beginning with removing Zookeeper from clients and ending with a release where Zookeeper is no longer required.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2SXXXiD.
Katharina Probst talks about what it means to act like an owner and why teams need ownership to be high-performing. When team members, regardless of whether they have a formal leadership role or not, act like owners, magical things can happen. She shares ideas that we can apply to our own work, and talks about how to recognize when we don’t live up to our own expectations of acting like an owner. Filmed at qconsf.com.
Katharina Probst is a Senior Engineering Leader, Kubernetes & SaaS at Google. Before this, she was leading engineering teams at Netflix, being responsible for the Netflix API, which helps bring Netflix streaming to millions of people around the world. Prior to joining Netflix, she was in the cloud computing team at Google, where she saw cloud computing from the provider side.
The document discusses MVVM and RxJava and how they work well together. It provides an overview of MVVM and RxJava concepts like streams, observables, and composability. It also discusses some mistakes made and lessons learned in implementing MVVM and RxJava in an app, as well as both the benefits and challenges of using RxJava. Code examples are provided to demonstrate RxJava functionality.
Với trên 10 năm hoạt động, hiện ASCI là đại diện tuyển sinh chính thức của hàng trăm trường Đại học, Cao đẳng và PTTH hàng đầu trên thế giới. Chúng tôi đã gửi hàng ngàn học sinh đi du học tại nhiều quốc gia như Anh, Úc, Mỹ, Canada, New Zealand, Tây Ban Nha, Đức, Pháp, Hàn Quốc, Nhật Bản… Tại ASCI, sinh viên được tư vấn miễn phí, hướng dẫn và hỗ trợ hoàn thiện các thủ tục hồ sơ du học chi tiết, đầy đủ và chính xác.
Lấy con người làm nòng cốt và duy trì thế mạnh về nghiên cứu, ASCI định hướng mọi nhân sự theo chuẩn mực đào tạo của tư vấn viên quốc tế. Mọi lời khuyên, tư vấn hay quyết định được đưa ra đều là kết quả của quá trình nghiên cứu bài bản và khoa học, giúp hỗ trợ toàn diện cho các khách hàng từ việc chuẩn bị hồ sơ thuận lợi đến việc xây dựng hành trang sự nghiệp vững chắc.
THÔNG TIN LIÊN HỆ
Hotline: 0948 531 133
HÀ NỘI: 12 Hoàng Cầu, Đống Đa - Điện thoại: 04.35381798 -
Email: hn@duhoctoancau.com
HẢI PHÒNG: 41 Trần Phú, Ngô Quyền - Điện thoại: 031.3565999 - Email: hp@duhoctoancau.com
TP. HỒ CHÍ MINH: 77 Điện Biên Phủ, P.Đa Kao, Quận 1 - Điện thoại: 0979.46.11.33 - Email: hcm@duhoctoancau.com
Opnunarfyrirlestur á Afmælisráðstefnu í Upplýsingafræði. 60 ár við Háskóla Íslands. 18. nóvember 2016 í Þjóðarbókhlöðu.
Fyrirlesturinn fjallar um opinn aðgang að útgefnum vísindagreinum og rannsóknargögnum. Rætt er um hvað það þýðir að vísindaefni sé í opnum aðgangi og hversvegna það skiptir máli fyrir almenning. Farið í mismunandi skilning fólks á hugmyndafræði opins aðgangs og hver munurinn er á opnum aðgangi og öðrum aðgangi.
Rætt um höfundarétt, afnotaleyfi og útgáfurétt á vísindagreinum, vísindatímarit og varðveislusöfn. Mismunandi útgáfu- og birtingarleiðir vísindaefnis eru kynntar. Skoðaður munurinn á gullnu útgáfuleiðinni og grænu birtingarleiðinni.
Listaðar upp þær hindranir sem íslenskir vísindamenn trúa að þeir standi frammi fyrir varðandi birtingar á vísindaefni í opnum aðgangi og rætt um stöðuna á Íslandi.
This document lists 10 websites that can be explored in 120 seconds or less and provides a shortened URL for viewing the accompanying presentation again. The 10 sites are belugalearning.com, geoguessr.com, mixlr.com, enercities.eu, gethopscotch.com, scootdoodle.com, blubbr.tv, projectnoah.org, popcorn.webmaker.org, and the presentation can be viewed again at j.mp/CPDmagic.
This document provides an overview of key PHP concepts including:
1) PHP requires statements to end with semicolons and supports different comment styles.
2) PHP supports scalar, compound, and special types like booleans, integers, strings, arrays, objects, resources and NULL.
3) Strings can be specified using single quotes, double quotes, heredoc, and nowdoc syntax. Variable names are expanded in double-quoted strings.
4) Arrays are ordered maps that can be created using array syntax or short array syntax, and elements accessed using square brackets.
International Branding is a very nice and important subject to pay attention to.
The subject is here for your consideration in the Persian Language (Farsi).
Hope you enjoy reading it.
“Product/market fit means being in a good market with a product that can satisfy that market.” - Marc Andreessen
This presentation depicts how you can understand product-market fit, how to define what a "good market" is, and how you can measure market satisfaction.
Read more: http://www.pappgab.com
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/39NIjLV.
Akhilesh Gupta does a technical deep-dive into how Linkedin uses the Play/Akka Framework and a scalable distributed system to enable live interactions like likes/comments at massive scale at extremely low costs across multiple data centers. Filmed at qconlondon.com.
Akhilesh Gupta is the technical lead for LinkedIn's Real-time delivery infrastructure and LinkedIn Messaging. He has been working on the revamp of LinkedIn’s offerings to instant, real-time experiences. Before this, he was the head of engineering for the Ride Experience program at Uber Technologies in San Francisco.
Next Generation Client APIs in Envoy MobileC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2x0Fav8.
Jose Nino guides the audience through the journey of Mobile APIs at Lyft. He focuses on how the team has reaped the benefits of API generation to experiment with the network transport layer. He also discusses recent developments the team has made with Envoy Mobile and the roadmap ahead. Filmed at qconlondon.com.
Jose Nino works as a Software Engineer at Lyft.
Software Teams and Teamwork Trends Report Q1 2020C4Media
The document discusses key trends in software teams and teamwork in 2020 according to a report by InfoQ. Some of the trends discussed include the sudden shift to remote work due to COVID-19, with many teams not fully prepared; the continued spread of agile practices to other areas of organizations beyond software development; and a growing focus on diversity, inclusion, and creating more humanistic and sustainable workplaces. The report aims to help technical leaders and individual contributors navigate these trends and challenges to improve team experiences and organizational success.
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2QCmmJ0.
Mark Stoodley examines some of the strengths and weaknesses of the different Java compilation technologies, if one was to apply them in isolation. Stoodley discusses how production JVMs are assembling a combination of these tools that work together to provide excellent performance across the large spectrum of applications written in Java and JVM based languages. Filmed at qconsf.com.
Mark Stoodley joined IBM Canada to build Java JIT compilers for production use and led the team that delivered AOT compilation in the IBM SDK for Java 6. He spent the last five years leading the effort to open source nearly 4.3 million lines of source code from the IBM J9 Java Virtual Machine to create the two open source projects Eclipse OMR and Eclipse OpenJ9, and now co-leads both projects.
Kafka is evolving to remove its dependency on Zookeeper. The Kafka Improvement Proposal 500 (KIP-500) aims to manage Kafka's metadata log with a self-managed Raft consensus algorithm and controller quorum rather than relying on Zookeeper. This will improve scalability, robustness, and make deployment easier. It will take multiple releases to fully implement KIP-500, beginning with removing Zookeeper from clients and ending with a release where Zookeeper is no longer required.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2SXXXiD.
Katharina Probst talks about what it means to act like an owner and why teams need ownership to be high-performing. When team members, regardless of whether they have a formal leadership role or not, act like owners, magical things can happen. She shares ideas that we can apply to our own work, and talks about how to recognize when we don’t live up to our own expectations of acting like an owner. Filmed at qconsf.com.
Katharina Probst is a Senior Engineering Leader, Kubernetes & SaaS at Google. Before this, she was leading engineering teams at Netflix, being responsible for the Netflix API, which helps bring Netflix streaming to millions of people around the world. Prior to joining Netflix, she was in the cloud computing team at Google, where she saw cloud computing from the provider side.
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2T04Lw4.
Sergey Kuksenko talks about the performance benefits inline types bring to Java and how to exploit them. Inline/value types are the key part of experimental project Valhalla, which should bring new abilities to the Java language. Filmed at qconsf.com.
Sergey Kuksenko is a Java Performance Engineer at Oracle working on a variety of Java and JVM performance enhancements. He started working as Java Engineer in 1996 and as Java Performance Engineer in 2005. He has had a passion for exploring how Java works on modern hardware.
Do you need service meshes in your tech stack?
This on-line guide aims to answer pertinent questions for software architects and technical leaders, such as: what is a service mesh?, do I need a service mesh?, how do I evaluate the different service mesh offerings? In software architecture, a service mesh is a dedicated infrastructure layer for facilitating service-to-service communications between microservices, often using a sidecar proxy.
The document discusses Cloud Native CI/CD and the Tekton project. It begins with an overview of cloud native concepts like containers, Kubernetes, and microservices. It then defines characteristics of cloud native CI/CD like being serverless, using open standards, reusable components, and config as code. The document introduces Tekton as a cloud native CI/CD building block on Kubernetes that uses custom resources for tasks, pipelines, triggers and more. It highlights a demo of Tekton before concluding with the project's roadmap and how to get involved.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2S7lDiS.
Sasha Rosenbaum shows how a CI/CD pipeline for Machine Learning can greatly improve both productivity and reliability. Filmed at qconsf.com.
Sasha Rosenbaum is a Program Manager on the Azure DevOps engineering team, focused on improving the alignment of the product with open source software. She is a co-organizer of the DevOps Days Chicago and the DeliveryConf conferences, and recently published a book on Serverless computing in Azure with .NET.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/36epVKg.
Todd Montgomery discusses the techniques and lessons learned from implementing Aeron Cluster. His focus is on how Raft can be implemented on Aeron, minimizing the network round trip overhead, and comparing single process to a fully distributed cluster. Filmed at qconsf.com.
Todd Montgomery is a networking hacker who has researched, designed, and built numerous protocols, messaging-oriented middleware systems, and real-time data systems, done research for NASA, contributed to the IETF and IEEE, and co-founded two startups. He currently works as an independent consultant and is active in several open source projects.
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2FWc5Sk.
Ben Sigelman talks about "Deep Systems", their common properties and re-introduces the fundamentals of control theory from the 1960s, including the original conceptualizations of Observability & Controllability. He uses examples from Google & other companies to illustrate how deep systems have damaged people's ability to observe software, and what needs to be done in order to regain control. Filmed at qconsf.com.
Ben Sigelman is a co-founder and the CEO at LightStep, a co-creator of Dapper (Google’s distributed tracing system), and co-creator of the OpenTracing and OpenTelemetry projects (both part of the CNCF). His work and interests gravitate towards observability, especially where microservices, high transaction volumes, and large engineering organizations are involved.
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
This document discusses machine learning in the browser using Tensorflow.js. It begins with an introduction and overview of Tensorflow.js, including how it can be used for both authoring models and importing pre-trained models for inference. Examples are provided of using the Ops API to fit a polynomial function and the Layers API to build and train an autoencoder in the browser. Challenges of developing machine learning applications in the browser are also discussed.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2s9T3Vl.
Colin Eberhardt looks at some of the internals of WebAssembly, explores how it works “under the hood”, and looks at how to create a (simple) compiler that targets this runtime. Filmed at qconsf.com.
Colin Eberhardt is the Technology Director at Scott Logic, a UK-based software consultancy where they create complex application for their financial services clients. He is an avid technology enthusiast, spending his evenings contributing to open source projects, writing blog posts and learning as much as he can.
User & Device Identity for Microservices @ Netflix ScaleC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2S9tOgy.
Satyajit Thadeshwar provides useful insights on how Netflix implemented a secure, token-agnostic, identity solution that works with services operating at a massive scale. He shares some of the lessons learned from this process, both from architectural diagrams and code. Filmed at qconsf.com.
Satyajit Thadeshwar is an engineer on the Product Edge Access Services team at Netflix, where he works on some of the most critical services focusing on user and device authentication. He has more than a decade of experience building fault-tolerant and highly scalable, distributed systems.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2Ezs08q.
Justin Ryan talks about Netflix’ scalability issues and some of the ways they addressed it. He shares successes they’ve had from unintuitively partitioning computation into multiple services to get better runtime characteristics. He introduces us to useful probabilistic data structures, innovative bi-directional data passing, open-source projects available from Netflix that make this all possible. Filmed at qconsf.com.
Justin Ryan is Playback Edge Engineering at Netflix. He works on some of the most critical services at Netflix, specifically focusing on user and device authentication. Years of building developer tools has also given him a healthy set of opinions on developer productivity.
Make Your Electron App Feel at Home EverywhereC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2Z4ZJjn.
Kilian Valkhof discusses the process of making an Electron app feel at home on all three platforms: Windows, MacOS and Linux, making devs aware of the pitfalls and how to avoid them. Filmed at qconsf.com.
Kilian Valkhof is a Front-end Developer & User-experience Designer at Firstversionist. He writes about various topics, from design to machine learning, on his personal website, kilianvalkhof.com and is a frequent contributer to open source software. He is part of the Electron governance team that oversees the development of the Electron framework.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/344PnB1.
Steve Klabnik goes over the deep details of how async/await works in Rust, covering concepts like coroutines, generators, stack-less vs stack-ful, "pinning", and more. Filmed at qconsf.com.
Steve Klabnik is on the core team of Rust, leads the documentation team, and is an author of "The Rust Programming Language." He is a frequent speaker at conferences and is a prolific open source contributor, previously working on projects such as Ruby and Ruby on Rails.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2OUz6dt.
Chris Riccomini talks about the current state-of-the-art in data pipelines and data warehousing, and shares some of the solutions to current problems dealing with data streaming and warehousing. Filmed at qconsf.com.
Chris Riccomini works as a Software Engineer at WePay.
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
The document discusses testing infrastructure as code using automated tests. It recommends writing unit tests to test individual components in isolation by deploying real infrastructure, validating it works through methods like HTTP requests or API calls, and then undeploying it. The document provides an example of using Terratest to write a unit test for a Terraform module that deploys a "Hello World" web app. It shows how to build and deploy the infrastructure, validate it works by making an HTTP request, and clean it up after the test.
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/temporal-event-neural-networks-a-more-efficient-alternative-to-the-transformer-a-presentation-from-brainchip/
Chris Jones, Director of Product Management at BrainChip , presents the “Temporal Event Neural Networks: A More Efficient Alternative to the Transformer” tutorial at the May 2024 Embedded Vision Summit.
The expansion of AI services necessitates enhanced computational capabilities on edge devices. Temporal Event Neural Networks (TENNs), developed by BrainChip, represent a novel and highly efficient state-space network. TENNs demonstrate exceptional proficiency in handling multi-dimensional streaming data, facilitating advancements in object detection, action recognition, speech enhancement and language model/sequence generation. Through the utilization of polynomial-based continuous convolutions, TENNs streamline models, expedite training processes and significantly diminish memory requirements, achieving notable reductions of up to 50x in parameters and 5,000x in energy consumption compared to prevailing methodologies like transformers.
Integration with BrainChip’s Akida neuromorphic hardware IP further enhances TENNs’ capabilities, enabling the realization of highly capable, portable and passively cooled edge devices. This presentation delves into the technical innovations underlying TENNs, presents real-world benchmarks, and elucidates how this cutting-edge approach is positioned to revolutionize edge AI across diverse applications.
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
5th LF Energy Power Grid Model Meet-up SlidesDanBrown980551
5th Power Grid Model Meet-up
It is with great pleasure that we extend to you an invitation to the 5th Power Grid Model Meet-up, scheduled for 6th June 2024. This event will adopt a hybrid format, allowing participants to join us either through an online Mircosoft Teams session or in person at TU/e located at Den Dolech 2, Eindhoven, Netherlands. The meet-up will be hosted by Eindhoven University of Technology (TU/e), a research university specializing in engineering science & technology.
Power Grid Model
The global energy transition is placing new and unprecedented demands on Distribution System Operators (DSOs). Alongside upgrades to grid capacity, processes such as digitization, capacity optimization, and congestion management are becoming vital for delivering reliable services.
Power Grid Model is an open source project from Linux Foundation Energy and provides a calculation engine that is increasingly essential for DSOs. It offers a standards-based foundation enabling real-time power systems analysis, simulations of electrical power grids, and sophisticated what-if analysis. In addition, it enables in-depth studies and analysis of the electrical power grid’s behavior and performance. This comprehensive model incorporates essential factors such as power generation capacity, electrical losses, voltage levels, power flows, and system stability.
Power Grid Model is currently being applied in a wide variety of use cases, including grid planning, expansion, reliability, and congestion studies. It can also help in analyzing the impact of renewable energy integration, assessing the effects of disturbances or faults, and developing strategies for grid control and optimization.
What to expect
For the upcoming meetup we are organizing, we have an exciting lineup of activities planned:
-Insightful presentations covering two practical applications of the Power Grid Model.
-An update on the latest advancements in Power Grid -Model technology during the first and second quarters of 2024.
-An interactive brainstorming session to discuss and propose new feature requests.
-An opportunity to connect with fellow Power Grid Model enthusiasts and users.
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...Jason Yip
The typical problem in product engineering is not bad strategy, so much as “no strategy”. This leads to confusion, lack of motivation, and incoherent action. The next time you look for a strategy and find an empty space, instead of waiting for it to be filled, I will show you how to fill it in yourself. If you’re wrong, it forces a correction. If you’re right, it helps create focus. I’ll share how I’ve approached this in the past, both what works and lessons for what didn’t work so well.
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving
Manufacturing custom quality metal nameplates and badges involves several standard operations. Processes include sheet prep, lithography, screening, coating, punch press and inspection. All decoration is completed in the flat sheet with adhesive and tooling operations following. The possibilities for creating unique durable nameplates are endless. How will you create your brand identity? We can help!
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor IvaniukFwdays
At this talk we will discuss DDoS protection tools and best practices, discuss network architectures and what AWS has to offer. Also, we will look into one of the largest DDoS attacks on Ukrainian infrastructure that happened in February 2022. We'll see, what techniques helped to keep the web resources available for Ukrainians and how AWS improved DDoS protection for all customers based on Ukraine experience
The Microsoft 365 Migration Tutorial For Beginner.pptxoperationspcvita
This presentation will help you understand the power of Microsoft 365. However, we have mentioned every productivity app included in Office 365. Additionally, we have suggested the migration situation related to Office 365 and how we can help you.
You can also read: https://www.systoolsgroup.com/updates/office-365-tenant-to-tenant-migration-step-by-step-complete-guide/
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
Dagger: A Fast Dependency Injector for Android and Java
1. Jesse Wilson from Square
Dagger
A fast dependency injector
for Android and Java.
Thursday, November 8, 12
2. Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/Dagger
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
3. Presented at QCon San Francisco
www.qconsf.com
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
4. Introduction
Motivation
Using Dagger
Inside Dagger
Wrapping Up
Thursday, November 8, 12
11. (cc) creative commons from flickr.com/photos/getbutterfly/6317955134/
Thursday, November 8, 12
12. (cc) creative commons from flickr.com/photos/wikidave/2988710537/
Thursday, November 8, 12
13. We still love you,
Froyo
•Eager vs. lazy graph construction
•Reflection vs. codegen
Thursday, November 8, 12
14. “I didn’t really expect anyone to use
[git] because it’s so hard to use, but
that turns out to be its big appeal.
No technology can ever be too
arcane or complicated for the black
t-shirt crowd.”
–Linus Torvalds
typicalprogrammer.com/?p=143
Thursday, November 8, 12
16. (cc) creative commons from flickr.com/photos/mike_miley/5969110684/
Thursday, November 8, 12
17. CoffeeApp
•Know everything at CoffeeMaker
build time.
•Easy to see how Pump
dependencies are Thermosiphon
used & satisfied Heater
Thursday, November 8, 12
18. Motivation for
Dagger
•It's like Guice, but with speed
instead of features
also...
•Simple
•Predictable
Thursday, November 8, 12
19. Introduction
Motivation
Using Dagger
Inside Dagger
Wrapping Up
Thursday, November 8, 12
22. DAGger.
Directed
Acyclic
Graph
Thursday, November 8, 12
23. (cc) creative commons from flickr.com/photos/uscpsc/7894303566/
Thursday, November 8, 12
24. (cc) creative commons from flickr.com/photos/uscpsc/7894303566/
Thursday, November 8, 12
25. coffee maker
heater
thermosiphon pump
(cc) creative commons from flickr.com/photos/uscpsc/7894303566/
Thursday, November 8, 12
26. CoffeeApp
CoffeeMaker
Pump
Thermosiphon
Heater
(cc) creative commons from flickr.com/photos/uscpsc/7894303566/
Thursday, November 8, 12
27. ! class Thermosiphon implements Pump {
! private final Heater heater;
! Thermosiphon(Heater heater) {
! this.heater = heater;
! }
! @Override public void pump() {
! if (heater.isHot()) {
! System.out.println("=> => pumping => =>");
! }
! }
! }
Thursday, November 8, 12
28. Declare
Dependencies
class Thermosiphon implements Pump {
private final Heater heater;
@Inject
Thermosiphon(Heater heater) {
this.heater = heater;
}
...
}
Thursday, November 8, 12
29. Declare
Dependencies
class CoffeeMaker {
@Inject Heater heater;
@Inject Pump pump;
...
}
Thursday, November 8, 12
30. Satisfy
Dependencies
@Module
class DripCoffeeModule {
@Provides Heater provideHeater() {
return new ElectricHeater();
}
@Provides Pump providePump(Thermosiphon pump) {
return pump;
}
}
Thursday, November 8, 12
31. Build the Graph
class CoffeeApp {
public static void main(String[] args) {
ObjectGraph objectGraph
= ObjectGraph.create(new DripCoffeeModule());
CoffeeMaker coffeeMaker
= objectGraph.get(CoffeeMaker.class);
coffeeMaker.brew();
}
}
Thursday, November 8, 12
32. Neat features
•Lazy<T>
•Module overrides
•Multibindings
Thursday, November 8, 12
33. Lazy<T>
class GridingCoffeeMaker {
@Inject Lazy<Grinder> lazyGrinder;
public void brew() {
while (needsGrinding()) {
// Grinder created once and cached.
Grinder grinder = lazyGrinder.get()
grinder.grind();
}
}
}
Thursday, November 8, 12
38. Creating Graphs
•Compile time
•annotation processor
•Runtime
•generated code loader
•reflection
Thursday, November 8, 12
39. Using Graphs
•Injection
•Validation
•Graphviz!
Thursday, November 8, 12
40. But how?
•Bindings have names like
“com.squareup.geo.LocationMonitor”
•Bindings know the names of their
dependencies, like
“com.squareup.otto.Bus”
Thursday, November 8, 12
41. final class CoffeeMaker$InjectAdapter extends Binding<CoffeeMaker> {
private Binding<Heater> f0;
private Binding<Pump> f1;
public CoffeeMaker$InjectAdapter() {
super("coffee.CoffeeMaker", ...);
}
public void attach(Linker linker) {
f0 = linker.requestBinding("coffee.Heater", coffee.CoffeeMaker.class);
f1 = linker.requestBinding("coffee.Pump", coffee.CoffeeMaker.class);
}
public CoffeeMaker get() {
coffee.CoffeeMaker result = new coffee.CoffeeMaker();
injectMembers(result);
return result;
}
public void injectMembers(CoffeeMaker object) {
object.heater = f0.get();
object.pump = f1.get();
}
public void getDependencies(Set<Binding<?>> bindings) {
bindings.add(f0);
bindings.add(f1);
}
}
Thursday, November 8, 12
42. Validation
•Eager at build time
•Lazy at runtime
Thursday, November 8, 12
43. dagger-compiler
(cc) creative commons from flickr.com/photos/discover-central-california/8010906617
Thursday, November 8, 12
44. javax.annotation.processing
Built into javac
Foolishly easy to use. Just put
dagger-compiler on your classpath!
Thursday, November 8, 12
45. It’s a hassle
(for us)
•Coping with prebuilt .jar files
•Versioning
•Testing
Thursday, November 8, 12
46. ... and it’s limited
(for you)
•No private or final field access
•Incremental builds are imperfect
•ProGuard
Thursday, November 8, 12
47. ... but it’s smoking fast!
(for your users)
•Startup time for Square Wallet
on one device improved from
~5 seconds to ~2 seconds
Thursday, November 8, 12
48. Different Platforms
are Different
•HotSpot
•Android
•GWT
Thursday, November 8, 12
49. HotSpot:
Java on the Server
•The JVM is fast
•Code bases are huge
Thursday, November 8, 12
50. Android
•Battery powered
•Garbage collection causes jank
•Slow reflection, especially on older
devices
•Managed lifecycle
Thursday, November 8, 12
51. GWT
•Code size really matters
•Compiler does full-app
optimizations
•No reflection.
github.com/tbroyer/sheath
Thursday, November 8, 12
52. API Design
in the GitHub age
•Forking makes it easy to stay small
& focused
Thursday, November 8, 12
53. javax.inject
public @interface Inject {}
! public @interface Named {
! String value() default "";
! }
! public interface Provider {
! T get();
! }
! public @interface Qualifier {}
! public @interface Scope {}
! public @interface Singleton {}
Thursday, November 8, 12
54. ! public interface Lazy<T> {
! T get();
! }
! public interface MembersInjector<T> {
! void injectMembers(T instance);
! }
! public final class ObjectGraph {
! public static ObjectGraph create(Object... modules);
! public ObjectGraph plus(Object... modules);
! public void validate();
! public void injectStatics();
! public <T> T get(Class type);
dagger !
! }
public <T> T inject(T instance);
! public @interface Module {
! Class[] entryPoints() default { };
! Class[] staticInjections() default { };
! Class[] includes() default { };
! Class addsTo() default Void.class;
! boolean overrides() default false;
! boolean complete() default true;
! }
! public @interface Provides {
! enum Type { UNIQUE, SET }
! Type type() default Type.UNIQUE;
! }
Thursday, November 8, 12
55. Introduction
Motivation
Using Dagger
Inside Dagger
Wrapping Up
Thursday, November 8, 12
56. Guice
•Still the best choice for many apps
•May soon be able to mix & match
with Dagger
Thursday, November 8, 12
57. Dagger
•Dagger 0.9 today!
•Dagger 1.0 in 2012ish
•Friendly open source.
Thursday, November 8, 12