{"technologies":[{"id":"testing","title":"Testing","type":"category","url":"https://kpavlov.me//technologies/testing"},{"auditory":["backend","data-science"],"id":"databases","links":["rdbms","nosql"],"title":"Databases","type":"category","url":"https://kpavlov.me//technologies/databases"},{"id":"rdbms","links":["oracle","sql-server","mysql","postgresql"],"title":"Relational Databases","type":"category","url":"https://kpavlov.me//technologies/rdbms"},{"id":"nosql","links":["mongodb"],"title":"NoSql Databases","type":"category","url":"https://kpavlov.me//technologies/nosql"},{"id":"build-tools","title":"Build tools","type":"category","url":"https://kpavlov.me//technologies/build-tools"},{"id":"serialization","links":["jackson","gson","protobuf","grpc","avro"],"title":"Serialization","type":"category","url":"https://kpavlov.me//technologies/serialization"},{"auditory":["backend","mobile","desktop"],"id":"cpp","title":"C++","type":"language","url":"https://kpavlov.me//technologies/cpp"},{"auditory":["backend"],"id":"golang","title":"Go","type":"language","url":"https://kpavlov.me//technologies/golang"},{"auditory":["backend"],"id":"hugo","languages":["golang"],"title":"Hugo","type":"framework","url":"https://kpavlov.me//technologies/hugo"},{"auditory":["backend","desktop","data-science"],"id":"python","title":"Python","type":"language","url":"https://kpavlov.me//technologies/python"},{"auditory":["desktop","data-science"],"homepage":"https://matplotlib.org/","id":"matplotlib","languages":["python"],"links":["seaborn"],"title":"Matplotlib","type":"library","url":"https://kpavlov.me//technologies/matplotlib"},{"auditory":["desktop","data-science"],"homepage":"https://seaborn.pydata.org/","id":"seaborn","languages":["python"],"title":"Seaborn","type":"library","url":"https://kpavlov.me//technologies/seaborn"},{"auditory":["desktop","web","data-science"],"homepage":"https://plot.ly/","id":"plotly","languages":["python","javascript"],"title":"Plotly","type":"library","url":"https://kpavlov.me//technologies/plotly"},{"auditory":["backend","desktop","data-science"],"id":"rust","title":"Rust","type":"language","url":"https://kpavlov.me//technologies/rust"},{"auditory":["backend","android"],"id":"java","title":"Java","type":"language","url":"https://kpavlov.me//technologies/java"},{"id":"java8","languages":["java"],"title":"Java 8","type":"dialect","url":"https://kpavlov.me//technologies/java8"},{"id":"java11","languages":["java"],"title":"Java 11","type":"dialect","url":"https://kpavlov.me//technologies/java11"},{"id":"java17","languages":["java"],"title":"Java 17","type":"dialect","url":"https://kpavlov.me//technologies/java17"},{"auditory":["backend"],"id":"scala","title":"Scala","type":"language","url":"https://kpavlov.me//technologies/scala"},{"auditory":["backend"],"homepage":"https://doc.akka.io/docs/akka/current/","id":"akka","languages":["scala","java"],"links":["akka-streams","akka-persistence","akka-fsm","akka-cluster"],"title":"Akka","type":"library","url":"https://kpavlov.me//technologies/akka"},{"auditory":["backend"],"homepage":"https://doc.akka.io/docs/akka/current/typed/index-persistence.html","id":"akka-persistence","languages":["scala","java"],"title":"Akka-Persistence","type":"library","url":"https://kpavlov.me//technologies/akka-persistence"},{"auditory":["backend"],"id":"akka-fsm","languages":["scala","java"],"title":"Akka-FSM","type":"library","url":"https://kpavlov.me//technologies/akka-fsm"},{"auditory":["backend"],"homepage":"https://doc.akka.io/docs/akka/current/typed/index-cluster.html","id":"akka-cluster","languages":["scala","java"],"title":"Akka-Cluster","type":"library","url":"https://kpavlov.me//technologies/akka-cluster"},{"auditory":["backend"],"id":"play-framework","languages":["scala"],"links":["akka"],"title":"Play Framework","type":"framework","url":"https://kpavlov.me//technologies/play-framework"},{"auditory":["backend"],"homepage":"https://doc.akka.io/docs/akka/current/stream/","id":"akka-streams","languages":["scala","java"],"title":"Akka-Streams","type":"library","url":"https://kpavlov.me//technologies/akka-streams"},{"auditory":["backend","android"],"homepage":"https://kotlinlang.org/","id":"kotlin","title":"Kotlin","type":"language","url":"https://kpavlov.me//technologies/kotlin"},{"auditory":["backend"],"id":"kotlinx-coroutines","languages":["kotlin"],"title":"Coroutines","type":"library","url":"https://kpavlov.me//technologies/kotlinx-coroutines"},{"auditory":["backend","android"],"id":"ktor","languages":["kotlin"],"title":"Ktor","type":"library","url":"https://kpavlov.me//technologies/ktor"},{"auditory":["backend","android"],"id":"koin","languages":["kotlin"],"title":"Koin","type":"library","url":"https://kpavlov.me//technologies/koin"},{"auditory":["backend","data-science","dba"],"id":"sql","links":["plsql"],"title":"SQL","type":"language","url":"https://kpavlov.me//technologies/sql"},{"auditory":["backend","data-science"],"id":"plsql","title":"PLSQL","type":"dialect","url":"https://kpavlov.me//technologies/plsql"},{"auditory":["backend","data-science"],"category":"rdbms","homepage":"https://www.oracle.com/database/","id":"oracle","links":["plsql"],"title":"Oracle RDBMS","type":"tool","url":"https://kpavlov.me//technologies/oracle"},{"auditory":["backend","data-science"],"category":"rdbms","id":"sql-server","title":"Microsoft SQL Server","type":"tool","url":"https://kpavlov.me//technologies/sql-server"},{"auditory":["backend","data-science"],"category":"rdbms","homepage":"https://www.mysql.com/","id":"mysql","title":"MySQL","type":"tool","url":"https://kpavlov.me//technologies/mysql"},{"auditory":["backend","data-science"],"category":"rdbms","id":"postgresql","title":"PostgreSQL","type":"tool","url":"https://kpavlov.me//technologies/postgresql"},{"auditory":["backend","data-science"],"category":"nosql","id":"mongodb","title":"MongoDB","type":"tool","url":"https://kpavlov.me//technologies/mongodb"},{"auditory":["backend","data-science"],"category":"nosql","id":"dynamodb","title":"AWS DynamoDB","type":"tool","url":"https://kpavlov.me//technologies/dynamodb"},{"auditory":["backend","web"],"id":"javascript","links":["typescript"],"title":"JavaScript","type":"language","url":"https://kpavlov.me//technologies/javascript"},{"auditory":["backend","web","mobile"],"id":"typescript","title":"TypeScript","type":"language","url":"https://kpavlov.me//technologies/typescript"},{"auditory":["backend"],"id":"spring","languages":["java","kotlin"],"links":["spring-boot","spring-data","spring-security","spring-mvc","spring-webflux"],"title":"Spring Framework","type":"framework","url":"https://kpavlov.me//technologies/spring"},{"auditory":["backend"],"id":"spring-boot","languages":["java","kotlin"],"title":"Spring Boot","type":"framework","url":"https://kpavlov.me//technologies/spring-boot"},{"auditory":["backend"],"id":"spring-data","languages":["java"],"links":["hibernate"],"title":"Spring Data","type":"library","url":"https://kpavlov.me//technologies/spring-data"},{"auditory":["backend"],"id":"spring-mvc","languages":["java"],"title":"Spring MVC","type":"library","url":"https://kpavlov.me//technologies/spring-mvc"},{"auditory":["backend"],"id":"spring-webflux","languages":["java"],"title":"Spring WebFlux","type":"library","url":"https://kpavlov.me//technologies/spring-webflux"},{"auditory":["backend"],"id":"spring-security","languages":["java"],"title":"Spring Security","type":"library","url":"https://kpavlov.me//technologies/spring-security"},{"auditory":["backend","android"],"category":"serialization","id":"jackson","languages":["java"],"title":"Jackson","type":"library","url":"https://kpavlov.me//technologies/jackson"},{"auditory":["backend","android"],"category":"serialization","id":"gson","languages":["java"],"title":"Gson","type":"library","url":"https://kpavlov.me//technologies/gson"},{"category":"serialization","id":"jaxb","languages":["java"],"title":"JAXB","type":"library","url":"https://kpavlov.me//technologies/jaxb"},{"auditory":["backend","android"],"category":"serialization","id":"avro","title":"Apache Avro (Schema)","type":"library","url":"https://kpavlov.me//technologies/avro"},{"auditory":["backend","android"],"category":"serialization","id":"protobuf","title":"Protobuf","type":"library","url":"https://kpavlov.me//technologies/protobuf"},{"category":"serialization","id":"grpc","links":["protobuf"],"title":"gRPC","type":"library","url":"https://kpavlov.me//technologies/grpc"},{"auditory":["backend"],"id":"hibernate","languages":["java"],"links":["rdbms"],"title":"Hibernate","type":"library","url":"https://kpavlov.me//technologies/hibernate"},{"auditory":["backend"],"id":"jooq","languages":["java"],"links":["rdbms"],"title":"jOOQ","type":"library","url":"https://kpavlov.me//technologies/jooq"},{"auditory":["backend"],"id":"netty","languages":["java"],"title":"Netty","type":"library","url":"https://kpavlov.me//technologies/netty"},{"auditory":["backend"],"id":"jax-rs","links":["spring-mvc"],"title":"JAX-RS","type":"specification","url":"https://kpavlov.me//technologies/jax-rs"},{"auditory":["backend","android"],"category":"testing","id":"mockito","languages":["java"],"title":"Mockito","type":"library","url":"https://kpavlov.me//technologies/mockito"},{"auditory":["backend","android"],"category":"testing","id":"rest-assured","languages":["java"],"title":"Rest-assured","type":"library","url":"https://kpavlov.me//technologies/rest-assured"},{"auditory":["backend"],"category":"testing","id":"wiremock","languages":["java","kotlin"],"title":"Wiremock","type":"library","url":"https://kpavlov.me//technologies/wiremock"},{"category":"testing","id":"junit","languages":["java","kotlin"],"title":"JUnit","type":"library","url":"https://kpavlov.me//technologies/junit"},{"category":"testing","id":"karate","languages":["java"],"title":"Karate","type":"framework","url":"https://github.com/karatelabs/karate"},{"category":"testing","id":"testng","languages":["java","scala","kotlin"],"title":"TestNG","type":"library","url":"https://kpavlov.me//technologies/testng"},{"category":"testing","id":"scalatest","languages":["scala"],"title":"ScalaTest","type":"library","url":"https://kpavlov.me//technologies/scalatest"},{"id":"awaitility","languages":["java","kotlin"],"links":["wiremock"],"title":"Awaitility","type":"library","url":"https://kpavlov.me//technologies/awaitility"},{"id":"reactjs","languages":["javascript","typescript"],"links":["redux"],"title":"React","type":"library","url":"https://kpavlov.me//technologies/reactjs"},{"id":"redux","languages":["javascript","typescript"],"links":["redux-saga"],"title":"Redux","type":"library","url":"https://kpavlov.me//technologies/redux"},{"id":"redux-saga","languages":["javascript","typescript"],"title":"Redux Saga","type":"library","url":"https://kpavlov.me//technologies/redux-saga"},{"id":"angularjs","languages":["javascript","typescript"],"title":"AngularJS","type":"framework","url":"https://kpavlov.me//technologies/angularjs"},{"id":"vuejs","languages":["javascript","typescript"],"title":"Vue js","type":"library","url":"https://kpavlov.me//technologies/vuejs"},{"id":"d3js","languages":["javascript"],"links":["plotly"],"title":"D3","type":"library","url":"https://kpavlov.me//technologies/d3js"},{"homepage":"https://docs.bokeh.org/","id":"bokeh","languages":["javascript","python"],"title":"Bokeh","type":"library","url":"https://kpavlov.me//technologies/bokeh"},{"auditory":["backend"],"id":"expressjs","languages":["javascript","typescript"],"title":"Express","type":"library","url":"https://kpavlov.me//technologies/expressjs"},{"auditory":["web"],"category":"testing","id":"jest","languages":["javascript","typescript"],"title":"Jest","type":"library","url":"https://kpavlov.me//technologies/jest"},{"auditory":["web"],"category":"testing","description":"Lightweight JavaScript library that complements Jest by matching mock function call arguments.","homepage":"https://github.com/timkindberg/jest-when","id":"jest-when","languages":["javascript","typescript"],"title":"jest-when","type":"library","url":"https://kpavlov.me//technologies/jest-when"},{"category":"build-tools","id":"npm","languages":["javascript","typescript"],"title":"NPM","type":"tool","url":"https://kpavlov.me//technologies/npm"},{"category":"build-tools","id":"yarn","languages":["javascript","typescript"],"title":"yarn","type":"tool","url":"https://kpavlov.me//technologies/yarn"},{"category":"build-tools","id":"webpack","languages":["javascript","typescript"],"title":"webpack","type":"tool","url":"https://kpavlov.me//technologies/webpack"},{"category":"build-tools","id":"vitejs","languages":["javascript","typescript"],"title":"Vite","type":"tool","url":"https://kpavlov.me//technologies/vitejs"},{"category":"build-tools","id":"gradle","languages":["java","kotlin"],"title":"Gradle","type":"tool","url":"https://kpavlov.me//technologies/gradle"},{"category":"build-tools","id":"maven","languages":["java","kotlin","scala"],"title":"maven","type":"tool","url":"https://kpavlov.me//technologies/maven"},{"category":"build-tools","id":"ant","languages":["java"],"title":"ant","type":"tool","url":"https://kpavlov.me//technologies/ant"},{"category":"build-tools","id":"sbt","languages":["scala"],"title":"Scala Build Tool","type":"tool","url":"https://kpavlov.me//technologies/sbt"},{"category":"build-tools","id":"bazel","languages":["java","golang","cpp"],"title":"Bazel","type":"tool","url":"https://kpavlov.me//technologies/bazel"}]}