Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Lua. кто-нибудь пользуется? почему это хорошо?

752  1 2 3 все
  moose старожил11.12.17 15:43
11.12.17 15:43 

столкнулся с такой интересной архитектурой: в чипе прошивается интерпретатор луа, который после загрузки ищет файл с определенным именем, в котором луа-скрипт, а дальше все оттуда управляется.

архитектура не новая, java тоже создавалась когда-то с мыслью программировать "игрушки".

смущает, что сама луа занимает прилично памяти (хотя ее футпринт на порядок меньше, чем у python'а, но в конце-концов зависит от того, какой функционалитет мы включим в этот интерпретатор (есть "стандартный" вариант прошивки, и можно скомпилировать индивидуально). некая RTOS, но убогенькая, как мне показалось. и сырая

пошел на сайт производителя чипа, https://nodemcu-build.com/, там они предлагают самому выбрать конфигурацию, они сгенерируют байнэри и вышлют. выслали. прошил. чип вместо того чтобы сказать, как при дифолтном, что он не находит инициализационного файла, "пришел в панику": начал что-то делать, вообще непонятно что. я устал с этим разбираться. может, кто-то уже пробовал и подскажет? пока перепрошил "нормальным" си-кодом, чип работает без проблем (в нужном мне объеме), но нервирует, что не получился эксперимент.

#1 
AlexNek патриот11.12.17 21:46
AlexNek
NEW 11.12.17 21:46 
в ответ moose 11.12.17 15:43

А что можно хорошего ожидать от кодогенератора, наверняка чего то нестандартного захотелось.

А эмулятора для отладки нет?

#2 
  moose старожил11.12.17 22:58
NEW 11.12.17 22:58 
в ответ AlexNek 11.12.17 21:46, Последний раз изменено 11.12.17 23:01 (moose)

в принципе есть и кроссплатформ компайлеры и много чего еще, но дибажить, вроде, нечем. по крайней мере, нет никакой гарантии, что если все правильно в дивэлопмэнт окружении, то оно так же все будет и на устройстве. брэйкпоинт поставить и посмотреть, что там с переменными - никаких шансов. что-то от психологии бедного мужика. но скорее всего, я просто не понимаю, чем это так хорошо. наверняка имеются случаи, где это (или подобное) оправдано. у nordic semiconductor это называется soft device, у большинства - просто RTOS, однако там код пишется на с/с++. все это, конечно, лучше, чем все писать на ассемблере, и только если имеется что-то готовое, перенимать, на чем бы оно не было сделано, как я это делаю. но я могу себе это позволить, т.к. никто мне не говорит, что и как, я сам определяю, и могу выбрать не то, что производительно, а то, что мне хочется. а если идет работа над коммерческим продуктом, там от выбора платформы/технологии во многом зависит успех/провал. почему для кого-то луа - хорошее решение, я пока не поймал.

как-то (года два назад) ездил собеседоваться в фирму, которая забыл уже что разрабатывает, но они для гуи своего продукта используют javaFX. спросил, имеют ли они целью мультиплатформенность. ответ - нет, только windows. тогда спросил, откуда такой выбор. честно признались, что лучше всего (а похоже, что только и всего) "главный" знает java, и они решили таким образом выбрать цукунфтзихэрэ тэхнологи. но луа, в отличие от жавы, похоже, скорее экзотика, чем то, что знает каждый студент. поэтому ее применение не может быть вызвано тем, что "мы знаем только луа, поэтому...".

не догоняю пока...

#3 
AlexNek патриот11.12.17 23:27
AlexNek
NEW 11.12.17 23:27 
в ответ moose 11.12.17 22:58

К сожалению, с Луа совсем не знаком, но применять скриптовые языки в железяке, как то напрягает. Помню как то плюсы засунул, когда все С пользовали, но давно это было. Сейчас с железяками на уровне АПИ, не ниже.

#4 
  moose старожил12.12.17 10:49
NEW 12.12.17 10:49 
в ответ AlexNek 11.12.17 23:27
К сожалению, с Луа совсем не знаком

да я тоже. вот только начал разбираться, и оно меня только расстроило...


применять скриптовые языки в железяке, как то напрягает.

не знаю. если бы оно работало, как обещает, то почему нет? вам не нужно весь чип перепрошивать, там есть простенькая файловая система (SPIFFS: SPI Flash File System), наличие которой позволяет не переписывать каждый раз весь чип, а только те файлы, которые вы изменили. а скрипты здесь очень даже кстати, и язык вполне достаточный для приложений, работающих "в игрушках".


#5 
AlexNek патриот12.12.17 21:44
AlexNek
NEW 12.12.17 21:44 
в ответ moose 12.12.17 10:49
и оно меня только расстроило...

А отчего расстроило, ну не получилось как хотелось - часто бывает. У разработчиков то получается,значит какие то отличия были.

Я просто пока не сталкивался с "игрушками"

#6 
  moose старожил12.12.17 23:32
NEW 12.12.17 23:32 
в ответ AlexNek 12.12.17 21:44
Я просто пока не сталкивался с "игрушками"

знаю. а то бы вы давно разрулили мою проблему : )

я сегодня ее уже и сам разрулил. обыдно стало, решил вернуться к теме, почитать побольше (иногда полезно : ), и оказалось, что вычитал причину: при ПЕРЕпрошивках нужно учитывать тот факт, что при этом перезаписывается только память, занимаемая новой версией, остальное остается как было. а эта фирмвара лезет за пределы своей памяти, предполагая, что там находится "файловая система" (о которой я писал), отформатированная исходя из размеров самой фирмвары. а форматируется она только, если там ничего нет. а там - файловая система, созданная предыдущей прошивкой. поэтому сперва следует потереть весь флэш, и только потом аплоудить новую версию. проделал это все (пришлось и python вспомнить, с которым почти не знаком, и кое-что еще), и ОНО РАБОТАЕТ! осталось в луе поднасобачиться (книга хорошая уже скачана и полупрочитана), освоить тулчейн для компиляции-загрузки скриптов на чип, и все пойдет как по маслу : ). единственное что смущает - дибажить невозможно (люди пишут). придется или лог какой-нибудь изобретать или изобретенный осваивать, или еще как, но у меня задачи простенькие относительно, надеюсь, без ошибок все запрограммирую (это ведь луа : )


#7 
AlexNek патриот13.12.17 22:58
AlexNek
NEW 13.12.17 22:58 
в ответ moose 12.12.17 23:32
знаю. а то бы вы давно разрулили мою проблему

ну об этом то и речи не могло идти, вроде понятно было с самого начала.

Просто иногда, даже просто при пересказе свой проблемы может "загореться лампочка".

Я вот тоже вчера нашел отчего у меня гит по SSH не работал, долго искал, оказалось одного каталога на сервере не хватало.

#8 
  moose старожил15.12.17 12:23
NEW 15.12.17 12:23 
в ответ AlexNek 13.12.17 22:58, Последний раз изменено 15.12.17 12:27 (moose)
Просто иногда, даже просто при пересказе свой проблемы может "загореться лампочка".

это очень верно. я еще лет 30 назад начал пользоваться этой "зажигалкой": была одна коллега, которая понять меня не могла, но умела на удивление внимательно слушать: кивать, держать визуальный контакт, в общем, вести себя, будто ни на миг не упускает нить. и, рассказывая ей, я был вынужден то, что "плавало в воздухе", четче формулировать, и в конце-концов начинал это ясно понимать. вы тоже этот механизм имели ввиду?


немного "сблизился" с этой луой, и у меня на данном этапе такое создается впечатление, что это - попытка изобрести костыль, пользуясь которым, любой калека сразу должен бы побежать, причем очень быстро и в нужном направлении.

все, что народ пытается сделать и показать на этой луе, гораздо эффективнее делается на с/с++. причем здесь уже наработана масса библиотек, другого кода, и тем, кто имеет опыт в этих языках, нет необходимости осваивать еще и луу. но чтобы человеку освоить с/с++, требуется время, и не каждый, затративший это время, освоит это хорошо. а луа - некий basic, который, считается, каждый человек с улицы в состоянии за пару вечеров освоить в объеме, достаточном, чтобы создавать качественные приложения. уверен, и на луа в принципе можно писать эффективный код, и на с/с++ создавать ужас, на который нельзя смотреть. но продемонстрирую на живом примере актуальный уровень.

задаем в гугле lua esp8266 smtp send email example

в вервых рядах - эта ссылка:

https://github.com/nodemcu/nodemcu-firmware/blob/master/lu...

в первой строчке кода следующий комментарий:

Working Example:

.

о! форум даже сразу ссылку расшифровал!

на видео кто-то рассказывает и демонстрирует, как этот код работает. и массы берут этот код за образец, пытаются его воспроизвести и пр.

не нужно знать даже основы луа, чтобы понять, что здесь делается. а делается то, чего делать в принципе никогда нельзя.

нашел еще пример кода на adafruit, уже получше, но все равно для меня - очень непрофессионально. т.е. вывод напрашивается, что в среде луа даже учиться не у кого (в интернете по крайней мере). а когда нет грамотного ядра комъюнити, там не могут вырасти хорошие плоды: они смотрят на говнокод, другого они ничего в жизни не видели (и, возможно, видеть не желают), и сами начинают плодить подобное.

вспомнил нашего "коллегу" из соседней ветки с его потугами призвать regex, чтобы наконец-то запихнуть -1.5 в целое число : ). но он хоть признается, что не учился и не собирается, а здесь - говнокод прямо от "гуру".


#9 
  moose старожил15.12.17 20:31
NEW 15.12.17 20:31 
в ответ moose 15.12.17 12:23

ну вот, дочел книжку до корки. конечно, не все запомнил (и не стремился), но впечатление получил. вполне интересный язык. требует привыкания, но это - дело наживное. захотелось даже попробовать поиспользовать. сильно углубляться не планирую, но побалуюсь, пока не надоест.

#10 
AlexNek патриот16.12.17 17:25
AlexNek
NEW 16.12.17 17:25 
в ответ moose 15.12.17 12:23
вы тоже этот механизм имели ввиду?

ну что то подобное...

#11 
  moose старожил17.12.17 21:27
NEW 17.12.17 21:27 
в ответ moose 15.12.17 20:31

таки залез поглубже. новые эркэнтниссэ - неприятные. не знаю, назвать ли это "гибкостью" или дерьмовым концептуальным решением.

короче так. я как-то привык ("в других, нормальных языках" : ), что если я не объявлю переменную или ф-ю, то при обнаружении сразу возникает особый случай. в луе - "никаких проблем"! причем, если вы описали ф-ю, а потом какой-то переменной присвоили ее значение, то можно потом вызвать ф-ю через эту переменную. но если вы или опечатались в имени ф-ии (или переменной), или объявили ф-ю позже, чем переменную, то никто не будет ругаться, аж пока не произойдет попытка вызова этой ф-ии! естественно, "нужно программировать правильно". но я еще во времена фортрана встречал ошибки, вызванные "вольным стилем" объявления переменных. в общем, час потерял, пока это дошло. хотя сейчас удивляюсь, отчего так долго тупил : )

#12 
Simple Nothing is f*cked18.12.17 14:07
Simple
NEW 18.12.17 14:07 
в ответ moose 17.12.17 21:27

Нормальные свойства динамических языков.

#13 
AlexNek патриот18.12.17 22:10
AlexNek
NEW 18.12.17 22:10 
в ответ moose 17.12.17 21:27
"в других, нормальных языках"

Одна из причин по которым не люблю интерпретаторы

#14 
  moose старожил18.12.17 23:02
NEW 18.12.17 23:02 
в ответ AlexNek 18.12.17 22:10

а причем здесь интерпретаторы? в этом смысле и java, и c# - интерпретаторы. и знаю точно, что уже давно имеются компиляторы, позволяющие из жава-кода икзэшник изготовить (не мультиплатформенный теперь уже, естественно : ). наверное, и с сишарпом такое же уже проделывают (или подмножеством). также можно в принципе написать с++-машину, которая будет интерпретировать с++ код.

#15 
AlexNek патриот18.12.17 23:59
AlexNek
NEW 18.12.17 23:59 
в ответ moose 18.12.17 23:02

ну когда на байт коде или ИЛе будете писать приходите в гости смущ

#16 
  moose старожил19.12.17 18:57
NEW 19.12.17 18:57 
в ответ AlexNek 18.12.17 23:59
ну когда на байт коде или ИЛе будете писать приходите в гости смущ

знаю, у вас писька длинее. и толще. "еще бы стояла, цены бы ей не было" (с; )


#17 
AlexNek патриот19.12.17 22:41
AlexNek
NEW 19.12.17 22:41 
в ответ moose 19.12.17 18:57

А я уж было решил что с Вами можно и нормально общаться, типа как на перекуре. Жалко. Прийдется тогда тоже другую пластинку ставить.


Для тех кто кроме своих личных проблем ничего больше не замечает, поясню что имелось в виду.

Код на Java и С# компилируется в некий промежуточный код (байт код и ИЛ соответственно), а уж этот промежуточный код интерпретируется.


Вот еще табличку нашел по разным видам типизаций. Вроде интерпретируемые и компилируемые языки имеют различные тенденции или?


Статическая / динамическая | Сильная / слабая |Явная / неявная
---------------------------------------------------
JavaScript  - Динамическая | Слабая      | Неявная
Ruby        - Динамическая | Сильная     | Неявная
Python      - Динамическая | Сильная     | Неявная
Java        - Статическая  | Сильная     | Явная
PHP         - Динамическая | Слабая      | Неявная
C           - Статическая  | Слабая      | Явная
C++         - Статическая  | Слабая      | Явная
Perl        - Динамическая | Слабая      | Неявная
Objective-C - Статическая  | Слабая      | Явная
C#          - Статическая  | Сильная     | Явная
Haskell     - Статическая  | Сильная     | Неявная
Common Lisp - Динамическая | Сильная     | Неявная
D           - Статическая  | Сильная     | Явная
Delphi      - Статическая  | Сильная     | Явная

вв

#18 
  moose старожил19.12.17 23:57
NEW 19.12.17 23:57 
в ответ AlexNek 19.12.17 22:41

я ведь признал уже привселюдно, что у вас больше. чего бы еще вам желать? ладно: и в поиске табличек у вас тоже больше : )


зы. не понимаю, что вы хотите сказать? вижу только "а я все равно больше знаю, толще вижу, длиннее понимаю...". я не против, если вас это тешит : )

#19 
AlexNek патриот20.12.17 00:15
AlexNek
NEW 20.12.17 00:15 
в ответ moose 19.12.17 23:57
а я все равно больше знаю

где это Вы такое увидели?


не понимаю, что вы хотите сказать?

то что уже и сказал - не люблю интерпетируемые языки.

#20 
Simple Nothing is f*cked20.12.17 15:58
Simple
NEW 20.12.17 15:58 
в ответ AlexNek 20.12.17 00:15

Какая разница? Все они с JIT и для большинства задач не уступают компилируемым.

#21 
  moose старожил20.12.17 21:24
NEW 20.12.17 21:24 
в ответ AlexNek 20.12.17 00:15
то что уже и сказал - не люблю интерпетируемые языки.

ну, не женитесь : )


#22 
AlexNek патриот20.12.17 22:09
AlexNek
NEW 20.12.17 22:09 
в ответ Simple 20.12.17 15:58
Все они с JIT

Существующие наиболее распространённые интерпретаторы языков PHP, Ruby, Perl, Python и им подобных, имеют ограниченные или неполные JIT.

https://ru.wikipedia.org/wiki/JIT-комп...


и для большинства задач не уступают компилируемым

Практически не интересует то, что одну и туже задачу можно реализовать на различных языках

Интересует прежде всего удобство пользования и прочие индивидуальные предпочтения.

Вот казалось бы, относительно конечной цели VB.NET и C# разницы не имеют, а вот когда приходится пользовать VB хочется "рвать".

#23 
Simple Nothing is f*cked21.12.17 18:16
Simple
NEW 21.12.17 18:16 
в ответ AlexNek 20.12.17 22:09

К примеру, год назад я работал в проекте на php и очень удивился, насколько это было приятно. Все, что надо - хорошая IDE.

#24 
MrSanders старожил21.12.17 18:31
NEW 21.12.17 18:31 
в ответ Simple 21.12.17 18:16

Угу. Хорошая IDE и работать одному. И сдать - забыть.

#25 
  moose старожил21.12.17 21:34
NEW 21.12.17 21:34 
в ответ MrSanders 21.12.17 18:31

хорошая IDE - с моей колокольни опыта - не обазятельно "промышленная IDE" в обычном понимании. теперь, из embedded domain, для меня это просто удобный tool chain, то, к чему вы привыкли. для меня пока самым удобным в некоторых случаях редактором кода остается vi, sorry ....

#26 
AlexNek патриот21.12.17 21:41
AlexNek
NEW 21.12.17 21:41 
в ответ Simple 21.12.17 18:16

и какая есть хорошая бесплатная IDE не уступающая визуал студии?

А как Вам такая последовательность?

$asd=5;
$asd="qwertyui"
$Asd = 10;
#27 
Simple Nothing is f*cked21.12.17 23:10
Simple
NEW 21.12.17 23:10 
в ответ AlexNek 21.12.17 21:41, Последний раз изменено 21.12.17 23:14 (Simple)

Говнокод можно писать на любом языке.

https://www.jetbrains.com/idea/

#28 
Simple Nothing is f*cked21.12.17 23:11
Simple
NEW 21.12.17 23:11 
в ответ MrSanders 21.12.17 18:31

Такое недостойно джедая!

IDEA отлично распознает типы, а там где не распознает, можно аннотацию сделать. Все чистенько.

#29 
Simple Nothing is f*cked21.12.17 23:12
Simple
NEW 21.12.17 23:12 
в ответ moose 21.12.17 21:34

Я сам не ездец, но все говорят, что поездив на бмв, на запорожец пересаживаться не хочется.

#30 
AlexNek патриот22.12.17 01:13
AlexNek
NEW 22.12.17 01:13 
в ответ moose 21.12.17 21:34
остается vi, sorry

ой не напоминайте, постоянно приходится искать в интернете как из него выйти. Проще "мс" поставить.

#31 
AlexNek патриот22.12.17 01:18
AlexNek
NEW 22.12.17 01:18 
в ответ Simple 21.12.17 23:10
Говнокод можно писать на любом языке.

Вы не то увидели. Подобные ошибки вполне могут быть. И одно дело когда их видно сразу после набора кода / компиляции.


.jetbrains.com - речь шла о бесплатных. Если мне нужно чего то сделать на PHP дома раз в пару лет, то смысл в покупке?

#32 
Simple Nothing is f*cked22.12.17 11:03
Simple
NEW 22.12.17 11:03 
в ответ AlexNek 22.12.17 01:18

Все, что вы хотели сказать, я понял. Это также относится к говнокоду. Я достаточно пописал на js и в курсе.

Насколько мне известно, у jetbrains есть бесплатная версия для личного пользования. Phpstorm емнип. Полная навигация не только по php-коду, но и по шаблонам twig. С говностудией не сравнить.

#33 
Simple Nothing is f*cked22.12.17 11:06
Simple
NEW 22.12.17 11:06 
в ответ AlexNek 22.12.17 01:13

Ага, особенно на прод-сервере с aix.

Базовый набор команд несложно запомнить. Это уже за продвинутыми вещами типа как открыть одновременно два файла приходится в доку лезть.

#34 
  moose старожил22.12.17 17:29
NEW 22.12.17 17:29 
в ответ Simple 21.12.17 23:12

вы правы. но верно зачастую и обратное: проездив довольно долго на запорожце, на бмв смотрят со страхом : )

#35 
Simple Nothing is f*cked22.12.17 17:37
Simple
NEW 22.12.17 17:37 
в ответ moose 22.12.17 17:29

В данном случае бояться нечего. Типичная мысль как правило такая: "блеа, как же я без этого работал раньше?!!!"

Если бы я еще имел дело с с++, обязательно бы попробовал CLion, а так лень. Наверняка заруливает говностудию в одни ворота.

#36 
  moose старожил22.12.17 21:44
NEW 22.12.17 21:44 
в ответ Simple 22.12.17 17:37

да ничем он не лучше, чем остальные. особенно если для майкрософт платформ что-то делать нужно. работал и с вижуал студио, и нетбинз, и эклипс, и мвижн, и виай, и еще наверняка кучей всего, не говоря о перфокартах. "иде" удобно то, к которому привык и запорожец в том числе может быть кому-то удобнее бмв, не нужно людей за это пинать. иде не решают главную проблему: понимать problem domain, процесс разработки, интересы людей, которые в этом задействованы и кучу всякого еще. а то, что "оно" мне, когда я печатаю, подсказки высвечивает, "оно" может идти гулять, я быстрее ручками напечатаю : )

#37 
AlexNek патриот22.12.17 23:48
AlexNek
NEW 22.12.17 23:48 
в ответ Simple 22.12.17 11:03
Это также относится к говнокоду.

Что эта мысль не совсем понятна.

Дали "нормальный" проект. Нужно что то добавить. В силу каких причинначали пользовать имеющееся имя но с другим типом.


у jetbrains есть бесплатная версия для личного пользования. Phpstorm емнип

https://www.jetbrains.com/phpstorm/buy/#edition=personal

может раньше и была бесплатной

#38 
AlexOtt местный житель08.01.18 07:35
AlexOtt
NEW 08.01.18 07:35 
в ответ AlexNek 18.12.17 22:10

для Lua есть LuaJIT - just in time compiler...


Lua много где используется в качестве встраиваемого языка - в игрушках, всяких load balancers, API gateways, etc

#39 
AlexNek патриот09.01.18 01:29
AlexNek
NEW 09.01.18 01:29 
в ответ AlexOtt 08.01.18 07:35

Ппроблема не в наличии или отсутствии компилятора - проблема в самом "концепте" языка.

#40 
AlexOtt местный житель11.01.18 20:27
AlexOtt
NEW 11.01.18 20:27 
в ответ AlexNek 09.01.18 01:29

разные языки имеют право на существование, иначе бы все до сих пор на фортране писали.

имеется много разных критериев по которым языки разрабатываются и выбираются, и компилируемость - не самый решающий. Особенно это касается DSLs, где гибкость и понятность - более важны

#41 
AlexNek патриот11.01.18 21:00
AlexNek
NEW 11.01.18 21:00 
в ответ AlexOtt 11.01.18 20:27

Я говорил только о том, что лично мне не нравится и дело не в компилируемости, а в табличке, что приводил.

Вот буквально сегодня так достали, что пришлось поругаться и сказать что на этом г. VB.NET больше писать не буду.

#42 
  moose старожил11.01.18 22:04
NEW 11.01.18 22:04 
в ответ AlexNek 11.01.18 21:00, Последний раз изменено 11.01.18 22:06 (moose)

это как если слесарь будет говорить, что ему не нравятся крестообразные отвертки, а только торксы. наверное, если у вас все шурупы под торкс, то логично, но не стоит сердиться, когда шуруп с крестообразным шлицом плохо идет под торксовой отверткой.

кстати, к луа вполне можно приспособиться (я уже немного пообвыкся, хотя далеко не эксперт). такой себе "minipython"

#43 
AlexNek патриот11.01.18 22:23
AlexNek
NEW 11.01.18 22:23 
в ответ moose 11.01.18 22:04

И под какие шурупы заточен Бэйсик? смущ

Ко всему в принципе можно приспособится только зачем?

#44 
vlad_s_69 свой человек17.01.18 15:29
NEW 17.01.18 15:29 
в ответ moose 11.12.17 15:43, Последний раз изменено 17.01.18 15:31 (vlad_s_69)

Я интегрировал Луа в нашу программу (КАД для мебели)

у нас есть сложный 3д обьект, теперь в нём можно порграмировать на Луа.

например, если человек меняет размер ширину шкафа, то, до определённой ширины, полки меняют ширину, потом вместо 2х полок - одна....


Лиа лекго интегрируется, я запустил её за неделю.


#45 
AlexOtt местный житель25.01.18 07:44
AlexOtt
NEW 25.01.18 07:44 
в ответ AlexNek 11.01.18 22:23

так если вам Бейсик не подходит, то при чем тут все остальные языки

#46 
AlexNek патриот25.01.18 23:18
AlexNek
NEW 25.01.18 23:18 
в ответ AlexOtt 25.01.18 07:44

Смотрим на языки со слабой типизацией

https://foren.germany.ru/showmessage.pl?Number=32877785&Bo...


А Бейсик это совсем отдельная тема.

#47 
AlexOtt местный житель28.01.18 22:30
AlexOtt
NEW 28.01.18 22:30 
в ответ AlexNek 25.01.18 23:18

Есть Scala Script со строгой типизацией. Go можно использовать как скриптовый язык без явной компиляции - я просто не могу понять притензий к скриптовым языка

#48 
AlexNek патриот29.01.18 19:25
AlexNek
NEW 29.01.18 19:25 
в ответ AlexOtt 28.01.18 22:30

Ну скажем так - мне с ними неудобно/не нравится работать. Вы же не будете выяснять отчего челу нравятся только брюнетки/блондинки смущ

#49 
1 2 3 все