LINUX.ORG.RU

Сообщения lbvf50txt

 

Разница между хорошим и великолепным разработчиком

Форум — Talks

Хороший разработчик знает как работают вещи, великолепный знает почему они работают именно так.

Good developers know how things work. Great developers know why things work. (c) Steve Souders в придесловии к книге Ильи Григорика.

 , ,

lbvf50txt
()

Cобсеседованиями собеседуй собеседник HTTP 1, 2, 3 QUIC

Форум — Talks

Что спрашивают на собеседованиях?

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

Вот так, если сходу «Опа, Гоп Стоп!» Вчем разница?

  • HTTP создает соденинение на каждый запрос.
  • HTTP 2 уже вроде как может качать все ресурсы по одному соедению.
  • HTTP 3 основан на новом протокол QUIC который основан на UDP.

А теперь мои дороиге друзья ответы от ByteByteGo и лично от Alex Xu.

Проверил себя сам, проверьте себя и вы.

UPD:

Работа над ошибками:

  • HTTP 1 TCP соединение на отправку каждого ресурса, текстовый протокол.
  • HTTP 1.1 постоянное TCP содинение, возможность отсылать множество запросов, ответы приходят последовательно. Пока не пришел ответ на запрос №1, ответы на запрос №2, №3 и №4 не придут. Также текстовый проткол.
  • HTTP 2 протокол бинарный, также существует на постоянном TCP соединение, создана концепция стримов: параллельная загрузка ресурсов в рамках одного TCP соденинения.
  • HTTP 3 бинарнаый проткол на QUIC, потоки уже реализованы на уровне UDP. Сам QUIC расшифровывается «Quick UDP Internet Connection», является UDP с встроенным TLS.

 , , , ,

lbvf50txt
()

Эффект Даннинга-Крюгера

Форум — Talks

https://youtu.be/7q4ntB__w3M?si=Pwi1mlvGYdJTllmW

«Отсутствие желания признать свою некомпетентность — есть ни что иное, как защитный механизм, своего рода щит, прикрывающий тебя от насмешек и снисходительных взглядов окружающих. В этом бы не было ничего плохого, если бы уверенность в собственной гениальности не являлась барьером для получения новых знаний.» (c) Канал «Теперь Ты Знаешь»

 

lbvf50txt
()

Vim выделенный текст в ИНТЕРПРЕТАТОР и обратно в Vim

Форум — Development

Визуальные фильры в Vim

В Unix есть понятие filter, программа получающая поток данных и его возвращающая: awk, sed, tr, grep. Выделенные фрагменты текста из Vim пожно подавать на последоватеьность фильтров, и считывать результат обрабтно в Vim. Результат работы последовательности фильтров заменит выделенный текст.

Для этого следует.

  • Перейти в Режим визуального выделения (Visual mode): V
  • Передать выделенный фрагмент фильтрам нажав !, или можно нажать : и потом уже допечатать ! с коммандой.
  • В коммандной строке указать последовательность фильтров или интепретатор: :'<,'>!sort | tr '1234' 'ABCD', :'<,'>!python, :'<,'>!ruby
  • Нажать Enter

Таким образом можно не только фильтровать текст, но и использовать текстовые фрагменты как программынй код. Вводя в свои текстовые документы код на Ruby или Python для трансформации кода в текст:

puts %w{cherry banana apple qiwi}.sample => :'<,'>!ruby => cherry

Cправка

:help !

{Visual}!{filter}       Filter the highlighted lines through the external
                        program {filter} (for {Visual} see Visual-mode).

Далее, примеры: сортировка или передача текста как код в интерпретатор.

Cортировка строк в Vim:

banana
apple
coco
grape
arbuz
gursha
banan

V - для перехода в select mode. ! - для ввода утитилиы, которой черз pipe line будте передаваться выделение. sort - название утилиты в коммантной строке.

apple
arbuz
banan
banana
coco
grape
gursha

Использование pipe line во внешних коммандах для Vim:

После сортировки замена arbuz на арбуз и gursha на груша.

banana
apple
coco
grape
arbuz
gursha
banan

Выделение через V запуск через !:

sort | sed -e 's/gursha/груша/g' -e 's/arbuz/арбуз/g'

Результат

apple
арбуз
banan
banana
coco
grape
груша

Текст как код для Ruby:

А можно и в тексте взывать интерптератор.

puts 2+3*5-7
`V` => `!` => `ruby`

10

Или же заполнение случайными строками:

5.times { print rand(10).to_s + "\n"}
`V` => `!` => `ruby`
5
4
4
7
4

Гистограммы в Vim через Nushell

Неполучиось. Vim говорит ошибку E485. Далее по тексту решил через файл - «буфер».

Для начала в ~/.config/nvim/init.vim shell меняется на Nushell.

" ~/.config/nvim/init.vim
set shell=/usr/bin/nu

Потом в тексте выделяется столбец данных через V.

apple
banana
apple
...

И через ! фильтр вызывается код на Nushell.

Не работает. Vim говорит ошибку E485.

Ладно, поробую через файлы:

  1. Пишу код чтоб заполнить файл случайным образом.

Ruby:

10.times{ puts %w{apple banana qiwi}.sample + "\n"}

Python:

import random; print('\n'.join(random.choice(["apple", "banana", "qiwi"]) for _ in range(10)))

  1. Выделяю через V и запускаю через !ruby или !python.
apple
apple
qiwi
qiwi
qiwi
banana
banana
apple
banana
apple
  1. Cохраняю :wq tmp.txt запускаю nu.

Nushell:

~/tmp/nu> open tmp.txt | split row "\n" | histogram | table -t none | save out.txt 

Файл out.txt:

 #   value    count   quantile   percentage                  frequency                 
 0   apple        4       0.40   40.00%       **************************************** 
 1   banana       3       0.30   30.00%       ******************************           
 2   qiwi         3       0.30   30.00%       ******************************  

Истпользование комманд w r и w! для постоения гистограммы не выходя из Vim

  1. Генерация последовательности: V ! ruby или python

Ruby:

10.times{ puts %w{apple banana qiwi}.sample + "\n"}

Python:

import random; print('\n'.join(random.choice(["apple", "banana", "qiwi"]) for _ in range(10)))

Vim:

:'<,'>!ruby 
  1. Выделение и сохранение последовательности в tmp.txt
  • V Visual mode
  • :'<,'>w! tmp.txt - если надо перезаписать tmp.txt
  • :'<,'>w tmp.txt - если НЕ надо перезаписать tmp.txt
  1. сохранение кода Nu script. V потом :'<,'>w script.nu
open tmp.txt | split row "\n" | histogram | table -t none  
  1. запуск и считывание в буфер результатов работы :r !nu script.nu
 #   value    count   quantile   percentage               frequency             
 0   apple        5       0.50   50.00%       ********************************* 
                                              *****************                 
 1   qiwi         3       0.30   30.00%       ******************************    
 2   banana       2       0.20   20.00%       ********************              


Вывод: Выделяется фрагмент текста через V, сохраняется в файл :'<,'>w file.name или :'<,'>w! file.name для перезаписи. Файл считать в текст :r file.name, можно считать результат работы скрипта :r !nu file.nu.

 , , , ,

lbvf50txt
()

Подготовка и решение задач на ЭВМ, 1976

Форум — Talks

Фильм рассказывает об устройстве ЭВМ серии ЕС.

Свердловская киностудия, 1976 г.

https://youtu.be/K-nb8UPEePQ?si=uwuplz1xhzxvr-SP

Отличный фильм. Как много изменилось, как много осталось прежним.

 , , ,

lbvf50txt
()

Рекурсивных обход Record в Nushell

Форум — General

Исходное сообщение о работе с JSON.

@ZogG, @Dr64h вы не в курсе как обходить рекурсивно обходить Record, чтоб получать путь и значение каждого элемента?

То что, я пока нашел не подоходит. Просто превратить весь Record в огромную однострочку табицу где данные хранятся под именами столбцов. Могу получить имена столбцов. А вот пару имя/значение пока не знаю как.

~/tmp/nu> open react_p.json | flatten | columns | where ($it | str contains "lint")
╭────┬────────────────────────────────────────────────╮
│  0 │ @typescript-eslint/eslint-plugin               │
│  1 │ @typescript-eslint/parser                      │
│  2 │ eslint                                         │
│  3 │ eslint-config-prettier                         │
│  4 │ eslint-plugin-babel                            │
│  5 │ eslint-plugin-es                               │
│  6 │ eslint-plugin-eslint-plugin                    │
│  7 │ eslint-plugin-ft-flow                          │
│  8 │ eslint-plugin-jest                             │
│  9 │ eslint-plugin-no-for-of-loops                  │
│ 10 │ eslint-plugin-no-function-declare-after-return │
│ 11 │ eslint-plugin-react                            │
│ 12 │ eslint-plugin-react-internal                   │
│ 13 │ hermes-eslint                                  │
│ 14 │ lint                                           │
│ 15 │ lint-build                                     │
╰────┴────────────────────────────────────────────────╯

Через zip я добился создание таблицы. Но в ней нет пути.

~/tmp/nu> let names = open react_p.json | flatten | columns
~/tmp/nu> let vals = open react_p.json | flatten | values
~/tmp/nu> let pairs = $names | zip $vals

~/tmp/nu> $pairs | where ($it.0 | str contains lint) |
reduce -f [[key value]; [0,0]] {|it, acc| $acc | append [[key value]; [$it.0, $it.1.0]]} |
skip 1
╭────┬────────────────────────────────────────────────┬─────────────────────────────────────────╮
│  # │                      key                       │                  value                  │
├────┼────────────────────────────────────────────────┼─────────────────────────────────────────┤
│  0 │ @typescript-eslint/eslint-plugin               │ ^6.21.0                                 │
│  1 │ @typescript-eslint/parser                      │ ^6.21.0                                 │
│  2 │ eslint                                         │ ^7.7.5                                  │
│  3 │ eslint-config-prettier                         │ ^6.9.0                                  │
│  4 │ eslint-plugin-babel                            │ ^5.3.0                                  │
│  5 │ eslint-plugin-es                               │ ^4.1.0                                  │
│  6 │ eslint-plugin-eslint-plugin                    │ ^3.5.3                                  │
│  7 │ eslint-plugin-ft-flow                          │ ^2.0.3                                  │
│  8 │ eslint-plugin-jest                             │ 28.4.0                                  │
│  9 │ eslint-plugin-no-for-of-loops                  │ ^1.0.0                                  │
│ 10 │ eslint-plugin-no-function-declare-after-return │ ^1.0.0                                  │
│ 11 │ eslint-plugin-react                            │ ^6.7.1                                  │
│ 12 │ eslint-plugin-react-internal                   │ link:./scripts/eslint-rules             │
│ 13 │ hermes-eslint                                  │ ^0.22.0                                 │
│ 14 │ lint                                           │ node ./scripts/tasks/eslint.js          │
│ 15 │ lint-build                                     │ node ./scripts/rollup/validate/index.js │
╰────┴────────────────────────────────────────────────┴─────────────────────────────────────────╯

 , , , ,

lbvf50txt
()

Что с @dataman?

Форум — Linux-org-ru

Обьясните мне, что просиходит с @dataman?

В посте про Shell, где во всю идет обсуждение лингвистики, люди спокойно общаются. @dataman как с цепи на меня сорвался и начал удалять соощения о работе Nushell, абсолютно технические.

C фрагментами исходного кода и обращению к участникам за советом.

~/tmp/nu> open react_p.json | flatten | columns | where ($it | str contains "lint")
~/tmp/nu> let names = open react_p.json | flatten | columns
~/tmp/nu> let vals = open react_p.json | flatten | values
~/tmp/nu> let pairs = $names | zip $vals

~/tmp/nu> $pairs | where ($it.0 | str contains lint) |
reduce -f [[key value]; [0,0]] {|it, acc| $acc | append [[key value]; [$it.0, $it.1.0]]} |
skip 1
╭────┬────────────────────────────────────────────────┬─────────────────────────────────────────╮
│  # │                      key                       │                  value                  │
├────┼────────────────────────────────────────────────┼─────────────────────────────────────────┤
│  0 │ @typescript-eslint/eslint-plugin               │ ^6.21.0                                 │
│  1 │ @typescript-eslint/parser                      │ ^6.21.0                                 │
│  2 │ eslint                                         │ ^7.7.5                                  │
│  3 │ eslint-config-prettier                         │ ^6.9.0                                  │
│  4 │ eslint-plugin-babel                            │ ^5.3.0                                  │
│  5 │ eslint-plugin-es                               │ ^4.1.0                                  │
│  6 │ eslint-plugin-eslint-plugin                    │ ^3.5.3                                  │
│  7 │ eslint-plugin-ft-flow                          │ ^2.0.3                                  │
│  8 │ eslint-plugin-jest                             │ 28.4.0                                  │
│  9 │ eslint-plugin-no-for-of-loops                  │ ^1.0.0                                  │
│ 10 │ eslint-plugin-no-function-declare-after-return │ ^1.0.0                                  │
│ 11 │ eslint-plugin-react                            │ ^6.7.1                                  │
│ 12 │ eslint-plugin-react-internal                   │ link:./scripts/eslint-rules             │
│ 13 │ hermes-eslint                                  │ ^0.22.0                                 │
│ 14 │ lint                                           │ node ./scripts/tasks/eslint.js          │
│ 15 │ lint-build                                     │ node ./scripts/rollup/validate/index.js │
╰────┴────────────────────────────────────────────────┴─────────────────────────────────────────╯

Приведите гражданина в чувтсва. Несколько часов я писал для сообщества пример как пользоваться Nushell.

Fish Shell 4.0 (комментарий)

Потом задал вопросы ребятам которые в Nushell разбираются. Пришел обиженный ключик @dataman и начал сносить сообщения.

 ,

lbvf50txt
()

Рецензия на книги А. В. Столярова

Форум — Talks

Столяров (@Croco) трудился в университете, как полагается, вел несколько курсов лекций. Все преподаватели ведут несколько смежных курсов, но в отличие от большинства, Столяров выкладывал свои методички в публичный доступ. В 2016 году за деньги с донатов он взял материал этих курсов, расширил его беседами с лекций и практик и все это опубликовал. В итоге получился обыкновенный курс программирования любого, подчеркиваю, любого профильного вуза страны.

Что важно, этот курс стал бесплатно доступен любому желающему в два клика, без необходимости проходить бюрократический фильтр и платить цену автомобиля за доступ к информации. Благодаря работе Столярова любой заинтересованный человек получает качественно отредактированный конспект лекций МГУ по программированию с пояснениями. По содержанию это +/- 1999 или 2000 год.

Абсолютно ничего нового, революционного, свежего Столяров не написал. К моменту публикации (2016 год) по темам, затронутым Столяровым, было опубликовано десятки книг, которые пережили множество изданий. Например, книги по TCP/IP от издательства O’Reilly к тому времени издавались уже 20 лет и имели по 7-8 улучшенных и дополненных изданий.

Мало того, что Столяров опубликовал прописные истины администрирования и программирования, он еще их щедро разбавил философией лаборанта из 90-х. То есть технические книги стали содержать в себе конспекты типовых разговоров второкурсников за бутылкой водки. Что, конечно, добавило живости в чтиво, но дурно влияет на 17-летних подростков, которые пьяный трёп обслуживающего персонала воспринимают за жизненную философию и руководство к действию.

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

Но как разработчик, как автор, он не сделал ничего нового. И сам по себе является карикатурным образом админа 90-х, про которых писали юмористические рассказы в Fido. Попытка доказать всему честному люду, какой он великий инженер, через постройку велосипеда, развалившегося на первой кочке, — это типичный пример творчества тех лет. Рассказов про Винипуха и боды и записок Жены программиста.

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

Вывод: Столяров — это классический, можно сказать, эталонный системный администратор из 90-х. Человек, который отказался развиваться, отринул курсы повышения квалификации и навсегда остался в сладком возрасте 20 лет в рамках того давно ушедшего социума, его стереотипов и правил.

Книги Столярова — это книги 90-х, хотя они написаны через четверть века, в конце 2010-х. Это памятник эпохи начала массовой компьютеризации в России. Это надо понимать при работе с ними. Читая работы Столярова, надо давать «поправку на ветер», и всё будет хорошо.

Несомненно, книги Столярова представляют интерес и пользу в начальном ознакомлении с основными принципами функционирования компьютера и компьютерных сетей, так как они описывают зарю технологий, когда оные не обросли множеством деталей. Книги четко структурированы, плавно вводят в тему, не перегружают деталями, затрагивая суть.

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

 , ,

lbvf50txt
()

Откуда Gmail знает мой /sys/class/dmi/id/product_name?

Форум — Web-development

Зашел через Chromium на почту Gmail, как водится на почте письмо Security Alert on Google. Читаю письмо, жму «Check Activity» и удивляюсь: по мимо Linux стоит еще информация из /sys/class/dmi/id/product_name - там название моего ноута.

Начал проверять поля протокола HTTP.

  1. User-Agent ничего такого не содержит.
  2. Набор полей HTTP Client hints Sec-Che-Ua тоже не содержит, хотя там много занятного.

Более всего похоже на HTTP Client hints, такак они не подреживаются в FireFox, а в Сhromium поддерживаются. Хотя я в заголовках запроса накого не нашел, что передавалось название ноута.

Кто знает через что Gmail получает информацию о моем ноуте?

UPD:

Заход производится через адресную строку, адрес gmail.com, логин, пароль, если исопльзуется Chromium: в Activities помимо Linux еще и модель ноута, если FireFox: только Linux.

  • Chromium Incognito Mode => Linux (Laptop name)
  • FireFox Incognito Mode => Linux

UPD:

  1. Открывается браузер в Incognito mode.
  2. В адресную строку вводиться gmail.com.
  3. Вводится имя пользователя и пароль.
  4. На почту должно прийти письмо Security Alert c адреса no-reply@accounts.google.com.
  5. В письме синяя кнопка Check Activity переводящаяя на https://accounts.google.com/...
  6. При нажатии на кнопку просиходит переход на https://myaccount.google.com/notifications/eid/...
  7. На странице из предыдущего пунтка написано Your account is at risk if this wasn't you далее информация о типе устройства взятая из User-Agent (+ дполнительная инфа о хосте в случае Chromium).

UPD:

 ,

lbvf50txt
()

Ловушка новых технологий

Форум — Talks

Какое-то время назад я попал в психологическую ловушку, начиная новый проект я беспокоился о том, что проект должен быть сделан «правильно». А правильно в моем понимании тогда это на новых фреймворках. По этой причине я не выполнил ряд проектов, так как стеснялся делать их по старинке.

Из этой психологической ловушки меня вытащили несколько источников.

Данная психологическая ловушка всего лишь разновидность ловушки «правильного программирования». Требования «делать правильно» могут быть разные: старые технологии, новые технологии, гипертрофированная безопасность. И так далее и тому подобное.

Не попадайте в психологические ловушки.

 ,

lbvf50txt
()

512kb в debian.iso для загрузки по схеме MBR

Форум — Linux-hardware

Есть 32bit образ Debian и документация к нему. В этой документации предлогают готовить флешку следующим образом:

# cp debian.iso /dev/sdX
# sync

Мне вот интересно как будет работать Legacy BIOS в данной ситуации. Ведь Legacy BIOS запускает первичный загрузчик который находиться в первом секторе диска. Каким образом это реализуется при копировании данных черзе cp?

И как это совпадает с файловой системой. Там наверно есть какой-то файл который размещен в певром секторе. Интересно и не понятно.

UPD:

Там же на флешке еще должен быть bootable раздел, или при таком копироании флешка становиться ISO 9660 и в таком случае bootable partition не требутеся?

Возникает впрос прочему cp, а не dd. В данном контексте от root сp ведет себя как dd?

UPD1:

Раскрываем секреты загрузочных ISO-образов от artyomsoft

https://habr.com/ru/companies/ruvds/articles/706070/

Спасибо, @Flotsky за ссылку на статью.

 , , ,

lbvf50txt
()

lsblk видит sdb, parted -l не видит.

Форум — Linux-hardware

UPD: это был сбой предположительно вызванный сносом партиций на sda и востановлением их через testdisk. Загрузился с другого винта и parted для флешки заработал. Подробнее в конце сообщения.


Пытался сделать USB stick на Puppy Linux. При помощи dd записал данные на USB.

dd bs=4M conv=notrunc,fdatasync oflag=direct status=progress if=BookwormPup32-23.12-240907.iso of=/dev/sdb

Вставил свиток в комп. Все запустилось. Запустил PuppyInstaller, выбрал Bootable USB. Выбрал grub4dos. И оставил копироваться файлы. При повторой загрузке ничего не отображается кроме командной строки grub.

Вернулся к основной рабочей станции и чудеса.

# parted /dev/sdb

Пишет

Error: The device /dev/sdb is so small that it cannot possibly store a file system or partition table.  Perhaps you
selected the wrong device?

parted -l и fdisk -l вообщене видят sdb.

Зато

root@lbvf50txt:~# lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
NAME     SIZE FSTYPE  MOUNTPOINT

sdb     28.9G         
└─sdb1  28.9G iso9660 /media/dima/ISOIMAG

Puppy каким-то образом испортило мне флешку. До этого за сегодня я раза 4 запускал parted /dev/sdb и переклепывал партиции то на fat32 то на ext4 без проблем.

После запуска puppy installer флешка практически померла.

Как воскресить флешку?

Буду работать с Debian. Делать в ручную через chroot без всяких инсталяторов.

UPD: Гуглил, спрашивал ChatGPT - информации 0. Как вооще такое может быть не ясно.

UPD1: Вот так копирует.

dd bs=4M conv=notrunc,fdatasync oflag=direct status=progress if=BookwormPup32-23.12-240907.iso of=/dev/sdb1

Теперь parted работает с /dev/sdb1, и копирование через dd происходит с /dev/sdb1. Как будто /dev/sdb заменилось на /dev/sdb1.


UPD2: Во время настройки sdb я запустил parted без аргумента, и посносил себе на основном винте sda первые два раздела в таблице gpt. После чего кое-как их востановил через testdisk и продолжил работать.

К концу дня у меня заглючил parted /dev/sdb и parted -l и fdisk -l. После перезгрузки, я загрузиться не смог. Вставил другой диск, загрузился на старый Linux. Флешка форматируется нормально.

Сейчас пытаюсь востановить загрузку системы на sda. Диски монтируются нормально. EFI загрузочный и ext4 с данными вижу. Могу по ним ходить. Тепрь надо востановить GRUB поробовать згарзуится. Ну и так далее и тому подобное, или просто систему сносить и востанавливаться с бекпа /home.

UPD3: После того как перывй накопитель не отображался через parted -l, я вставил второй накопитель в USB, он точно так-же не отображался через parted -l, писал такую-же ошибку. Тогда я и понял, что возможно проблема в поломаных и востановленных разделах на sda, более того после работы testdisk у меня на 500мб поменялся размер партиции подкачки.

Тогда я загрузился с другого диска, и в другом экземпляре Linux уже прекрасно работал parted.

 , ,

lbvf50txt
()

Что там с Wikipedia?

Форум — Talks

Несколкьо дней подряд Википедия выдает банер: «Wikipedia still can’t be sold.»

А дальше ни какой конкретики: помогите, часто пользуетесь, нужно для AI, всего два евро. В любом случае Вики оснновной сайт в Intrenet, что про какой протокол сетевого общения прочитать, про ядро или терминал - первым делом в Вики. Что у них стрялось, что им резко деньги понадобились?

 

lbvf50txt
()

Задал вопрос Столярову. Обращение к адептам.

Форум — Talks

Задал вопрос Столярову (@Croco) на его сайте, на что покупать еду если учиться согласно его учебному плану и запрету на использование современных технологий. Логично в ответ получил оскорбления. Спорить с 45 летним мужиком который настырно пытается отгородиться от реальности и жить в мире собственных фантазий - бесполезно.

Обращаюсь к адептам. Ребята ни с кем я не воюю, ни каких глобальных целей переустройства мира не преследую, в систему образования не лезу хотя мне предлогают, в отличии от вас. Мне реально интересно что вы будете кушать, отгородившись от GitHub и прячась от Python c JavaScript.

Предложеный Столяровым путь: что вы закрывшись от всего мира будете что-то там сами ковырять, и доковыряетесь до таких высот, что к вам на поклон пребегут директора компаний с оферами на тысчи долларов в месяц - достаточно сомнительный. А вы еще встаните в воинственную позу и будете им диктовать свои условия: писать вам письма в определенной кодировке и не с gmail.

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

Теперь моя совсесть чиста. Подростков я предупредил.

 ,

lbvf50txt
()

RSS подписка на новые темы