Как стать автором
Обновить
750.92
Рейтинг
Timeweb Cloud
Облачная платформа для разработчиков и бизнеса

Ontol про Kotlin: подборка 28 самых полезных бесплатных курсов и видео на Youtube

Блог компании Timeweb Cloud Разработка под Android *Kotlin *Учебный процесс в IT
image

На английском


freeCodeCamp — лучший и при этом бесплатный канал для самообучения программированию. Многие платные школы просто делают «рерайт» их программ и продают за 100К руб.


850 000 просмотров
2,5 часа
курс для начинающих 2019 года

Содержание
(0:00:50) Create Your First Kotlin Project
(0:04:23) Hello World
(0:06:33) Working With Variables
(0:11:04) Type System
(0:15:00) Basic Control Flow
(0:21:31) Basic Kotlin Functions
(0:27:12) Function Parameters
(0:32:52) Arrays
(0:35:28) Iterating with forEach
(0:41:17) Lists
(0:42:47) Maps
(0:45:05) Mutable vs Immutable Collections
(0:49:24) Vararg Parameters
(0:54:21) Named Arguments
(0:56:26) Default Parameter Values
(1:00:27) Create A Simple Class
(1:03:35) Adding Class Properties
(1:05:15) Class Init Block
(1:06:40) Accessing Class Properties
(1:07:32) Primary Constructor Properties
(1:08:17) Secondary Constructors
(1:09:50) Working With Multiple Init Blocks
(1:11:30) Default Property Values
(1:11:59) Properties With Custom Getters/Setters
(1:16:52) Class Methods
(1:20:12) Visibility Modifiers — Public/Private/Protected/Public
(1:22:30) Interfaces
(1:24:21) Abstract Classes
(1:26:13) Implementing An Interface
(1:26:35) Overriding Methods
(1:28:30) Default Interface Methods
(1:29:30) Interface Properties
(1:31:40) Implementing Multiple Interfaces
(1:32:57) Type Checking And Smart Casts
(1:36:18) Inheritance
(1:43:07) Object Expressions
(1:45:06) Companion Objects
(1:49:51) Object Declarations
(1:52:41) Enum Classes
(1:58:16) Sealed Classes
(2:00:07) Data Classes
(2:12:25) Extension Functions/Properties
(2:16:40) Higher-Order Functions
(2:29:07) Using The Kotlin Standard Library
(2:00:07) Data Classes



210 000 просмотров
3,5 часа
Создаем нативное приложение под Adroid, 2019 год

Содержание
1
(0:00) Introduction

2
(5:14) Model View ViewModel (MVVM) Architecture fundamentals and variations
(5:38) Is MVVM the perfect architecture?
(7:41) Overview of MVVM with whiteboard example
(12:11) Pros and Cons of MVVM
(18:58) Package structure

3
(23:22) How to create Vector Drawables
(24:22) Difference between Raster (PNG, JPG, BMP) and Vector (SVG) Images?
(27:55) Uh Oh!
(28:41) How to use Inkscape to create an SVG from a BMP/PNG
(30:07) How to convert an SVG into an Android Studio Vector Asset
(32:29) How to create simple animations using animation lists and fade animations

4
(38:19) Material Design User Interface using ConstraintLayout and Styles
(41:00) Building an XML Layout using ConstraintLayout
(51:09) Using ConstraintLayout Chains
(55:43) Some tips on using Styles to create a material design look

5
(56:51) How to use (and when not to use) the Android Navigation Component from Android Jetpack
(1:00:00) Adding Safe Args to gradle
(1:01:15) Building a Navigation Graph using the Navigation Editor (XML)
(1:11:00) Creating a NavHostFragment to host the Navigation Component and adding it to an Activity
(1:15:29) How to actually change destinations in our Fragments using the Navigation Component (with safe args)

6
(1:20:00) Setting up Fragments as Views in MVVM using Kotlin Synthetic Properties
(1:25:32) Starting point
(1:27:54) Importing an XML layout to an Activity/Fragment using Kotlin Synthetic Properties
(1:32:09) How to reference Views in the Fragment using synthetic properties
(1:33:41) Adding onClickListener to our views
(1:38:03) Intercepting OnBackPressed (NOTE: The API for this has changed since making this video. I have updated the Repository appropriately)
(1:39:40) How to observe the ViewModel using LiveData callbacks

7
(1:43:22) ViewModels in MVVM with Kotlin Coroutines for Concurrency
(1:45:26) A look at my BaseViewModel class which contains part of the Coroutines Implementation (Coroutine Scope)
(1:49:25) Starting point
(2:01:40) Handling events from the View in the ViewModel
(2:05:34) Using the launch Coroutine Builder to access data
(2:08:44) How to update the MutableLiveData fields to publish data to the View

8
(2:19:35) Modern RecyclerView implementation using LiveData to handle ItemTouchListener() callbacks
(2:22:49) Overview of the RecyclerView within the XML View with LinearLayoutManager
(2:26:53) What does the DiffUtil do?
(2:28:48) A look at the source code of ListAdapter to better understand how it works
(2:35:34) Writing the RecyclerView.ViewHolder class
(2:37:23) Why is it actually called a RecyclerView? What gets Recycled?
(2:37:58) Writing our RecyclerView.ListAdapter
(2:46:37) How to use a MutableLiveData object to publish events from the onClickListener in the ViewHolders
(2:48:09) Overview of the Fragment which manages the RecyclerView, and how to avoid memory leaks!

9
(2:53:17) FirebaseAuth for User Authentication using Google Sign In
(2:54:00) How to set up a new Firebase Project using Android Studio
(2:54:36) Enabling Authentication (FirebaseAuth) in the Firebase Console
(2:55:00) Setting up a debug signing certificate for your App in Firebase
(2:56:48) Gradle Configurations for FirebaseAuth
(2:58:00) Setting up GoogleSignInProvider
(2:59:24) Handling the result in onActivityResult
(3:01:06) Back FirebaseAuth Implementation using Coroutines

10
(3:05:31) Local Database with Room Persistence Library and Coroutines
(3:06:17) Entities and Primary Keys in Room
(3:08:50) Setting up a Dao (Data Access Object) in Room
(3:12:28) Overview of RoomDatabase implementation
(3:14:21) How to build your Database and get a reference to you Dao
(3:14:47) How to get data in and out of the Dao using suspend functions

11
(3:16:34) Setting up a Local and Remote Database using Firebase's Firestore NoSQL library
(3:17:33) Communicating with Firestore using a Repository, with Coroutines

12
(3:21:59) Dependency Injection using an AndroidViewModel, and ViewModelProvider.Factory
(3:22:29) What is dependency injection in simple terms?
(3:23:36) Implementing Dependency Injection using AndroidViewModel
(3:24:13) Quick look at using a ViewModelProvider.Factory to create our ViewModel with the Injected Repository
(3:24:27) How to use our Dependency Injector from within a Fragment or Activity




162 000 просмотров
4,5 часа
Создаем и публикуем игру, 2020 год

Содержание
(0:00:00) Intro + app overview
(0:05:40) Create the main layout
(0:19:43) Setup the RecyclerView to show memory cards
(0:37:15) Add the BoardSize enum + create icons
(0:51:45) Create the memory card and game classes
(1:01:39) Implement the game logic
(1:20:20) Display game info
(1:27:45) Add menu options for game control
(1:41:59) Use an intent to navigate to the CreateActivity
(1:58:04) Build the image grid in the creation flow
(2:11:55) Choose image intent
(2:30:03) Image upload preparation
(2:39:07) Upload to Firebase Storage
(2:59:43) Save the memory game to Firebase
(3:16:00) Play memory with custom images
(3:34:30) Add menu option to download a game
(3:45:53) Style updates
(3:56:33) Creating a release build
(4:04:09) Publishing your app to Google Play
(4:19:53) Concept Review





80 000 просмотров
4 часа
Туториал, 2019 год

Содержание
Section 1
(0:00:00) Course Overview: About Me, You, and this Course
(0:09:23) How to Run the Examples
(0:10:59) Kotlin Syntax Practice for Beginners

Section 2
(0:39:26) Data Landscape: Memory Spaces and Named Addresses (References)
(0:44:21) How to use «val» and «const val» References to promote Immutability/Efficiency:
(0:51:55) Using «var» Reference Types, and the problems with Shared Mutable State!
(0:58:58) Giving Structure to Data with Classes

Section 3
(1:19:45) A Fundamental Divide: Computation and Control Logic
(1:22:52) Computing Data means Solving Problems
(1:32:11) Controlling the Flow of Data
(1:37:24) Event Driven Programs
(1:57:33) Functional versus Imperative Program Style (mild introduction)

Section 4
(2:18:38) What is Software Architecture?
(2:21:14) Separation of Concerns
(2:34:13) Dependency Inversion: Using Interfaces Effectively for Front End and Back End
(3:06:22) Extension versus Abstraction: Open/Closed Principle
(3:17:00) Dependency Injection: How, What, and Why?
(3:30:23) Inversion of Control via the Service Locator Pattern

Section 5
(3:44:25) Proving Programs with Tests (a light introduction to Testing)
(4:01:42) Solving Problem (Domains) by Analysis


78 000 просмотров
3,5 часа
Создаем приложение на Kotlin и Jetpack Compose UI, создаем Судоку, 2021 год

Cодержание
(0:00:16) Introduction & Overview: Topics, Source
(0:02:39) App Design Approach: 3rd Party Library Minimalism & MV-Whatever Architecture
(0:04:50) Domain package: Repository Pattern, Enum, Data Class, Sealed Class, Hash Code, Interfaces
(0:34:39) Common package: Extension Functions & Variables, Open-Closed Principle (OCP), Abstract Class, Singleton
(0:50:20) Persistence (Storage) package: Clean Architecture Back End w/ Java File System Storage, Jetpack Proto Datastore
(1:28:07) UI package: Jetpack Compose UI Basics, Styles, Typography, Light & Dark Themes
(1:39:56) UI Components package: Modifiers, Reusable Toolbar & Loading Screens
(1:52:08) UI Active Game Feature package: Presentation Logic & ViewModel w/ Coroutines, Kotlin Function Types
(2:30:55) UI Active Game Feature package: Sudoku Game with Jetpack Compose UI & Activity Container
Note: In a larger App, I'd suggest using Fragments as Containers; didn't make sense to with this app though
(3:15:58) Computation Logic package: Overview, design, and testing of Graph DS & Algos for n-sized *square* Sudokus


57 000 просмотров
1,5 часа
Создаем приложение с эмодзи, 2021 год

Содержание
(00:00) Intro
(01:07) App architecture
(09:05) Firebase Authentication logic
(29:25) User sign up Cloud Function
(42:31) Display user emoji list
(57:13) Update emoji status
(1:07:15) Restrict input to emoji


43 000 просмотров
1 час
Создаем калькулятор чаевых, 2021 год


42 000 просмотров
1,5 часа
Делаем приложение-клон RobiHood, 2021 год

Содержание
(00:00) Intro
(03:41) Retrieving data from the API
(21:43) Building the layout
(31:25) Render the spark line chart
(40:13) Add chart interaction
(54:26) Add colors and state spinner
(1:11:01) Ticker view + radio button styling
(1:23:47) Color update + conclusion

Google


534 000 просмотров
40 минут
Лекция 2017 года

Derek Banas


520 000 просмотров
1,5 часа
Туториал 2017 года

Содержание
00:30 MacOS Install
02:49 Windows Install
04:30 Data Types
12:07 Casting
13:45 Strings
20:43 Arrays
25:52 Ranges
29:54 Conditionals
30:24 If
32:21 When
34:02 For
35:18 While
40:23 Functions
50:44 Higher Order Functions
56:40 Collection Operators
1:01:00 Exception Handling
1:03:05 Lists
1:08:00 Maps
1:10:50 Classes
1:16:00 Inheritance
1:18:12 Interfaces
1:22:22 Null Safety

Google


258 000 просмотров
40 минут
Лекция 2018 года

Traversy Media


286 000 просмотров
1 час
Создаем todo-лист, 2020 год

Содержание
00:00 — Intro
00:33 — What we will build
01:42 — Why choose Kotlin for Android Development?
03:29 — Android Studio Setup
07:17 — Creating the project
08:57 — Android Studio Roundtrip
16:17 — Building the app's layout
35:07 — Writing the Kotlin code for our app
01:03:04 — Recap of what we've done
01:06:25 — Setting up the Android emulator
01:08:15 — Running our app

tutorialsEU


280 000 просмотров
8 часов
Создаем калькулятор «возраста в минуты», 2020 год

Содержание
0:00:00 — Introduction
0:01:10 — Installing Android Studio
0:05:47 — Our First Project — The UI and how to change it
0:15:08 — Setting up the AVD (Android Virtual Device)
0:24:22 — Starting our first app
0:33:04 — Our First App — People Counter App
0:49:05 — Testing on our phone
0:54:49 — Outro for this chapter
0:55:42 — Intro — Fundamentals Chapter
0:57:08 — Basic Concepts of OOP Languages
1:03:13 — Val vs Var
1:11:07 — Datatypes of Numbers
1:19:57 — Datatypes bool, char and string
1:26:41 — Arythmetic operators
1:35:24 — Comparison operators and string interpolation
1:43:51 — assignment operators
1:50:24 — If Statements
2:02:45 — If Statements part 2
2:06:28 — When Expressions
2:18:58 — While Loops
2:26:33 — Do While Loops
2:29:51 — Another way to use while loops
2:33:32 — For Loops
2:38:44 — Functions — Parameters and arguments
2:52:00 — Nullables in Kotlin
3:02:01 — Nullables — elvis operator
3:07:26 — Outro Basics 1
3:08:57 — Intro Basics of OOP
3:10:21 — Classes and Objects
3:15:11 — Classes and Initializers
3:22:16 — Scope and Shadowing
3:27:32 — Member Variables, Functions and Constructors
3:42:00 — Lateinit — Setters and Getters
3:50:57 — Data Classes
4:00:37 — Inheritance
4:15:53 — Interfaces
4:27:07 — Abstract Classes
4:33:07 — Typecasting
4:40:55 — Outro OOP
4:42:19 — Intro more on Kotlin Basics
4:43:51 — Arraylists
4:49:37 — Lambda expressions
4:54:11 — Visibility modifiers
5:05:06 — Nested and Inner Classes
5:09:54 — Safe Casting
5:14:59 — Exception Handling with try and catch
5:30:35 — Outro More Basics
5:32:08 — Intro Age in Minutes App
5:33:39 — Setting up the UI for the App
5:48:22 — Difference of SP, DP Px
6:03:45 — Finalizing the UI
6:08:51 — Adding a DatePickerDialog and OnDateSetListener
6:22:13 — Using the selected Date to Display it
6:33:30 — Outro Age in Minutes
6:34:46 — Intro Calculator App
6:40:46 — Building the UI
6:55:34 — Using onClick and implementing the CLR
7:01:33 — Adding the onDecimalPoint
7:06:41 — Adding the onOperatorFunctionality
7:14:47 — Adding Subtraction — using substring and other string methods
7:27:47 — adding the missing operations
7:38:04 — Outro

Канал с полезностями: tutorialsEU

Telusko


200 000 просмотров
5 часов
Туториал для начинающих 2019 года

Содержание
1. Introduction – 04:13
2. Hello World Program – 08:31
3. How to create Android Project Using Kotlin – 18:38
4. Class & Object – 24:18
5. Var Val – 29:56
6. Kotlin & Java together – 32:51
7. Convert Java & Kotlin – 38:07
8. Decompile Bytecode – 40:06
9. Operators – 46:07
10. String Template – 50:41
11. If Else Expression – 54:11
12. String Comparison – 57:47
13. Null Handling – 01:02:11
14. When Expression – 01:07:04
15. Loop & Range – 01:14:34
16. List & Map – 01:27:20
17. Function Expression – 01:35:23
18. Function calling from Java – 01:44:34
19. Default and Named Parameters – 01:51:20
20. String to Integer – 02:03:21
21. Try Expression – 02:07:32
22. Extension Function – 02:12:17
23. Infix and Operator Overloading – 02:20:20
24. Recursion – 02:27:05
25. Recursion | Factorial – 02:34:46
26. Tail Recursion – 02:41:12
27. Constructor – 02:46:46
28. Secondary Constructor – 02:53:29
29. Inheritance – 02:58:46
30. Constructor in Inheritance – 03:09:35
31. Abstract class – 03:14:21
32. Interface – 03:20:17
33. Data Class – 03:29:32
34. Object Keyword – 03:40:09
35. Anonymous inner class – 03:46:54
36. Companion Object – 03:53:31
37. Companion Object | Factory Pattern – 03:59:08
38. Backtick As Escape Character – 04:03:18
39. User Input in Kotlin – 04:06:42
40. Array – 04:11:48
41. List – 04:21:53
42. List of Objects – 04:30:01
43. Higher Order Function – 04:35:15
44. Filter and Map – 04:49:06

Devslopes


157 000 просмотров
5 часов
Туториал и практика создания 3 приложений, 2020

Содержание
00:00:37 — Intro to Kotlin
00:04:28 — Installing Android Studio on macOS
00:17:12 — Installing Android Studio on Windows
00:27:21 — Installing Intellij for Kotlin on macOS
00:36:00 — Installing Intellij for Kotlin on Windows
00:44:35 — Kotlin Variables
01:01:09 — Kotlin Strings
01:23:03 — Kotlin Numbers & Operators
01:27:31 — Kotlin Functions
01:44:33 — Kotlin Conditional Logic
02:03:41 — Kotlin Collections
02:23:04 — Kotlin Loops
02:31:44 — Kotlin Nullability
02:50:05 — Kotlin Classes & Inheritance
03:18:17 — Kotlin Lambda
03:41:12 — Setting Up Android Emulator
03:53:02 — Dinner Decider App Part 1
04:14:24 — Dinner Decider App Part 2
04:38:07 — Dinner Decider App Part 3
04:49:01 — Installing to a Real Device from macOS
04:55:42 — Installing to a Real Device from Windows

Donn Felker — Freelancing for Software Developers


36 000 просмотров
9,5 часов
Полный курс 2021 года

Содержание
0:00:00 Welcome
0:02:07 Installing IntelliJ
0:03:20 Creating your First Kotlin File
0:04:38 Updating the Kotlin Plugin
0:05:43 Hello World
0:06:49 Creating a Variable
0:10:06 Creating a Read only Variable
0:12:19 Providing a Type on a Variable
0:14:00 Basic Types: Numbers
0:21:14 Basic Types: String and Char
0:24:11 String Interpolation and Triple Quotes
0:29:26 Basic Types: Boolean
0:31:18 If/Else Conditionals
0:36:25 One Line If/Else Conditional
0:40:17 Understanding Truth Tables
0:46:08 Structural Equality
0:48:19 Referential Equality
0:50:46 Nullable Types
0:52:12 Nullable Safe Calls
0:55:48 The Elvis Operator
0:57:49 Your First Kotlin Function
1:03:29 Functions with Return Types
1:08:49 Functions inside of Functions
1:11:51 Single Line Expressions
1:15:59 Function Arguments
1:21:49 Named Parameters
1:26:14 Default Function Arguments
1:30:44 IDE Refactoring to New LInes and Named Arguments
1:32:13 Multiple Args with varargs
1:34:57 Function Overloading
1:38:30 Creating your First Kotlin Class
1:45:31 Class Primary Constructors
1:49:18 Multiple Class Constructors
1:57:18 Constructor Init Blocks
2:00:57 Class Properties
2:04:00 Read Class Properties
2:04:54 Overriding a Property Getter
2:06:35 Overriding a Property Setter
2:09:42 Multiple Properties in a Class
2:11:11 Class Functions
2:15:51 Companion Objects
2:21:32 How to Create a Singleton
2:29:09 Declaring Constants
2:36:09 The lateinit modifier
2:40:23 How to Nest Classes
2:43:57 Inner Classes
2:46:56 Creating an Enum
2:51:36 Enum Constructor Parameters
2:55:27 Abstract Functions in Kotlin
2:58:51 Iterating over Enum Values
3:00:04 Adding Static Methods to Enums
3:01:37 The When Statement (Kotlin Switch Statement)
3:08:19 Exhaustive vs Non-Exhaustive When
3:15:09 Data Classes
3:19:27 Data Class with Parameterless Constructor
3:20:40 Data Class: Component1-N functions
3:24:15 Destructuring Data Classes
3:27:47 Copying Data Class Instances
3:31:17 The Pair and Triple Data Classes
3:33:50 Protected Modifier for Variables
3:40:53 Protected Modifier for Functions
3:47:02 Internal Modifier for Classes
3:55:07 Abstract Classes
3:59:45 Implementing an Abstract Class
4:13:30 Understanding Abstractions with Abstract Classes
4:17:52 What interfaces are used for
4:26:28 Creating an Interface
4:27:32 Implementing an Interface
4:28:51 Real World Interface Example
4:35:39 Anonymous Interfaces
4:40:34 Creating Arrays
4:47:06 Creating Immutable Lists
4:52:46 Creating Mutable Lists
5:00:47 Filtering a List
5:06:28 Finding Items in a List
5:12:44 Using «filterNot» on a List
5:14:10 filterTo and filterNotTo on Lists
5:16:40 Flattening Lists and Arrays
5:19:39 Combining Immutable Lists
5:21:21 List vs Map
5:29:40 Map vs FlatMap
5:34:15 Set Data Structure (a List with no Duplicates)
5:39:05 For Loops
5:44:13 While Loops
5:47:59 For Each Loops
5:51:03 Combining Lists with the Union Operator
5:53:53 Iterating over a List with an Index
5:55:28 Ranges
5:56:59 Immutable Maps
6:00:49 Mutable Maps
6:08:29 Filtering and Transforming Maps
6:16:30 Using mapNotNull on a Map
6:20:22 Generating Large Sequences
6:23:11 Measuring Performance
6:31:33 Kotlin Sequences
6:44:19 List vs Set vs Map vs Sequence
6:49:25 Kotlin Ternary Operator: Single Line If
6:50:51 Double Bang!!! Operator
6:54:58 Using requireNotNull()
6:59:04 Using checkNotNull()
7:01:05 Filtering a List with filterNotNull()
7:02:20 Type Checking with 'is'
7:08:52 Casting
7:11:36 Safe Casting with 'as'
7:14:58 Generic Lists and Maps
7:19:50 Your First Generic Class
7:27:06 Throwing Exceptions
7:29:54 Creating a Custom Exception
7:32:44 Catching Exceptions with Try/Catch
7:36:09 Catching Multiple Exception Types
7:40:43 Try/Catch/Finally blocks
7:44:52 Try/Catch vs Try/Finally
7:47:27 Creating a typealias
7:50:38 Extension Functions
7:59:14 Lazy Evaluation
8:02:26 Lazy Initializer Block
8:05:42 Packages and Imports
8:14:04 Type Inference
8:21:09 Simple Lambda Expressions
8:34:29 Lambdas as Function Parameters
8:40:23 Passing Values to Lambda Function Parameters
8:51:37 Underscore Parameters in Lamba Functions
8:54:24 The 'it' Paramter in Lambda Functions
8:56:38 Calling Kotlin from Java
8:59:39 Calling Java from Kotlin
9:04:51 Calling an Extension Function from Java
9:07:50 @JvmName Annotation
9:10:21 Top Level Main Functions
9:11:15 Kotlin REPL
9:13:52 Project: Setup
9:15:54 Project: Reading Input
9:20:16 Project: Calculator Logic
9:28:04 Project: Adding Validation
9:35:54 Project: Compiling to a Jar File and Execution
9:38:21 Kotlin Koans
9:40:09 Congratulations

CodingWithMitch


канал: CodingWithMitch

14 000 просмотров
2019 год

Stevdza-San


Канал: Stevdza-San
2020 год


канал: Philipp Lackner

Rahul Pandey


64 000 просмотров
12 минут
2021 год

Devslopes


4 500 просмотров
16 минут
Учимся валидировать формы регистрации, 2021 год
Канал с полезностями: Devslopes

На русском


Devcolibri


180 000 просмотров
18 уроков по 5-10 минут
2016 год

Start Android

143 000 просмотров
19 уроков по 10 минут
2017 год

Гоша Дударь


113 000 просмотров
2019 год
Канал: Гоша Дударь

Neco Ru


41 000 просмотров
34 урока по 20 минут
Курс по KOTLIN и ANDROID STUDIO для начинающих 2021 года

alishev


40 000 просмотров
Kotlin за час. Теория и практика
2021 год

Войти в IT через Minecraft и Яндекс / Всё о Kotlin и Android / Интервью с Kotlin Developer


182 000 просморов
Интервью 1,5 часа
2019 год

JUG .ru


34 000 просмотров
Лекция 1 час
Роман Елизаров «Корутины в Kotlin», 2018 год

Еще полезные онтолы



Теги:
Хабы:
Всего голосов 40: ↑33 и ↓7 +26
Просмотры 8.9K
Комментарии Комментарии 15

Информация

Дата основания
Местоположение
Россия
Сайт
cloud.timeweb.com
Численность
201–500 человек
Дата регистрации