Discover the future impact of TASTy Query: a single, cross-platform API to answer all semantic questions about Scala programs, no compiler required. Already used in Metals’ debugger, TASTy Query will validate APIs do not break compatibility. Learn to build an analysis to improve your own code.
사례로 알아보는 MariaDB 마이그레이션
현대적인 IT 환경과 애플리케이션을 만들기 위해 우리는 오늘도 고민을 거듭합니다. 최근 들어 오픈소스 DB가 많은 업무에 적용되고 검증이 되면서, 점차 무거운 상용 데이터베이스를 가벼운 오픈소스 DB로 전환하는 움직임이 대기업의 미션 크리티컬 업무까지로 확산하고 있습니다. 이는 클라우드 환경 및 마이크로 서비스 개념 확산과도 일치하는 움직임입니다.
상용 DB를 MariaDB로 이관한 사례를 통해 마이그레이션의 과정과 효과를 살펴 볼 수 있습니다.
MariaDB로 이관하는 것은 어렵다는 생각을 막연히 가지고 계셨다면 본 자료를 통해 이기종 데이터베이스를 MariaDB로 마이그레이션 하는 작업이 어렵지 않게 수행될 수 있다는 점을 실제 사례를 통해 확인하시길 바랍니다.
웨비나 동영상
https://www.youtube.com/watch?v=xRsETZ5cKz8&t=52s
Presentation that I gave as a guest lecture for a summer intensive development course at nod coworking in Dallas, TX. The presentation targets beginning web developers with little, to no experience in databases, SQL, or PostgreSQL. I cover the creation of a database, creating records, reading/querying records, updating records, destroying records, joining tables, and a brief introduction to transactions.
SQL vs NoSQL, an experiment with MongoDBMarco Segato
A simple experiment with MongoDB compared to Oracle classic RDBMS database: what are NoSQL databases, when to use them, why to choose MongoDB and how we can play with it.
MySQL Administrator
Basic course
- MySQL 개요
- MySQL 설치 / 설정
- MySQL 아키텍처 - MySQL 스토리지 엔진
- MySQL 관리
- MySQL 백업 / 복구
- MySQL 모니터링
Advanced course
- MySQL Optimization
- MariaDB / Percona
- MySQL HA (High Availability)
- MySQL troubleshooting
네오클로바
http://neoclova.co.kr/
사례로 알아보는 MariaDB 마이그레이션
현대적인 IT 환경과 애플리케이션을 만들기 위해 우리는 오늘도 고민을 거듭합니다. 최근 들어 오픈소스 DB가 많은 업무에 적용되고 검증이 되면서, 점차 무거운 상용 데이터베이스를 가벼운 오픈소스 DB로 전환하는 움직임이 대기업의 미션 크리티컬 업무까지로 확산하고 있습니다. 이는 클라우드 환경 및 마이크로 서비스 개념 확산과도 일치하는 움직임입니다.
상용 DB를 MariaDB로 이관한 사례를 통해 마이그레이션의 과정과 효과를 살펴 볼 수 있습니다.
MariaDB로 이관하는 것은 어렵다는 생각을 막연히 가지고 계셨다면 본 자료를 통해 이기종 데이터베이스를 MariaDB로 마이그레이션 하는 작업이 어렵지 않게 수행될 수 있다는 점을 실제 사례를 통해 확인하시길 바랍니다.
웨비나 동영상
https://www.youtube.com/watch?v=xRsETZ5cKz8&t=52s
Presentation that I gave as a guest lecture for a summer intensive development course at nod coworking in Dallas, TX. The presentation targets beginning web developers with little, to no experience in databases, SQL, or PostgreSQL. I cover the creation of a database, creating records, reading/querying records, updating records, destroying records, joining tables, and a brief introduction to transactions.
SQL vs NoSQL, an experiment with MongoDBMarco Segato
A simple experiment with MongoDB compared to Oracle classic RDBMS database: what are NoSQL databases, when to use them, why to choose MongoDB and how we can play with it.
MySQL Administrator
Basic course
- MySQL 개요
- MySQL 설치 / 설정
- MySQL 아키텍처 - MySQL 스토리지 엔진
- MySQL 관리
- MySQL 백업 / 복구
- MySQL 모니터링
Advanced course
- MySQL Optimization
- MariaDB / Percona
- MySQL HA (High Availability)
- MySQL troubleshooting
네오클로바
http://neoclova.co.kr/
This workshop was given at the NZITF conference 2018 in Wellington. The workshop covers Velociraptor, a modern DFIR endpoint monitoring and response tool.
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPStéphanie Roger
Que vous soyez développeur ou entrepreneur, découvrez le projet STAMP piloté par Inria, l'institut national de recherche dédié aux sciences du numérique.
Presentation on the new features introduced in JDK 8, presented on the 26.02.2013 in Sofia University in front of students and members of the Bulgarian java user group.
Software engineering research often requires analyzing
multiple revisions of several software projects, be it to make and
test predictions or to observe and identify patterns in how software evolves. However, code analysis tools are almost exclusively designed for the analysis of one specific version of the code, and the time and resources requirements grow linearly with each additional revision to be analyzed. Thus, code studies often observe a relatively small number of revisions and projects. Furthermore, each programming ecosystem provides dedicated tools, hence researchers typically only analyze code of one language, even when researching topics that should generalize
to other ecosystems. To alleviate these issues, frameworks and models have been developed to combine analysis tools or automate the analysis of multiple revisions, but little research has gone into actually removing redundancies in multi-revision, multi-language code analysis. We present a novel end-to-end approach that systematically avoids redundancies every step of the way: when reading sources from version control, during parsing, in the internal code representation, and during the actual analysis. We evaluate our open-source implementation, LISA, on the full
history of 300 projects, written in 3 different programming languages, computing basic code metrics for over 1.1 million program revisions. When analyzing many revisions, LISA requires less than a second on average to compute basic code metrics for all files in a single revision, even for projects consisting of millions of lines of code.
Talk at RubyKaigi 2015.
Plugin architecture is known as a technique that brings extensibility to a program. Ruby has good language features for plugins. RubyGems.org is an excellent platform for plugin distribution. However, creating plugin architecture is not as easy as writing code without it: plugin loader, packaging, loosely-coupled API, and performance. Loading two versions of a gem is a unsolved challenge that is solved in Java on the other hand.
I have designed some open-source software such as Fluentd and Embulk. They provide most of functions by plugins. I will talk about their plugin-based architecture.
SQLGitHub - Access GitHub API with SQL-like syntaxesJasmine Chen
SQLGitHub features a SQL-like syntax that allows you to:
Query information about an organization as a whole.
You may also think of it as a better, enhanced frontend layer built on top of GitHub's RESTful API.
Managing Binary Compatibility in Scala (Scala Days 2011)mircodotta
The following is the abstract submitted for my Scala Days 2011 talk:
Binary compatibility is not a topic specific to the Scala language, but rather a concern for all languages targeting the JVM, Java included. Scala shares with Java many sources of potential binary incompatibilities, however, because of Scala greater expressiveness, Scala code has unique sources of incompatibility.
The Scala programming language offers several language constructs that do not have an equivalent in Java and are not natively supported by the JVM. Because of this, the Scala compiler (scalac) transforms these constructs into lower-lever, Java compatible, patterns that can be then easily translated into bytecode. Good examples of such high-level Scala constructs are traits, for mixin-based inheritance, and functions as first data citizens.
During this presentation we will review the main sources of binary incompatibility for the Scala language, providing you with useful insights about how you should evolve your codebase to avoid binary incompatibilities. Furthermore, we will show a tool, the Migration Manager, that can be used to automatically diagnose binary incompatibilities between two versions of a same library.
CLASSINDEX - SZYBKA ALTERNATYWA DLA SKANOWANIA KLAS
W Javie częstym problemem jest potrzeba znalezienia klas oznaczonych daną adnotacją. Choć oficjalnie Java nie wspiera takiej funkcjonalności, de facto standardowym rozwiązaniem tego problemu jest skanowanie klas. W tej prezentacji chciałbym przedstawić dużo szybszą alternatywę - autorski projekt oparty na mechanizmach procesowania adnotacji.
Miller Columns (used in iPhone and Mac Finder) are an elegant way of displaying and navigating a tree. This talk describes a JavaScript implementation of Miller Columns, and why JavaScript needs modules and a standard library.
IUST Advanced software engineering course by Dr. Saeed Parsa. Credits of slides belong to Dr. Saeed Parsa and IUST reverse engineering research laboratory. All slides are available publicly due to COVID 19 Pandemic.
This workshop was given at the NZITF conference 2018 in Wellington. The workshop covers Velociraptor, a modern DFIR endpoint monitoring and response tool.
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPStéphanie Roger
Que vous soyez développeur ou entrepreneur, découvrez le projet STAMP piloté par Inria, l'institut national de recherche dédié aux sciences du numérique.
Presentation on the new features introduced in JDK 8, presented on the 26.02.2013 in Sofia University in front of students and members of the Bulgarian java user group.
Software engineering research often requires analyzing
multiple revisions of several software projects, be it to make and
test predictions or to observe and identify patterns in how software evolves. However, code analysis tools are almost exclusively designed for the analysis of one specific version of the code, and the time and resources requirements grow linearly with each additional revision to be analyzed. Thus, code studies often observe a relatively small number of revisions and projects. Furthermore, each programming ecosystem provides dedicated tools, hence researchers typically only analyze code of one language, even when researching topics that should generalize
to other ecosystems. To alleviate these issues, frameworks and models have been developed to combine analysis tools or automate the analysis of multiple revisions, but little research has gone into actually removing redundancies in multi-revision, multi-language code analysis. We present a novel end-to-end approach that systematically avoids redundancies every step of the way: when reading sources from version control, during parsing, in the internal code representation, and during the actual analysis. We evaluate our open-source implementation, LISA, on the full
history of 300 projects, written in 3 different programming languages, computing basic code metrics for over 1.1 million program revisions. When analyzing many revisions, LISA requires less than a second on average to compute basic code metrics for all files in a single revision, even for projects consisting of millions of lines of code.
Talk at RubyKaigi 2015.
Plugin architecture is known as a technique that brings extensibility to a program. Ruby has good language features for plugins. RubyGems.org is an excellent platform for plugin distribution. However, creating plugin architecture is not as easy as writing code without it: plugin loader, packaging, loosely-coupled API, and performance. Loading two versions of a gem is a unsolved challenge that is solved in Java on the other hand.
I have designed some open-source software such as Fluentd and Embulk. They provide most of functions by plugins. I will talk about their plugin-based architecture.
SQLGitHub - Access GitHub API with SQL-like syntaxesJasmine Chen
SQLGitHub features a SQL-like syntax that allows you to:
Query information about an organization as a whole.
You may also think of it as a better, enhanced frontend layer built on top of GitHub's RESTful API.
Managing Binary Compatibility in Scala (Scala Days 2011)mircodotta
The following is the abstract submitted for my Scala Days 2011 talk:
Binary compatibility is not a topic specific to the Scala language, but rather a concern for all languages targeting the JVM, Java included. Scala shares with Java many sources of potential binary incompatibilities, however, because of Scala greater expressiveness, Scala code has unique sources of incompatibility.
The Scala programming language offers several language constructs that do not have an equivalent in Java and are not natively supported by the JVM. Because of this, the Scala compiler (scalac) transforms these constructs into lower-lever, Java compatible, patterns that can be then easily translated into bytecode. Good examples of such high-level Scala constructs are traits, for mixin-based inheritance, and functions as first data citizens.
During this presentation we will review the main sources of binary incompatibility for the Scala language, providing you with useful insights about how you should evolve your codebase to avoid binary incompatibilities. Furthermore, we will show a tool, the Migration Manager, that can be used to automatically diagnose binary incompatibilities between two versions of a same library.
CLASSINDEX - SZYBKA ALTERNATYWA DLA SKANOWANIA KLAS
W Javie częstym problemem jest potrzeba znalezienia klas oznaczonych daną adnotacją. Choć oficjalnie Java nie wspiera takiej funkcjonalności, de facto standardowym rozwiązaniem tego problemu jest skanowanie klas. W tej prezentacji chciałbym przedstawić dużo szybszą alternatywę - autorski projekt oparty na mechanizmach procesowania adnotacji.
Miller Columns (used in iPhone and Mac Finder) are an elegant way of displaying and navigating a tree. This talk describes a JavaScript implementation of Miller Columns, and why JavaScript needs modules and a standard library.
IUST Advanced software engineering course by Dr. Saeed Parsa. Credits of slides belong to Dr. Saeed Parsa and IUST reverse engineering research laboratory. All slides are available publicly due to COVID 19 Pandemic.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
5. TASTy Query Elevator Pitch
● Cross platform (JS, JVM)
● Reason about and analyse APIs defined in Scala 3, Java, and Scala 2.13
● Extract full information from TASTy files.
● Simple to use
● Independent of compiler
5
9. 9
Why is TASTy useful as a format?
● Stores the whole program
● Stable with respect to dependencies
○ Method overloads are already resolved
○ Implicits are already resolved
Foo.tasty
��
23. 23
So, What’s Happening?
1. Recompile my::app:2.7.3 against new dependency org::utils:1.0.1 .
2. def app calls inline def Macros.foo from foo::macros:3.3.5 .
○ ⚠ foo::macros:3.3.5 still depends on older org::utils:1.0.0 .
3. Compiler substitutes Macros.foo call by its inline body from TASTy.
4. Macros.foo body calls Utils.asList , which resolves to newer org::utils:1.0.1 .
5. Seq(1, 2, 3) argument not passed as varargs and so no longer type-checks!
○ org::utils:1.0.0 and org::utils:1.0.1 are not TASTy compatible!
24. 24
TASTy Query Use Cases
● Validate API compatibility between releases ✅
● Metals Debugger ✅
● TASTy interpreter (for research) ✅
● Custom Analyses
27. 27
First Step: Building the Classpath
● Ordered sequence of entries ✅
● Each entry is a .jar file or directory ✅
● Inside each entry is .class/.tasty files, organised by package
✅
[0] my-library/target/scala-3.2.1/classes
[1]
maven2/org/scala-lang/scala3-library_3/3.2.1/scala3-library_3-3.2.1.jar
[2] maven2/org/scala-lang/scala-library/2.13.10/scala-library-2.13.10.jar
[3] jrt:/modules/java.base
import java.nio.file.*
val cpPaths = List(
Paths.get("my-library/target/scala-3.2.1/classes"),
Paths.get(".../scala3-library_3-3.2.1.jar"),
Paths.get(".../scala-library-2.13.10.jar"),
jrtFileSystem.getPath("modules/java.base")
)
28. 28
First Step: Read the Classpath
import tastyquery.jdk.ClasspathLoaders
import tastyquery.Classpaths.Classpath
val classpath: Classpath = ClasspathLoaders.read(cpPaths)
val lookup: Map[Path, Classpath.Entry] =
cpPaths.zip(classpath.entries).toMap
import java.nio.file.*
val cpPaths = List(...) // from previous slide
29. 29
First Step: Read the Classpath
● Pure, in-memory representation of classpath ✅
● Each Entry stores .class/.tasty files found in its source path ✅
● Platform agnostic (JS/JVM) ✅
Classpath.Entry
Classpath
30. 30
● A Context wraps a Classpath ✅
● Entry point to inspect definitions ✅
● Summon a Context with ctx ✅
Second Step: Context
import tastyquery.Contexts
import tastyquery.Contexts.*
Context
given Context = Contexts.init(classpath)
31. 31
Third Step: Query
🤔 how to find only the classes from scala-library ?
val scalaLib: Classpath.Entry =
lookup.filterKeys(_.toString.contains("scala-library")).values.head
val scalaLibRoots: Iterable[Symbol] =
ctx.findSymbolsByClasspathEntry(scalaLib) // top-level classes
val lookup: Map[Path, Classpath.Entry] = … // from earlier slide
import tastyquery.Symbols.*
32. 32
Core Concepts: Data
Symbols
● Unique identity for a definition ✅
● Store all information about the definition ✅
● Specialised for each kind of definition ✅
import tastyquery.Symbols.*
34. 34
ClassSymbol Methods
cls.parentClasses List[ClassSymbol] of the parents of the class.
cls.fullName FullyQualifiedName of the class.
cls.owner What symbol was cls declared in?
cls.getDecls(name) Find all overloads in cls matching a Name .
cls.declarations Find all symbols declared in cls .
ClassSymbol
35. 35
Comparison to the Compiler API
● Inspired by compiler ✅
● Single “temporal” view ✅
● Favor specialisation over abstraction ✅
TermSymbol
declaredType
Type
TypeMemberSymbol
bounds
TypeBounds
ClassSymbol
parents
List[Type]
typeParams
List[CTPSymbol]
36. 36
Comparison to the Compiler API
dotty.tools.dotc API
Symbol
info
Type | TypeBounds | ClassInfo
❌
● Inspired by compiler ✅
● Single “temporal” view ✅
● Favor specialisation over abstraction ✅
37. 37
Third Step: Query
🤔 how to find only the classes in scala.collection.mutable ?
val mutablePackage = ctx.findPackage("scala.collection.mutable")
val mutableClasses: Iterable[ClassSymbol] =
scalaLibRoots.collect {
case cls: ClassSymbol if cls.owner == mutablePackage => cls
}
val scalaLibRoots: Iterable[Symbol] = … // from earlier slide
39. 39
Computing inheritance graph of class A
1. Links := []; explore := {class A}
2. While explore is non-empty:
a. remove class A from explore
b. For each parent class P of A:
i. add a link class A -> class P
ii. add class P to explore
3. Return Links
48. 48
Types
tp1.isSubType(tp2) Boolean is tp1 <:< tp2 by Scala’s type rules
tp1.isSameType(tp2) Boolean is tp1 =:= tp2 by Scala’s type rules
tp1.member(name) Find a (possibly inherited) member of tp1 called name .
tp1.isRef(sym) Does tp1 reduce to a reference of sym ?
val tp1: Type
val tp2: Type
val name: Name
val sym: Symbol
49. 49
Overrides
f.overridenSymbol(cls) Which term/type in cls is overridden by f ?
f.overridingSymbol(cls) Which term/type in cls overrides f ?
f.allOverriddenSymbols
Find all the terms/types overridden by f in parent
classes.
f.nextOverriddenSymbol
Find the first term/type overridden by f in parent
classes.
val f: TermOrTypeSymbol
val cls: ClassSymbol
53. Summary
● TASTy Query will be critical for Scala ecosystem’s infrastructure
● Simple API to inspect definitions from all the classpath
● Cross platform
● Accessible for many kinds of user.
53