Rails Conf 2012 Keynote: Simplicity Matters by Rich Hickey

  Рет қаралды 201,633

Confreaks

Confreaks

Күн бұрын

Rich Hickey, the author of Clojure and designer of Datomic, is a software developer with over 20 years of experience in various domains. Rich has worked on scheduling systems, broadcast automation, audio analysis and fingerprinting, database design, yield management, exit poll systems, and machine listening, in a variety of languages.

Пікірлер: 107
@MartinChabot
@MartinChabot 8 жыл бұрын
One of the best programming talk that I have watched.
@Spudst3r
@Spudst3r 8 жыл бұрын
8:16 "As we move forward we have to take what we already have and make that elephant do more, make it do things differently, make it do things better, and as we try to take on manipulating software we are going to be challenged to understand it in order to make that happen. And I'll contend that you will completely be dominated by complexity. I don't care what processes you are using, I don't care how well you test or anything else. Complexity will dominate what you do." SO true.
@teckyify
@teckyify 5 жыл бұрын
Should be placed in every church
@pragyandas
@pragyandas 7 жыл бұрын
I am a huge fan of Rich Hickey. The summary I get from this talk is "We all care about agile methodologies agile teams but how many of us actually care about agile architecture?". This is one of the best talks ever....so simple...so lucid...or just simple made easy.
@gary000
@gary000 7 жыл бұрын
a timeless classic
@ozkansafak
@ozkansafak 10 жыл бұрын
Excellent talk. He has the mind of a visionary and a leader.
@bicunisa
@bicunisa 4 жыл бұрын
This talk is timeless.
@LucasBatistussi
@LucasBatistussi 6 жыл бұрын
Listening to Rich Hickey is liberating!
@michelklabbers
@michelklabbers 7 жыл бұрын
Great talk. Liked it a lot. A note on "22:16 Simplicity -- the art of maximizing the work not done -- is essential." I want to add some nuance here. Imho "Simplicity -- the art of maximizing the work not done -- is essential" is a way to say "Don't try to build a rocket when a bycicle is what the customer wants and needs". This definition of Simplicity is more like a definition of Simplicity in Agile, whereas the Simplicity Rich Hickey is talking about is Simplicity in Code.
@kris1227
@kris1227 8 жыл бұрын
Love this talk
@bradw2k
@bradw2k 9 жыл бұрын
Great talk!
@mikl2345
@mikl2345 4 жыл бұрын
Great for inspiration to take on the hard work of pursuing simplicity.
@girishsonawane7022
@girishsonawane7022 2 жыл бұрын
What a wonderful talk!
@DavidDouglasJr
@DavidDouglasJr 11 жыл бұрын
With a name like Rich Hickey, one can't help but be a linguist.
@JoshuaRaichur
@JoshuaRaichur 9 жыл бұрын
Inspiring!
@JayJay-ki4mi
@JayJay-ki4mi Жыл бұрын
No idea why I'm watching this in 2022. Was interested to see the development of rails.
@frozen_tortus
@frozen_tortus 5 жыл бұрын
This guy would have a stroke if have seen some of the 500MB+ npm 'gems' we are doing in js.
@ShaunPatterson
@ShaunPatterson 7 жыл бұрын
Great talk
@DavidDouglasJr
@DavidDouglasJr 11 жыл бұрын
My friend on Rich: "we're gonna have to put his ass to work on the twitter backend"
@tonybaroneee
@tonybaroneee 12 жыл бұрын
Brilliant.
@glorphindale
@glorphindale 12 жыл бұрын
Classes mostly complect state and behavior, without giving much in return. foo.bar(arg) invocation is just a syntactic sugar for bar(foo, arg), as it is done in Python, for example. Tacit knowledge recreation can be done via good namespaces and transparent naming conventions.
@teckyify
@teckyify 5 жыл бұрын
gem install complexity
@alurma
@alurma 2 жыл бұрын
Great!
@thomas.moerman
@thomas.moerman 12 жыл бұрын
related talk: "Simple made easy" on InfoQ
@loupax
@loupax 9 жыл бұрын
And then you try to convince that "This is an empty class that only has properties, no functionality that needs to be maintained and commented" and you get "we keep it because it the IDE auto-completes the object properties". :(
@gompro
@gompro 5 жыл бұрын
Today's quote - "11:10 Design is about taking things apart".
@gagansrai8137
@gagansrai8137 3 жыл бұрын
this is the modern react ecosystem, so complected, react, redux, styled components, babel, webpack, next, typescript react-query etc etc
@mark4asp
@mark4asp 11 жыл бұрын
No. Please watch "Simple made Easy" - the first one from Strange Loop 2011 - it's on infoq. The so-called hostility is actually humor. If you have no sense of humor, I guess you'll see all of Rich's comments on the mainstream as "hostile".
@tyapka
@tyapka 4 жыл бұрын
Snow is white, sky is blue, simple is better than complex...
@antonios.k
@antonios.k 9 жыл бұрын
Simple
@kootenpv
@kootenpv 5 жыл бұрын
I was very excited when I watched this, but afterwards I'm having a few worries. Without any structure, how we can have any integrity in our apps? If all the data structures are like hashes/dicts/maps, then sure, it is easy to change things, but how can you ever feel safe your code is working? There's going to be a lot of errors at runtime?
@sondepalo8951
@sondepalo8951 4 жыл бұрын
@@nxtktube Using hashes, it is very easy to screw up structure inside the system boundaries and affect other parts of it that expect structure to be valid.
@Neo2551
@Neo2551 4 жыл бұрын
Usually, you need structure at the boundaries of your API/programs. You want to define a contract at these points and you can using validation, specifications to enforce them. But inside your program, you should try to code with values (ints, floats, strings, dates, keywords, associative structure and sequential ones).
@advance512
@advance512 4 жыл бұрын
@@Neo2551 Why? Why limit the usage of a great tool? Use contracts everywhere it is useful. Why not?
@Neo2551
@Neo2551 4 жыл бұрын
@@advance512 because it also has an essential cost and you should be free to decide if the benefits are worth it. A contract basically bind you and probably restrict you in the genericity as well. We are all adults in the end, so we are free to decide if a tool (type logic, or predicative logic) is suited or not.
@advance512
@advance512 4 жыл бұрын
@@Neo2551 Sure, you're free to decide it for yourself. Typing, or to a lesser extent type hinting, has an essential cost but the benefits are huge. It is a good example of a contract inside the program's boundaries that is incredible helpful. Total freedom is not always more productive than a clear opinionated framework to work within.
@epgui
@epgui 10 ай бұрын
25:54 I agree with Rich that tuples are a product type, but in the context of the example he gives, I think he does the rationale behind product types a disservice. Clojure is full of product types. The "syntax" for function definitions in Clojure is a product type: if you write ([x] (* 2 x) double-it defn) you're not going to have a good time! Product types are fundamentally unavoidable. I do agree that when order does not matter, product types are inappropriate. I think that's the main point.
@glorphindale
@glorphindale 12 жыл бұрын
Object-orientation is a good example of needless complection. It provides little new concepts in comparison to structural programming.
@reflechant
@reflechant 6 жыл бұрын
What structural programming do you mean? If you take not even Pascal but Go you will find it painful to use for many tasks. Lack of polymorphism and strong typing. If you write in Python in "structural" style you actually have all the power of a dynamic language where everything is an object actually but you just don't write your own classes. And it's a huuuge difference.
@RogerBarraud
@RogerBarraud 6 жыл бұрын
Heyyy - I fold my Software... When I'm using Occam. :-)
@josevargas686
@josevargas686 Жыл бұрын
13:13 🔝
@mijmijrm
@mijmijrm 5 жыл бұрын
simple vs easy .. a good example might be the considering alternative math systems: {complex number and infinity} math system is simple .. vs "real" number math system is easy (but cumbersome) ie. (complex number, infinity) -> function eg sin, cos, tan sqrt -> (complex number, infinity) .. all of the domain is valid for all math operations and maps back into the domain. (real number) -> function eg sin, cos, tan sqrt -> (real number or error .. it depends) .. valid domain needs to be considered for each function .. the less rules about the domain, the simpler and more useful to use. .. but maybe not easy to set up. The problem with the math system is that "real" numbers are what we're used to (thus easy) and "complex" numbers are typically presented to the newcomer as strange and unnatural, and infinity presented as an outright insult to reality. (really, though .. they're all simply symbols for processing) For some reason *all* the programming languages (except one) do the math thing backwards where they provide the cumbersome (but easy to implement) "real" system and make us work hard to get the simple complex number + infinity system. (the exception being the J Programming Langauage .. eg. right from the very getgo .. sqrt _7j24 -> 3j4, log _1 -> 0j3.14159)
@matthewprestifilippo6611
@matthewprestifilippo6611 4 жыл бұрын
Isn't it a paradox to say consistency is simpler than inconsistency? I assume consistency is basically being aware of the state around you, i.e. why you need transactions which handle state operations at a specific point in time: "Is anyone else appending to this file right now? ...no? okay, I get to append to it now..." Also, I don't think this means that inconsistency is simple, or simpler, either. There is basically always going to be complexity with state management, and the one that is simpler I think depends on context.
@darkengine5931
@darkengine5931 3 жыл бұрын
The typical difference to me for a more imperative style is that the context is no longer obvious and anything that is done in the wrong order, or at the wrong time, results in malfunction. Consider an example like: obj.do_a(...); ... obj.do_b(...); ... obj.do_c(...); ... where the order of operations here must precisely be 'a' before 'b', and 'b' before 'c', to produce correct behavior and avoid some potentially very obscure bugs like data races. That is highly prone to misuse, especially with parallel execution in the mix. It's not just requiring a full-blown awareness of the entire context, but allowing human errors related to misunderstanding of the context to easily slip through the cracks. For a crude analogy, it's like having a computer where clicking the mouse button before you finish booting into the operating system causes the motherboard to catch on fire. Then contrast it to functional: a = do_a(...); ... b = do_b(a); ... c = do_c(b); That still requires awareness of context but it makes it impossible to make such deadly mistakes since we cannot call 'b' until we get the results of 'a' in this case, which 'b' requires passing in. That is like a system where the mouse doesn't even get power and become enabled and light up until the operating system finishes booting if it's prone to cause a problem to try to use it before that. This also allows efficient and safe multithreading, since many threads could be simultaneously and safely calling 'do_a', and all get back results that they can pass to 'do_b', and pass those results to 'do_c'. We're free to parallelize to our hearts' content without locking since these are pure functions that have no side effects.
@jeffreycliff922
@jeffreycliff922 2 жыл бұрын
@12:49 Not all programmers ignore these tradeoffs. Some of us put a lot of thought into this sort of thing
@youtubeenjoyer1743
@youtubeenjoyer1743 4 ай бұрын
Looking at millions and billions and trillions of very popular shit libraries for the most used languages, i conclude that there are not enough of these programmers.
@IKEA12345678900
@IKEA12345678900 3 жыл бұрын
This man really vibing in 2012
@tryptamigo
@tryptamigo 11 жыл бұрын
Thanks for the update from the year 1992.
@DanielMircea
@DanielMircea 2 жыл бұрын
There were lots of great things here, but some things like using hashes over objects make little sense to me. Classes act like a validation schema, whereas hashes can take whatever arbitrary fields you set on them. There's a reason why refactoring large code bases in languages like java or c# is so much easier than ruby, and this sort of approach only pushes ruby in the opposite direction.
@gxferreira
@gxferreira Жыл бұрын
Thanks for this comment Daniel, I loved the until he went against classes. With the validation and refactoring benefits also could be mentioned the gain in scalability and communication. I guess for the main system components classes might be the best choice.
@septic7
@septic7 Жыл бұрын
If you have a large code base than your code is too complex for a data driven approach
@LordTerabyte
@LordTerabyte 7 жыл бұрын
Why is Weird Al talking about programming? Great talk.
@jackpamm2457
@jackpamm2457 9 жыл бұрын
Great stuff overall, with one exception -- the advice at 29:03 to use hashes/maps instead of objects.. I've seen medium-to-large applications based on generic data structures - and they all have been terrible to understand and change! That's exactly the opposite of "simplicity", because these hash/maps become "complected" by the various contexts they are used in - you never know which "fields" are always present, which are sometimes/never present. It appears easy when you have trivial data models, but that's rare. Most applications manipulate objects with dozens of fields, some of which are dependent on other fields, and may be even object. So, I respect Rich Hickley, and his advise is mostly good, but he erred on this point very deeply. Object/data encapsulation is goodness. IntelliSense is goodness. Hash/maps are useful only within a very defined context - like, when performing algorithmic transformations or data interchange.
@AdamMiller78
@AdamMiller78 9 жыл бұрын
Don't replace documentation with an object system....the worst thing you could do! Hickey is right and you are wrong I'm afraid. Data can represent itself just fine!
@WilkerLucio
@WilkerLucio 9 жыл бұрын
I actually think the opposite of that. Having it being generic data structures is very easy to reuse functions, I think in the problem you described you can get it to make sense by doing some assertions on the functions input (to verify if the map has the data you need) so you can find the problem points, in the long run a good test suite should reduce those problems to minimum, I think that's someone about simplicity, is getting the proper time to design your inputs/outputs so you can reduce the complexity at most, and nothing is simpler than having all inputs and outputs as simple data.
@togos56
@togos56 9 жыл бұрын
Jack Pamm I had similar thoughts, at first. But this is my counter-point: Using a generic data structure makes it easier to write custom code to do validation as well as various other mundane operations. Yes, you will miss compile-time / IDE validation, but the added flexibility...might make up for it. Of course ideally you'd want something that gives you the ease of use as a generic data structure *and* compile-time validation.
@jestempies
@jestempies 8 жыл бұрын
I think that the comparison to RESTful APIs is apt. Yes, they usually use something like JSON which is as generic as they get. All the actual typing and defining of things takes place in API documentation and standardization. Using a class inside an application is also a way of defining an API. I think it's a much easier and straightforward way to define an API. But what you don't want is APIs that are poorly or not at all defined. If you're writing a simple blog app you can get away with using an array with 'id', 'title' and 'body'. I'm not sure what awesome universal way of transforming that generic data structure this enables, unless you want to like map($data, 'uppercase') or something. But when you get to the level of complexity of most mature apps you need your APIs defined and adhered to. Another advantage of using typed structures is the discoverability. If someone passes you an array/hash called $blogPost you don't really know what it contains unless you look up the source of that array/hash which can be troublesome. It could, for example, be based on a number of entities in a database collated etc. An object has getters which you can easily look up.
@WilkerLucio
@WilkerLucio 8 жыл бұрын
well, Clojure 1.9 is going to solve the this issue of "not knowing what's coming" with the clojure.spec, clojure.org/guides/spec, using specs is even better than just types, because specs can specificy much more (for instance, a number in a range, regexp expressions for sequences, key-map relationships and much more).
@wenhoujx
@wenhoujx 6 жыл бұрын
I should use hash/map instead of classes? how does that make code more readable?
@wenhoujx
@wenhoujx 3 жыл бұрын
@Ankush Thakur not convinced at all, give me an example.
@aledmb
@aledmb 9 жыл бұрын
ok, i get it that it's better to keep it simple, but functions are easier to maintain than methods??? where does that come from?
@jwwishart
@jwwishart 9 жыл бұрын
A function stands alone having inputs and outputs. Methods come with associated state which can complicate understanding the method. Functions have inputs and outputs, methods have inputs, outputs and associated state. That I think is the sense in which they are more complex.
@jestempies
@jestempies 8 жыл бұрын
If you need state you're still going to need state. It's just that your state will be kept outside of that particular function and will not be directly accessible from it. That may or may not make the function simpler, but the overall complexity is unlikely to have been reduced.
@CurlyCow
@CurlyCow 6 жыл бұрын
I have to disagree. If your state and your function are inextricably linked (which is definitely the case with functions that are methods) then that makes things more complicated, as opposed to using functions that are "agnostic" with regard to state and can be transplanted anywhere else. I think Rich Hickey makes a more apt variant of this point in this talk.
@sergueif89
@sergueif89 12 жыл бұрын
Don't watch "Simple made easy" on InfoQ. This talk is a much improved version of that talk, because he cut down on hostility and promotion of functional programming. Which is meta great, because it's an application of his principle. "Simple made easy" on InfoQ complects the above discussion with hostility towards object-orientation, and with promotion of FP. Now his talk almost only promotes the "simplicity/complexity" discussion and thus is simple.
@jiggasnap
@jiggasnap 7 жыл бұрын
I think that the OO approach confers some simplicity in large systems in that you know where everything is. Until he came up with the RESTful analogy, I wasn't buying his argument. We do OO for a reason, it reduces the cognitive load of having to think of where things are. When you have a program with 150+ code files, this becomes an issue. It seems like one could get the best of both worlds by replacing objects with some kind of construct that lumps functions together, where each of the functions contained takes a map as argument. Pretty cool ideas. Of course, if you start coding this way you will make things a lot less simple for whoever will work with you, since you will increase their cognitive load (at least during the time period where he gets used to the simpler style).
@lcjury
@lcjury 7 жыл бұрын
but he talks about simplicity, not about coding faster. For example, read the gang of four, they and many people say that you must replace most parts of inheritance with composition
@bobbycrosby9765
@bobbycrosby9765 2 жыл бұрын
You're confusing simple with easy.
@youtubeenjoyer1743
@youtubeenjoyer1743 5 ай бұрын
I think we do OO for no reason, actually.
@therealdrag0
@therealdrag0 4 жыл бұрын
I agree with the thesis: aggressively pursue simplicity. But I'm not sure I agree with his examples/conclusions, or at least didn't find them helpful.
@sondepalo8951
@sondepalo8951 4 жыл бұрын
Agreed.
@Spudst3r
@Spudst3r 8 жыл бұрын
21:27 Don't necessarily agree with him on ORM's. I have no doubts that *maintaining* the complexity of an ORM package is extremely complex, but for actual application development ORM's are far easier to use quickly than writing SQL.
@teckyify
@teckyify 8 жыл бұрын
+Spuds7er Really, "far easier"? He says that this "complexity" is "easy" to get and programmers get way too easily excited only about the benefits of something and ignore what else they get with that. That is sooooo true, it's not even funny. Don't forget how much time we all spend with ORMs over our lifetime. We probably should have written SQL all along. A simple wrapper to simplify the SQL execution should be sufficient. We would always exactly see which statements are executed, we could tweak and modify it precisely, debug it and beyond that we have to know SQL anyways for debugging. Also, for more advanced cases we have to write SQL anyways. So it's also a leaky abstraction. So many questionable things about ORMs.
@Spudst3r
@Spudst3r 8 жыл бұрын
AktionJackson I actually know a Rails project that completely eschewed ActiveRecord for manual SQL. It's a nightmare and the project is having a hard time finding people who want to work on it. ActiveRecord ORM gives you a lot of powerful functionality for way less mental overheard than would be needed if writing SQL manually. In many cases it's all you need unless you're trying to do something very complex or high traffic. Things like chaining scopes are great abstractions that make it easy for core behaviour to be abstracted. E.g. User.where(active: false).all is a great abstraction over normal SQL.
@teckyify
@teckyify 8 жыл бұрын
+Spuds7er That tells more about the project than the discussed issue though, I don't see an inherent relation. Your given example is especially great because every single tiny thing gets a class, but the ugly side of an ORM especially shows quickly when things get complicated (i.e. something trivial like pivot tables). Writing a generic comparison wrapper for you example is just a few lines of code which you can perfectly tweak, modify and debug and is blazing fast.
@MrGuardianX
@MrGuardianX 7 жыл бұрын
You would be quickly overrun by complexity with this approach. Thats why ORMs actually came to be. To solve those stupid direct SQL queries. It is not like we use ORMs where what you want is a simple single SQL query anyway. Actually, ORMs simplify things for us. They allow us to directly map the data without caring about SQL, caches, wrong selections, typos and other stuff. Map it and use it as you would use any other object in program. I don't see any problems with this approach.
@vyorkin
@vyorkin 7 жыл бұрын
kenektik, and what usually happens with all these rails projects that use ActiveRecord after several years? but yes, it doesn't mean we should put SQL statements everywhere instead of using AR
@derekfrost8991
@derekfrost8991 5 жыл бұрын
The rest is just PLOP.. :)
@tryptamigo
@tryptamigo 11 жыл бұрын
Lisp adoption? Not writing classes because Hickey says not to? Concurrency? Sounds like you're complecting this simple video with some personal baggage.
@mykevidrio5129
@mykevidrio5129 3 жыл бұрын
The cautious spain aetiologically sin because produce electrophoretically divide at a freezing share. opposite, adhesive fifth
@kinkokonko
@kinkokonko 11 жыл бұрын
The main problem with this and the idea of Clojure is there is no business requirement and there is no benefit out weighing adoption cost. I think Rich needs to seriously look at the model is he wants a broad adoption. 1. No one will code in Lisp. Odersky knows this much. 2. The ideas of 'hard concurrent problems' are unfounded. we have been doing these from day one. Yes pure immutability leads to easier programs. but do you really say 'I cant model an object because Rich says data rules'
@kinkokonko
@kinkokonko 11 жыл бұрын
Thanks. Can you keep posting Clojure Jobs here? i.e None They will fit in 500 words ( or 1 per word your brain cell )
@Spudst3r
@Spudst3r 7 жыл бұрын
Dude he's presenting to RUBY/RAILS DEVELOPERS. Stop being such a troll. FYI: I know a 200 person tech company that actively hires for Clojure.
@MrGuardianX
@MrGuardianX 7 жыл бұрын
I don't find it useful at all. Where are the concrete real world examples? No single one.
@Spudst3r
@Spudst3r 7 жыл бұрын
His concrete examples begins around 23:57 with his comment about how order or "chaining" methods is much more complex than unordered data structures like hashes, or using queues. That's a concrete example.
@kinkokonko
@kinkokonko 11 жыл бұрын
I find it very amusing the my comment was flagged based on its objectivity to the subject, I wish Clojure the best of luck, It does very much need it. My comments are still fact, Clojure is going no where because its based on an ideal that has never seen the light of day in 50 years, Bit like Haskell. Ideas with no pragmatism or realism I will code Java for the next 20 years and I expect you and many others will
@allendupras
@allendupras 5 жыл бұрын
what do you think now?? Has your opinion changed in five years?
@youtubeenjoyer1743
@youtubeenjoyer1743 5 ай бұрын
@@allendupras He is still to busy migrating from java 1.8 to this day.
@arquebus77
@arquebus77 5 жыл бұрын
Rich Hickey totally does not understand what simplicity is. He would do well to watch some Alan Kay talks on simplicity because the IT industry is still using 50 year old technology- the unix family of operating systems for everything other than windows and the C programming language is the defacto low level standard. So Rich thinks he is attacking complexity because he revived/modernized a 60 year old programming language. Im not going to say that Rich is not innovating because Datomic does bring novel ideas to the table. But overall innovation and research in the IT is stagnant and he is not really looking at the big picture but rather treating the 'worse is better' problem with small bandaids.
@ashconnor
@ashconnor 4 жыл бұрын
The unix family of operating systems has lasted 50+ years because they are (relatively) simple.
@janissary101
@janissary101 12 жыл бұрын
Great talk!
The Language of the System - Rich Hickey
1:02:50
ClojureTV
Рет қаралды 162 М.
The Value of Values with Rich Hickey
31:44
InfoQ
Рет қаралды 131 М.
Заметили?
00:11
Double Bubble
Рет қаралды 3,4 МЛН
Китайка и Пчелка 4 серия😂😆
00:19
KITAYKA
Рет қаралды 3 МЛН
ELE QUEBROU A TAÇA DE FUTEBOL
00:45
Matheus Kriwat
Рет қаралды 33 МЛН
"Simple Made Easy" - Rich Hickey (2011)
1:01:39
Strange Loop Conference
Рет қаралды 82 М.
Bret Victor - Inventing on Principle
54:20
Rui Oliveira
Рет қаралды 289 М.
RailsConf 2014 - All the Little Things by Sandi Metz
38:47
Confreaks
Рет қаралды 169 М.
Maybe Not - Rich Hickey
1:03:29
ClojureTV
Рет қаралды 155 М.
"Simple Made Easy" - Rich Hickey (2011)
1:01:39
ClojureTV
Рет қаралды 64 М.
Expert to Expert: Rich Hickey and Brian Beckman - Inside Clojure
53:56
jasonofthel33t
Рет қаралды 111 М.
Alan Kay, 2015: Power of Simplicity
51:07
Kenneth Friedman
Рет қаралды 127 М.
"Transducers" by Rich Hickey
45:00
Strange Loop Conference
Рет қаралды 107 М.
Clojure Concurrency - Rich Hickey
2:32:39
ClojureTV
Рет қаралды 68 М.
Design Microservice Architectures the Right Way
48:30
InfoQ
Рет қаралды 706 М.
iPhone 15 Unboxing Paper diy
0:57
Cute Fay
Рет қаралды 2 МЛН
ПРОБЛЕМА МЕХАНИЧЕСКИХ КЛАВИАТУР!🤬
0:59
Корнеич
Рет қаралды 3,8 МЛН
Очень странные дела PS 4 Pro
1:00
ТЕХНОБЛОГ ГУБАРЕВ СЕРГЕЙ
Рет қаралды 434 М.
ПК с Авито за 3000р
0:58
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 1,9 МЛН
Iphone or nokia
0:15
rishton vines😇
Рет қаралды 1,1 МЛН
i love you subscriber ♥️ #iphone #iphonefold #shortvideo
0:14