[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: pdf, archive, image, vector, flash, music, text, video, code
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.48984 Ответ [Открыть тред]
Файл: omega.png
Png, 7.18 KB, 400×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
omega.png
Привет. Это тред для пиара pfpmd: http://pfpmd7dd5ijt4add2sfi4djsaij4u3ebvnwvyvuj6aeipe2f5llptkid.onion/
pfpmd - это тесно сплетенные в одно целое анонимный чат и текстовые борды. Тематика: computer science, математика, программирование, технологии, криптоанархизм, софт и т.п.

pfpmd существует с 2015 года. Изначально он был попыткой воскресить один ресурс, который назывался лолкс, но теперь это в прошлом. Населен небольшим количеством людей и имеет низкую активность, что и хотелось бы изменить. Из-за того, что pfpmd это tor hidden service, периодически туда заходят люди ищущие цп, гуро и т.п., но, ничего не найдя, быстро уходят. pfpmd не модерируется, бан невозможен, как и цензура. Логотипом pfpmd является символ Ω, в честь Chaitin omega number https://en.wikipedia.org/wiki/Chaitin%27s_constant

Фичи pfpmd:
-Борды не фиксированы, в форме создания поста можно указать имя новой борды и она будет создана динамически в момент создания поста.
-Можно менять описание борды, это может делать любой пользователь сколько угодно раз;
-На странице с чатом по дефолту отображаются сообщение не только из чата, но и со всех борд. Это поведение можно изменить в настройках.
-На станице чана отображаются треды со всех борд (у нас это было еще до нульчана). Но можно отобразить только треды какой-то одной борды, просто перейдя по ссылке этой борды.
-Картинки отображатся с некоторых ресурсов, например, imgur, twitter. Также показываются превьюшки видео с youtube и некоторых имиджборд. Список будет пополняться в будущем.
Привет. Это тред для пиара pfpmd: http://pfpmd7dd5ijt4add2sfi4djsaij4u3ebvnwvyvuj6aeipe2f5llptkid.onion/
pfpmd - это тесно сплетенные в одно целое анонимный чат и текстовые борды. Тематика: computer science, математика, программирование, технологии, криптоанархизм, софт и т.п.

pfpmd существует с 2015 года. Изначально он был попыткой воскресить один ресурс, который назывался лолкс, но теперь это в прошлом. Населен небольшим количеством людей и имеет низкую активность, что и хотелось бы изменить. Из-за того, что pfpmd это tor hidden service, периодически туда заходят люди ищущие цп, гуро и т.п., но, ничего не найдя, быстро уходят. pfpmd не модерируется, бан невозможен, как и цензура. Логотипом pfpmd является символ Ω, в честь Chaitin omega number https://en.wikipedia.org/wiki/Chaitin%27s_constant

Фичи pfpmd:
-Борды не фиксированы, в форме создания поста можно указать имя новой борды и она будет создана динамически в момент создания поста.
-Можно менять описание борды, это может делать любой пользователь сколько угодно раз;
-На странице с чатом по дефолту отображаются сообщение не только из чата, но и со всех борд. Это поведение можно изменить в настройках.
-На станице чана отображаются треды со всех борд (у нас это было еще до нульчана). Но можно отобразить только треды какой-то одной борды, просто перейдя по ссылке этой борды.
-Картинки отображатся с некоторых ресурсов, например, imgur, twitter. Также показываются превьюшки видео с youtube и некоторых имиджборд. Список будет пополняться в будущем.
-Текстовое поле ввода чата поддерживает подобие командной строки. Есть команды для создания тредов, ответа в тред, изменения описания борды.
-Можно скрыть отображение всех сообщений с кириллицей.
-Поддерживается форматирование блоков кода. Подсветка синтаксиса реализована через highlight.js и выключена по дефолту, но ее можно влючить в настройках.
-Поддерживается форматирование математических формул через KaTeX. Но эта фича тоже выключена по дефолту.
-Есть страница с логами всех сообщений (включая борды) в обратном по дате порядке.

Основные принципы:
-Максимальное облегчение сервера, весь (кроме статического) html генерится на клиенте, сервер отправляет клиенту только сырые данные;
-Минимум зависимостей у клиентского кода. Всё, за исключение подсветки синтаксиса и математических формул, реализовано на голом javascript, без использования всяких jquery, vue.js и прочих фреймворков. Исходный код KaTeX и highlightjs подгружается только когда фичи включены в настройках.
-Отсутствие цензуры.

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

Следующим постом будет FAQ. Но, в любом случае, я буду отвечать в тред.
Сообщение слишком длинное. Полная версия.
>> No.48985 Ответ
FAQ
> По ссылке пустая страница без сообщений. Ничего не работает?
Надо включить js для pfpmd в настройках noscript. Исходный код не обфусцирован.

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

> Я не могу терпеть спам. Почему бы не чистить говно?
1. У меня нет на это времени. 2. Понятие спама у каждого свое. 3. Будущее клиентское приложение должно будет поддерживать пользовательские фильтры, каждый сам себе будет модератор. 4. Это нарушает один из основных принципов.

> Есть ссылка в клирнете?
Нету, pfpmd доступен только через тор.

> Что означает pfpmd?
Ничего, это просто первые пять символом рандомного хостнейма, который сгенерил тор.
FAQ
> По ссылке пустая страница без сообщений. Ничего не работает?
Надо включить js для pfpmd в настройках noscript. Исходный код не обфусцирован.

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

> Я не могу терпеть спам. Почему бы не чистить говно?
1. У меня нет на это времени. 2. Понятие спама у каждого свое. 3. Будущее клиентское приложение должно будет поддерживать пользовательские фильтры, каждый сам себе будет модератор. 4. Это нарушает один из основных принципов.

> Есть ссылка в клирнете?
Нету, pfpmd доступен только через тор.

> Что означает pfpmd?
Ничего, это просто первые пять символом рандомного хостнейма, который сгенерил тор.

> Что за лолкс?
https://lurkmore.to/%D0%9B%D0%BE%D0%BB%D0%BA%D1%81
Сообщение слишком длинное. Полная версия.
>> No.48986 Ответ
Файл: 1464748799129979470_1.gif
Gif, 8812.08 KB, 291×291 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1464748799129979470_1.gif
> pfpmd - это тесно сплетенные в одно целое анонимный чат и текстовые борды
> У меня нет на это времени
>> No.48988 Ответ
>>48986
Есть логи и тред со всеми сообщениями из чата. Можно раз в день на все ответить и дальше заниматься своими делами, например.
>> No.49023 Ответ
Оп, тематика заинтересовала, но я нихуя не понял. Есть гайд для самых маленьких? Захожу, вижу бессмысленный чат,вижу кучу по-видимому зашифрованной херни в разделе Chan. Как всем этим пользоваться?
>> No.49024 Ответ
>>49023
> Есть гайд для самых маленьких?
В chat - собственно чат. Если перейти в chan, то там будут треды со всех разделов с тремя последними ответами. У каждого треда там есть ссылка в борду, если по ней перейти, то отобразятся только треды этой борды. Ну, короче, очевидно же.
В чате отображаются сообщения со всех разделов. Когда тред не из чата, справа будет, например, /pr/123/ на зеленом фоне, т.е. имя борды и номер треда этого сообщения. Также это ссылки в эту борду и тред соответственно. Алсо, можно применить фильтр для скрытия сообщений не из чата.
У чата есть своя борда, которая называется /cht/ и в ней единственный тред, где отображаются сообщения всего чата (только чата).
Есть еще логи вообще всех сообщений, которые отображаются в обратном порядке, по 200 сообщений на страницу. Там тоже можно применить фильтр и оставить только сообщения чата.
Также есть фильтр кириллицы и много других фич, смотри ОП. И будет еще больше фильтров в будущем.
> Захожу, вижу бессмысленный чат
Побочный эффект отсутствия модерации и цензуры.
> вижу кучу по-видимому зашифрованной херни в разделе Chan
Это недавний вайп, мусор из /dev/random.
> Как всем этим пользоваться?
Просто пишешь, что тебя интересует на обозначенную тематику. В борды, в чат, куда угодно.


No.28005 Ответ [Открыть тред]
Файл: git.jpg
Jpg, 80.27 KB, 750×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
git.jpg
Собственно вопрос про гит например.

Есть некоторая удаленная репа, до которой имеем ssh-доступ. Когда я пушаю в нее с локальной, то запускается скрипт .git/hooks/post-receive, в котором там что-нибудь делается с проектом (чистится кэш, компилируются шаблоны, запускаются миграции и прочая херота).
#!/bin/sh
GIT_WORK_TREE=.. git checkout -f
echo "Something pushed to server. Yay!"
../scripts/update.sh
# например
Возможно ли запускать на удаленном сервере этот мой update.sh не один раз на пуш, а на каждый коммит (даже на те коммиты, которые во вмерженых в основную ветку бранчах)?
64 posts are omitted, из них 10 с файлами. Развернуть тред.
>> No.47844 Ответ
>>47843
Я пользовался и гитом и ртутью, они плюс-минус одинаковы по функционалу. Божественности в ртути не увидел.
>> No.47845 Ответ
>>47844
Говорят, она быстрее. Какой по величине репа была на ртути? Маленькая или большая?
>> No.47847 Ответ
>>47845
Небольшая репа на ртути. Около сотни коммитов, емнип. С огромными репами под гиг размером приходилось работать, не сказать что прями пиздос медленно становится.
>> No.47848 Ответ
Можно ли сделать так, чтобы git не запоминал логин и пароль на github. Сбрасываю на работе всякие маленькие фрагменты кода на свой гитхаб, не хотелось бы светить там свои данные.
Обычно все наоборот хотят эту фичу. Почитал вот здесь:
https://git-scm.com/docs/gitcredentials
https://git-scm.com/docs/git-credential-store
http://support.beanstalkapp.com/article/856-how-do-i-make-git-remember-my-credentials
Включить просто, да и по умолчанию она включена, а вот как отключить - не понятно.
>> No.47849 Ответ
>>47848
Есть два способа склонировать репу: по протоколу https или по git.
В первом случае в файле .git/config в разделе [remote "origin"] будет строка вида url = https://github.com/юзернаме/репонаме и доступ на запись к этой репе будет по логину и паролю, которые будут всегда спрашиваться.
Во втором случае будет url = git@github.com:юзернаме/репонаме.git и для доступа нужно будет залить в настройках гитхаб-акка публичную часть rsa-ключа, пароль спрашиваться не будет.

Так что сделай до этого своего проекта доступ по https, а для всех остальных по git.
>> No.48011 Ответ
Кто-нибудь юзал CVSNT? Расскажите о разграничении прав доступа в папке репозитория или киньте ссылкой по администрированию.
>> No.48025 Ответ
>>48011
http://circe.univ-fcomte.fr/Docs/CVS/cvs.html — кинул.
> note that users must have write access to the CVSROOT/val-tags file
Если этого не сделать, клиент просто подвиснет.
>> No.48075 Ответ
fossil отличнейшая vcs.
>> No.48968 Ответ
Файл: New-Mind-Map.jpg
Jpg, 64.98 KB, 1434×710 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
New-Mind-Map.jpg
Здравствуй, медленно/s/.
Использую в проекте alembic для миграций. Само собой решил добавить миграции в проект, но не все.
Хочу чтобы в dev ветке были все миграции базы, со всеми экспериментами и промежуточными вариантами, а в master ветке были только миграции, необходимые для переката с прошлого релиза, а миграции dev ветки туда не попадали.
Как это можно сделать правильнее?

Капча пытается что-то подсказать: момента настала версий сдвинулась
>> No.48969 Ответ
>>48968
> добавить миграции в git
fix


No.48777 Ответ [Открыть тред]
Файл: Leezonka.jpg
Jpg, 593.57 KB, 1920×1080 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Leezonka.jpg
Кое-как выучил Python по книге Мэтиза и разобрался с ООП по статьям из сети. Недавно начал читать книгу по алгоритмам и параллельно почитывать "C++. Базовый курс". Так же пытаюсь разобраться с Lua и фреймворком LÖVE2D, получается пока что не очень, скорее всего придётся читать книгу по Lua, чтобы лучше вникнуть.
Но знаете что? Я не написал ещё ни одной программы, ни одной. Я писал различные формулы и недокалькуляторы в консоли, заливал фон синим цветом в LÖVE и всё.
Я не понимаю что делать дальше. Продолжать читать книги по языкам, алгоритмам и CS или же идти что-то писать? Помогите, аноны.
24 posts are omitted, из них 5 с файлами. Развернуть тред.
>> No.48946 Ответ
>>48944
У меня мозг от любой тех.литературы кипит. Мне проще сразу погружаться по книгам, которые описывают C++11, стандартную библиотеку и основы ООП.

>>48945
Чтобы работать за 300 долларов в месяц и говорить какие веб-девы тупые, очевидно ведь.
>> No.48947 Ответ
>>48946
> и основы ООП
коза.ебись(онегин);
>> No.48948 Ответ
>>48947
А в скобках что такое? Это мы записываем метод ебись класса коза, а аргумент просто так? Пытаюсь в нём найти какое-то скрытое послание.
А вообще, под основами я имел ввиду именнно синтаксис для определённого языка, а то в этом вашем пистоне я до сих пор в стане от этого ООП-синтаксиса, благо разобрался быстро, хоть и болезненно. По ООП, полагаю, лучше книги почитать, которые заточены именно под эту тему и не берут какой-то язык в качестве среды для показа этого объектного говна. Скорее всего я неправ, так как хуй с горы.
>> No.48949 Ответ
Файл: 15055769674640.jpg
Jpg, 54.64 KB, 604×454 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
15055769674640.jpg
>>48948
Долбоёб? Нахуя читать книги про ООП, если ООП - простейшая парадигма. Попробуй применить объекты реального мира и сразу всё станет понятно. какой объект, какие свойства есть у объекта, что может делать объект.
>> No.48950 Ответ
>>48948
Автор комментария хотел сказать, что коза ебет онегина.
>> No.48951 Ответ
Файл: IMG_20180130_164334.jpg
Jpg, 85.69 KB, 447×526 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
IMG_20180130_164334.jpg
>>48950
Нет девочка. Онегин меняет внутреннее состояние козы.
>> No.48952 Ответ
>>48951
Нет ты.

Из названия функции это не понятно.
Стоит переименовать в
коза.сношается_бай(онегин);
В случае с
коза.ебись(онегин);
более очевидно, что коза ебет онегина.

Не прошел ревью твой код

Ну или надо было объявление класса козы выкатывать, из него бы было понятно, что онегин - константный, а метод - нет.
>> No.48953 Ответ
>>48949
И чего мне с этого? На примерах из реального мира всё действительно просто, а в этом вашем коде эту ебатню нужно реализовать, ещё и грамотно реализовать. Иначе если оно не будет эффективно в моей программе, то зачем мне вообще её применять? Я в связи с этим и не сую ООП в свои недопроекты, потому что он там нахуй не нужен, а писать с ООП ради ООП это говно какое-то. Как только перейду черту, когда буду писать на 1000+ строк, тогда буду применять ООП. Ну или когда наконец начну хоть что-то писать на плюсах, но пока что я их только учить пытаюсь.
>> No.48958 Ответ
>>48953
> а писать с ООП ради ООП это говно какое-то
Как раз таки так и нужно делать. Ты можешь написать один и тот же функционал разными подходами. Можешь подсовывать аргументом функцию обработчик, а можешь подсовывать объект который умеет обрабатывать
>> No.48960 Ответ
>>48953
> писать с ООП ради ООП это говно какое-то
Нет. Так и стоит делать. Ты можешь реализовать какой либо функционал подсовывая функцию обработки или подсовывая объект который умеет обрабатывать. ООП - это один из подходов к решению задачи, а не инструмент решения каких-то конкретных задач


No.48895 Ответ [Открыть тред]
Делимся годными гайдами, либами, примерами etc.
Вот например либа, которая очень помогает в работе с реалмом: https://github.com/vicpinm/Kotlin-Realm-Extensions

Также сейчас постигаю dependency injection. Кое-как освоил надеюсь Dagger 2, но в интернетах уже есть инструменты поинтереснее - Kodein (инфы мало) и KOIN (ещё меньше). Собсно стоит пытаться на них перелезать с Dagger'a?
>> No.48896 Ответ
Зачем ты так спойлеры используешь?


No.36714 Ответ [Открыть тред]
Файл: 20z_ZW7lnTw.jpg
Jpg, 47.63 KB, 820×325 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
20z_ZW7lnTw.jpg
У нас есть Vim-тред, пусть будет и Emacs.
176 posts are omitted, из них 26 с файлами. Развернуть тред.
>> No.47220 Ответ
>>47216
Нет, это совсем не то.
>> No.47221 Ответ
>>47215
Я думал тут за пол часа набросать тебе решение, но понял что задача нетривиальная ввиду того, что путешествуя по истории регионов (выделений) ты будешь создавать новые выделения. В любом случае, публикую свои наработки:
http://pastebin.com/W321qZwe
>> No.47318 Ответ
Файл: -.png
Png, 3.51 KB, 235×49
edit Find source with google Find source with iqdb
-.png
Файл: -.png
Png, 9.83 KB, 900×92
edit Find source with google Find source with iqdb
-.png

Есть одна проблема. Использую емаксклиент, так вот если им попытаться открыть файл который нельзя читать, то вместо ошибки, происходит пик 1, дальше я жму ^C и терминал ломается до перезапуска, перестает отображаться вводимый текст и перевод каретки, весь вывод отображается в одну строку, можно ли это исправить?
>> No.47468 Ответ
>>47318
У меня выводится сообщение об ошибке в таком случае. Какая версия emacs, открываются ли файлы которые можно читать?
>> No.47469 Ответ
>>47468
Читаемые файлы открываются. Если emacsclient -c, то ошибка выводится, а если emacsclient -t, то ломается терминал.
Версия 24.5.1
>> No.47470 Ответ
>> No.48089 Ответ
Файл: magit-400x400px.png
Png, 10.03 KB, 400×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
magit-400x400px.png
Подайте автору магита, кто сколько может.
https://www.kickstarter.com/projects/1681258897/its-magit-the-magical-git-client
>> No.48855 Ответ
Не осталось ли у кого книги Д.Бушенко по elisp? В гугле нихрена нет...
>> No.48885 Ответ
>> No.48893 Ответ
>>48885
Спасибо.


No.31137 Ответ [Открыть тред]
Файл: 07_009.jpg
Jpg, 62.06 KB, 1024×573 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
07_009.jpg
В рамках треда предлагаю обсуждать веб как он есть, задавать ответы по темам верстки и серверново программирования, да и просто обсуждать всякие рющечки веба и пить чаек с печеньками.

>>u/62144 Собсно кафедра в университете. Полезные ссылочки >>u/91168 >>u/91394

Алсо PHP-тред >>23225 SQL-тред >>29820 Python-тред >>28158

Тред создан во имя поисковой оптимизации.
280 posts are omitted, из них 48 с файлами. Развернуть тред.
>> No.48505 Ответ
>>48504
Это техническая литература, а не художественная, она намного проще.
>> No.48506 Ответ
Файл: 1420693858-79f71fb0c0155621db3674c0338b08e1.jpg
Jpg, 161.77 KB, 850×637 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1420693858-79f71fb0c0155621db3674c0338b08e1.jpg
>>48505
Я, конечно, попробую, но реквест русскоязычных источников оставлю в силе.
>> No.48526 Ответ
>>48501
А насколько он вообще нужен и распространён?
>> No.48527 Ответ
>>48526
Весьма удобен, когда надо накидать аккуратную вебморду, а ты не понимаешь в этих всех цссах и верстках.
>> No.48528 Ответ
>>48527
А как мне самому прикинуть уровень своих знаний и умений? И заодно узнать как выглядит вёрстка со стороны разработчика.
>> No.48560 Ответ
Насколько я понял, есть два пути: путь ложной простотыphp+sql и путь явной сложностиhtml+css+javascript +php+sql || +python+sql. Ох уж эта веб-разработка, я-то думал, что за год на базовом уровне всё освою.
>> No.48564 Ответ
>>48560
Всегда начинали изучение с простого. Возьми книгу «JavaScript for Kids», потом «Understanding ECMAScript 6» и с них начинай.
>> No.48568 Ответ
>>48564
> «JavaScript for Kids»
Слишком сложно, пробую пока http://jsforcats.com/
>> No.48682 Ответ
Анон, выручай.
Сбацал, значится, на коленке сайт, чтобы текст выводить, поднял на Апаче, да столкнулся с проблемой - жабаскрипт не работает!
Конкретно: через PHP реализована "сборка" веб-страницы (из шаблонов, плюс параметры), с помощью которой я добавил тэг <script> и вызвал функцию из файла. Сам файл лежит в папке scripts, которая в корне.
В консоль выводит следующее:
`Uncaught SyntaxError: Unexpected token <`
Причём эта ошибка перенаправляет почему-то на вообще левый файл.
А вот это:
`Uncaught ReferenceError: getWork is not defined`
говорит о том, что функцию оно почему-то вообще не воспринимает как уже объявленную.
ЧЯДНТ? И как вообще правильно встраивать через пыху жабаскрипт?
>> No.48811 Ответ
Файл: 79-Slowpoke.png
Png, 95.98 KB, 800×647 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
79-Slowpoke.png
>>48682
Просто руками перепиши места, на которые ругается консоль. Мне обычно помогает, если я сразу не вижу ошибку.


No.48457 Ответ [Открыть тред]
Файл: 1-soPiTsrgWsHZO2Z...
Png, 1468.07 KB, 2000×958
edit Find source with google Find source with iqdb
1-soPiTsrgWsHZO2ZHCQA_IA.png
Файл: vdfs.png
Png, 37.74 KB, 1207×826
edit Find source with google Find source with iqdb
vdfs.png
Файл: rustacean-error.png
Png, 37.41 KB, 573×300
edit Find source with google Find source with iqdb
rustacean-error.png

Зачем нужен? Во имя закапывания няшного и крестов. По крайней мере там, где можно избежать легаси и хочется писать как белый человек. Embedded пока с парой костылей вроде xargo, операционки, браузеры, всякий тяжелый код. Язык, где ты можешь отстрелить себе конечности, но ружья выдают только по карточкам. Компилятор в основном занимается твоим унижением.

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

Чего нет или ещё нет? Типов высшего порядка, константных генериков, alloca и ещё парочки похожих штук. Но работы ведутся. Ещё нет библиотек на все случаи жизни. За те несколько лет существования не успели. 1.5 вакансии уже есть, но их только 1.5. Использование нестабильной версии всё ещё актуально.

Оффициальный сайт: https://www.rust-lang.org/
Мануал: https://doc.rust-lang.org/book/second-edition/
Пакеты: https://crates.io/
18 posts are omitted, из них 3 с файлами. Развернуть тред.
>> No.48695 Ответ
Файл: King_sombra-s_eyes_at_the_top_of_the_shadow_S3E1.png
Png, 470.40 KB, 1280×720 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
King_sombra-s_eyes_at_the_top_of_the_shadow_S3E1.png
>>48694
> попробуй сначала доучить язык
у меня ограничено время на эту ересь
> Глава "Время жизни" и глава "Изменяемость (mutability)"
займемся
> Форматируй код нормально
это моя извечная проблема, ее решить мне так и не удается, но если не понятно, то есть двумерный список структур, у структуры есть функция, которая анализирует элименты вокруг него и если понадобится передвигает себя в один из этих элиментов. вообщем я думаю ты уже запутаешься на этом моменте, поэтому буду страдать.
> Heresy::lock()
это действительно ересь. надо было Obj::lock()
> Так ещё хуже, чем скриншотами
вот это обидно, я старался, хотя понимаю. лучше свич сделал, но все делалось на коленках и мозги были в отпустке
> И глобальные функции/переменные не используй. СОВСЕМ не используй
кстати на заметку. у меня такие есть и их даже 3...
>> No.48705 Ответ
Файл: Sombra_mouth_wide...
Png, 56.89 KB, 300×169
edit Find source with google Find source with iqdb
Sombra_mouth_wide_open_S3E2.png
Файл: helpneed.png
Png, 9.06 KB, 467×443
edit Find source with google Find source with iqdb
helpneed.png

я конечно туплю, но не знаю что делать. не подключается
>> No.48706 Ответ
Файл: 342-12.02.13-sombra_by_sajira-d5ko3xr.png
Png, 103.50 KB, 322×531 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
342-12.02.13-sombra_by_sajira-d5ko3xr.png
>>48705
проблема решена
>> No.48716 Ответ
Файл: sombra1.jpg
Jpg, 48.90 KB, 1280×720 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
sombra1.jpg
ну что, новая проблема. программа запускается, работает, но в определенный момент виснет. без ошибок и всякого такого. мне хотелось бы узнать. почему? как удалось выяснить?

если кто захочет по мучаться, то опишу константы. HEIGHT,WIDTH- высота и ширина соответственно, N= колличество ячеек по ширине и высоте, должно быть равно константе в inf, RANDEA- шанс появления еды, RENDMUда-да, знаю что неправильно, исправлять лень,- шанс мутаций. Vtp- схема отображения 0- пищевая, 1- защитная, 2- энергетическая. с остольным разбобраться можно, благо я даже названя нормальные давал а если не удастся то не судьба

extern crate sdl2;
extern crate rand;
//use sdl2::pixels::PixelFormatEnum;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;
use sdl2::gfx::primitives::DrawRenderer;
use sdl2::render::Canvas;
use sdl2::video::Window;
use std::f64;
//use std::mem;
ну что, новая проблема. программа запускается, работает, но в определенный момент виснет. без ошибок и всякого такого. мне хотелось бы узнать. почему? как удалось выяснить?

если кто захочет по мучаться, то опишу константы. HEIGHT,WIDTH- высота и ширина соответственно, N= колличество ячеек по ширине и высоте, должно быть равно константе в inf, RANDEA- шанс появления еды, RENDMUда-да, знаю что неправильно, исправлять лень,- шанс мутаций. Vtp- схема отображения 0- пищевая, 1- защитная, 2- энергетическая. с остольным разбобраться можно, благо я даже названя нормальные давал а если не удастся то не судьба

extern crate sdl2;
extern crate rand;
//use sdl2::pixels::PixelFormatEnum;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;
use sdl2::gfx::primitives::DrawRenderer;
use sdl2::render::Canvas;
use sdl2::video::Window;
use std::f64;
//use std::mem;
//use std::ptr;
use rand::{Rng,thread_rng};
use std::time::Duration;
const Vtp:i16 = 2;
static HEIGHT:u32 = 600;
static WIDTH:u32 = 800;
const N:u32 = 40;
const RANDEA:u32 = 1;
pub fn main() {
let context = sdl2::init().unwrap();
let video = context.video().unwrap();
let mut rng = rand::thread_rng();
let window = video.window("rust-sdl2 demo: Video", WIDTH, HEIGHT)
.position_centered()
.opengl()
.build()
.unwrap();
let mut canvas = window.into_canvas().build().unwrap();
let tc = canvas.texture_creator();
let mut tex = tc.createtexturestatic(tc.defaultpixelformat(), 150,
150).unwrap();
canvas.clear();
canvas.setdrawcolor(Color::RGB(255, 210, 0));
let mut a:[[inf::Obj;N as usize];N as usize] =
unsafe{std::mem::uninitialized()};
for i in a.iter_mut(){
for j in i.iter_mut(){
unsafe{::std::ptr::write(j,inf::Obj::newNu())}
}
}
a[10][10]=inf::Obj::newPl(100,0,0);
let mut eventpump = context.eventpump().unwrap();
let mut run = true;
while run {
for event in eventpump.polliter() {
match event {
Event::Quit {..} | Event::KeyDown { keycode:
Some(Keycode::Escape), .. } => {
run = false;
},
_ => {}
}
}
for i in a.iter_mut(){
for j in i.iter_mut(){
if j.otp() == 2 {
*j= j.mkcour();
} else if (j.otp() == 0) &(rng.gen_range(0,100) < RANDEA) {*j =
inf::Obj::newEa();}
}
}
for i in 0..((N) as usize){
for j in 0..((N) as usize){
let a0 = a[i][j].copy();
if (a[i][j].otp() == 2) & (a0.getcour()){a[i][j]= a0.itr(&mut
a,i,j);}
}
}
fild(&canvas,&a);
canvas.present();
// std::thread::sleep(Duration::from_millis(2000));
}
// let mut eventpump = context.eventpump().unwrap();
// 'running: loop {
// for event in eventpump.polliter() {
// match event {
// Event::Quit {..}
// | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
// break 'running
// },
// _ => {}
// }
// }
// }
}
fn fild(canvas:&Canvas,arr:&[[inf::Obj;N as usize];N as usize]){
let r = (if HEIGHT/(2 + 3(N-1)/2) < (((WIDTH as f64)/(((2N+1) as
f64)(( f64::consts::PI/3.0).sin()))) as u32) {HEIGHT/(2+3(N-1)/2)} else
{((WIDTH as f64)/(((2N+1) as f64)(( f64::consts::PI/3.0).sin()))) as u32}) as
i16;
let a =(( f64::consts::PI/3.0).sin() * (r as f64)) as i16;
let mut x;
let mut c;
let mut y = r;
let mut f = true;
for i in (&arr).iter(){
if f {
x=a;
f=false;
} else {
x=2*a;
f=true;
};
for j in i.iter(){
c=j.col(Vtp);
hex(&canvas,x,y,r,Color::RGB(c.0,c.1,c.2));
x+=2*a;
}
y+=(3*r/2);
}
}
fn hex(c:&Canvas,x:i16,y:i16,r:i16,color:Color){
let a =(( f64::consts::PI/3.0).sin() * (r as f64)) as i16;
&c.filled_polygon(&[x,x+a,x+a,x,x-a,x-a],&[y-r,y-r/2,y+r/2,y+r,y+r/2,y-
r/2],color);
}
mod inf {
extern crate rand;
use rand::{Rng,thread_rng};
const N:usize = 40;
const RENDMU:i32 = 0;
pub struct Obj {
course:bool,
cond:i16,
side:i16,
tp:i16,
hp:i16,
def:i16,
off:i16,
liveiter:i16,
livebreed:i16,
liveancestor:i16,
table:Vec< [(i16,i16);4]>
}
impl Obj{
pub fn newPl(hp:i16,lb:i16,la:i16) -> Obj {
Obj
{course:false,cond:0,side:0,tp:2,hp:hp,def:0,off:0,liveiter:0,livebreed:lb,livea
ncestor:la,table:vec![Obj::vecstr()]}
}
pub fn newEa() -> Obj{
Obj
{course:false,cond:0,side:0,tp:1,hp:10,def:0,off:0,liveiter:0,livebreed:0,livean
cestor:0,table:vec![]}
}
pub fn newNu() -> Obj{
Obj
{course:false,cond:0,side:0,tp:0,hp:0,def:0,off:0,liveiter:0,livebreed:0,liveanc
estor:0,table:vec![]}
}
pub fn lock() -> Obj{
Obj
{course:false,cond:0,side:0,tp:3,hp:0,def:0,off:0,liveiter:0,livebreed:0,liveanc
estor:0,table:vec![]}
}
pub fn col(&self,t:i16) -> (u8,u8,u8){
match t {
0 => if self.tp == 0 {(255,255,255)} else if self.tp == 1
{(0,255,0)}else if self.tp==2 {((self.off255/2) as u8,0,((2-self.off)255/2) as
u8)} else {(0,0,0)},
1 => if self.tp == 0 {(255,255,255)} else if self.tp == 1
{(0,255,0)}else if self.tp==2 {if self.def == 0 {(244,205,138)} else if self.def
== 1 {(114,130,87)} else {(66,13,74)} } else {(0,0,0)},
2 => if self.tp == 0 {(255,255,255)} else if self.tp == 1
{(0,255,0)}else if self.tp==2 {((self.hp*255/100) as u8,0,0)} else {(0,0,0)}
_ => (0,0,0),
}
}
fn vecstr() -> [(i16,i16);4] {
[(0,0),(0,0),(1,0),(1,0)]
}
pub fn otp(&self) -> i16{
self.tp
}
fn war(&self,a:&mut Obj) -> bool{
((self.off == 0) & ((a.tp == 0)|(a.tp == 1))) | ((a.tp == 2) &
(self.off > a.def))
}
pub fn mkcour(&self ) -> Obj {
Obj
{course:true,cond:self.cond,side:self.side,tp:2,hp:self.hp,def:self.def,off:self
.off,liveiter:self.liveiter,livebreed:self.livebreed,liveancestor:self.liveances
tor,table:self.table.clone()}
}
pub fn getcour(&self) -> bool {
self.course
}
pub fn itr(&self,a1:&mut [[Obj;N];N],i:usize,j:usize) -> Obj{
println!("{},{} - {} -{}",i,j,self.hp,self.side);
for i0 in self.table.iter(){
print!("({},{}),({},{}),({},{}),({},{})",
i0[0].0,i0[0].1,i0[1].0,i0[1].1,i0[2].0,i0[2].1,i0[3].0,i0[3].1);
}
println!("");
if self.hp > 100{
self.division(a1,i,j)
} else {
let mut lock = Obj::lock();
let a =match (self.side) {
0 => if j+1 < N {&mut a1[i][j+1]} else {&mut lock},
1 => if i%2 == 0 {
if i+1 < N {&mut a1[i+1][j]} else {&mut lock}
}else{
if (i+1 < N) & (j+1 < N) {&mut a1[i+1][j+1]} else
{&mut lock}
},
2 => if i%2 == 0 {
if (i+1 < N) & (j >0) {&mut a1[i+1][j-1]} else {&mut
lock}
} else {
if i+1
},
3 => if j > 0 {&mut a1[i][j-1]} else {&mut lock},
4 => if i%2 == 0 {
if (i > 0) & (j >0) {&mut a1[i-1][j-1]} else {&mut
lock}
} else {
if i > 0 {&mut a1[i-1][j]} else {&mut lock}
},
5 => if i%2 == 0 {
if i > 0 {&mut a1[i-1][j]} else {&mut lock}
} else {
if (i > 0) & (j+1 < N) {&mut a1[i-1][j+1]} else
{&mut lock}
},
_ => &mut lock,
};
let (l,ncond) = self.table[self.cond as usize][a.tp as usize];
let nhp = self.hp - (1 + (self.table.len() as i16)/5) - (if l ==
3 {0} else {1})*(self.def +1)/(if (l==1) |(l==2){2} else {1});
if nhp <= 0{
Obj::newNu()
} else {
match l {
0 => {
if self.war(a){
*a = Obj
{course:false,cond:ncond,side:self.side,tp:2,hp:(nhp + a.hp -
3*self.off),def:self.def,off:self.off,liveiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()};
Obj::newNu()
} else {
Obj
{course:false,cond:ncond,side:self.side,tp:2,hp:nhp,def:self.def,off:self.off,li
veiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()}
}
},
1 => Obj {course:false,cond:ncond,side:(if self.side ==
5 {0} else {self.side +1}),tp:2,hp:nhp,def:self.def,off:self.off,liveiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()},
2 => Obj {course:false,cond:ncond,side:(if self.side ==
0 {5} else {self.side -1}),tp:2,hp:nhp,def:self.def,off:self.off,liveiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()},
3 => Obj
{course:false,cond:ncond,side:self.side,tp:2,hp:nhp,def:self.def,off:self.off,li
veiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()},
_ => Obj::lock(),
}
}
}
}
fn division(&self,a1:&mut [[Obj;N];N],i:usize,j:usize) -> Obj{
let hp = (self.hp -20)/2;
let inc:[(i16,i16);6] = [(i as i16,(j as i16)+1),if i%2 == 0 {((i as
i16)+1,j as i16)} else{((i as i16)+1,(j as i16)+1)},if i%2 == 0 {((i as i16)+1,
(j as i16)-1)} else {((i as i16)+1,j as i16)},(i as i16,(j as i16)-1),if i%2 ==
0 {((i as i16)-1,(j as i16)-1)}else {((i as i16)-1,j as i16)},if i%2 == 0 {((i
as i16)-1,j as i16)} else {((i as i16)-1,(j as i16)+1)}];
let mut i1=self.side as usize;
if ((inc[i1].0 >=0) & (inc[i1].1>=0) & (inc[i1].0 <(N as i16)) &
(inc[i1].1 < (N as i16))){
if (a1[inc[i1].0 as usize][inc[i1].1 as usize].tp == 0) {
a1[inc[i1].0 as usize][inc[i1].1 as usize] = self.baby((i1
as i16),hp);
}
} else {
while {
if i1 == 0 {i1 = 5} else {i1-=1};
if (inc[i1].0 >=0) & (inc[i1].1>=0) & (inc[i1].0 < N as
i16 ) & (inc[i1].1 < N as i16){
a1[inc[i1].0 as usize][inc[i1].1 as usize].tp == 0
} else {i1 == (self.side as usize)}
} {}
if((i1==(self.side as usize)) & (inc[i1].0 >=0) & (inc[i1].1>=0)
& (inc[i1].0
if (a1[inc[i1].0 as usize][inc[i1].1 as usize].tp == 0) {
a1[inc[i1].0 as usize][inc[i1].1 as usize] =
self.baby((i1 as i16),hp);
}
}
}
self.baby((i1 as i16),hp)
}
fn baby (&self,side:i16,nhp:i16) -> Obj{
let mut rng = rand::thread_rng();
if (rng.gen_range(0,100) < RENDMU){
println!("mutation!");
let mut ndef= self.def;
let mut noff= self.off;
let mut ntable = self.table.clone();
if rng.gen() {
if rng.gen() {
ndef = match ndef {
0 => 1,
1 => if rng.gen() {0} else {2},
2 => 1,
_ => 0,
};
} else {
noff = match noff {
0 => 1,
1 => if rng.gen() {0} else {2},
2 => 1,
_ => 0,
};
}
} else {
let i = rng.gen_range(0,self.table.len());
let j = rng.gen_range(0,4);
if rng.gen() {
ntable[i][j] = (rng.gen_range(0,4),ntable[i][j].1);
} else {
let k = ntable[i][j].1;
let nk = rng.gen_range(0,ntable.len()+1);
ntable[i][j] = (ntable[i][j].0,nk as i16);
if nk == ntable.len(){ntable.push(Obj::vecstr());}
let mut f =true;
for i1 in 0..(ntable.len()){
for j1 in 0..4 {
if ((ntable[i1][j1].1 == k) & (i1 != (k as
usize))) {f=false;}
}
}
if f & (k != 0){
for i1 in 0..(ntable.len() -1){
if (i1 >= (k as usize)){
ntable[i1] = ntable[i1+1];}
for j1 in 0..4{
if ntable[i1][j1].1 > k {
ntable[i1][j1] = (ntable[i1]
[j1].0,ntable[i1][j1].1-1);
}
}
}
ntable.pop();
}
}
}
Obj {course:false,cond:0,side:rng.gen_range(0,
6),tp:self.tp,hp:nhp,def:ndef,off:noff,liveiter:0,livebreed:0,liveancestor:self.
liveiter,table:ntable.clone()}
} else {
Obj {course:self.course,cond:self.cond,side:rng.gen_range(0,
6),tp:self.tp,hp:nhp,def:self.def,off:self.off,liveiter:0,livebreed:self.livebre
ed+1,liveancestor:self.liveiter,table:self.table.clone()}
}
}
pub fn copy(&self) ->Obj {
Obj
{course:self.course,cond:self.cond,side:self.side,tp:self.tp,hp:self.hp,def:self
.def,off:self.off,liveiter:self.liveiter,livebreed:self.livebreed,liveancestor:s
elf.liveancestor,table:self.table.clone()}
}
}
}

>>48694
> Форматируй код нормально
> Так ещё хуже, чем скриншотами
братишка, я тебе покушать принес
Сообщение слишком длинное. Полная версия.
>> No.48717 Ответ
>>48716
> братишка, я тебе покушать принес
А, ну ясно. Значит моя помощь не требуется.
>> No.48719 Ответ
Файл: sombra1.png
Png, 3599.93 KB, 1278×1406 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
sombra1.png
>>48717
да не, нужна
>> No.48724 Ответ
>> No.48740 Ответ
Файл: _mlp__king_sombra_by_gloriajoy-daim11i.png
Png, 898.20 KB, 1024×882 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
_mlp__king_sombra_by_gloriajoy-daim11i.png
я так и не получил ответ на свой вопрос, но все же задам новый. как с помошью Arc ну или без него передать переменную в поток событие, что-бы значение изменилось в основнм потоке. причем надо сделать 3 потокасобытия в начинающиеся в одном.

кстати, с того момента моя программа получила еще пару багов: иногода она не запускается, а еще изредка вообще из-за нее виснут иксы
>> No.48742 Ответ
Файл: Sombra_mouth_wide_open_S3E2.png
Png, 56.89 KB, 300×169 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Sombra_mouth_wide_open_S3E2.png
>>48740
https://kgv.gitbooks.io/rust_book_ru/content/src/concurrency.html
вроди как тут. надо не просто объявлять а с мьютексом
>> No.48756 Ответ
Файл: talking_captcha.png
Png, 0.97 KB, 300×20
edit Find source with google Find source with iqdb
talking_captcha.png
Файл: comp-1.gif
Gif, 128.33 KB, 320×240
edit Find source with google Find source with iqdb
comp-1.gif

Упс. Забыл про последнюю часть: https://habr.com/post/354784/


No.48658 Ответ [Открыть тред]
Файл: 1389194-will-program-for-food.jpg
Jpg, 131.32 KB, 660×440 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1389194-will-program-for-food.jpg
Привет, /s/.
Думаю, много кто знаком с подобной ситуацией.

Закончил вуз по направлению разработки ПО.
С тех пор прошло полтора года (почти 2). Пытался пилить небольшой проект на коленке (не потянул конкуренцию), затем начал как следует изучать стек технологий и, думаю, теперь, вполне себе сойду за твёрдого джуниора.

И тут самое интересное. Начал искать вакансии для junior .net разработчика, а их нет (в выбранном городе).

Быть может, можно как-то иначе найти вакансию джуниора?
Думаю, по рассылать резюме на вакансии для мидлов (с пояснением, что я тяну только на джуна, но стремлюсь за пол года - год дорасти до мидла), но не спугну ли я навсегда часть работодателей?
>> No.48661 Ответ
>>48658
Попробуй в твиттере, телеграмме и фейсбуке поискать. Часть вакансий публикуется в локальных тусовочках.
>> No.48665 Ответ
>>48661
Однако. Хлопотный вариант.
Подожду какое-то время, да попробую. Спасибо.
>> No.48666 Ответ
>>48665
Из тусовок могу посоветовать в твиттере канал backendsecret.
>> No.48677 Ответ
>>48666
Не нашел подходящих вакансий, но спасибо, что поделился.
>> No.48678 Ответ
>>48677
Ты из этого канала можешь людей всяких зафоловить, иногда они репостят вакансии. Фронтендер Козуля регулярно какие-то репостит.
>> No.48701 Ответ
Файл: 1523677383213.jpg
Jpg, 615.76 KB, 850×477 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1523677383213.jpg
>>48658
> Пытался пилить небольшой проект на коленке (не потянул конкуренцию), затем начал как следует изучать стек технологий
Разве не в обратном порядке надо делать?
>> No.48704 Ответ
Файл: 1334515748_231.png
Png, 726.73 KB, 787×522 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1334515748_231.png
>>48701
«Мы все учимся созидая» ©
>> No.48743 Ответ
>>48701
По моему, это немного спорный вопрос.
После корявой практики (при поддержке гугла) теория заходит существенно лучше.
Хоть и, понятно, что практика будет корявой.

В идеале, оно должно как-то хитро переплетаться для достижения максимальной эффективности изучения.
>> No.49188 Ответ
Файл: Felix.jpg
Jpg, 77.56 KB, 700×415 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Felix.jpg
Выбор правильного места работы или как работая программистом не умереть от инфаркта

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

Лет до 25 я в буквальном смысле слова болтался "как говно в проруби" по разным, не побоюсь этого слова, конторам. Зачастую часто увольнялся после нескольких месяцев и практически не рос в профессиональном плане. Часто работал "за копейки" "у чёрта на куличиках", в весьма сомнительных организациях, где не было перспектив как карьерного, так и профессионального роста. Всё изменилось после моего трудоустройства в компанию Мвидео в 2011 году: я попал в огромную корпорацию №1 в России по продаже бытовой техники. Думаю, не нужно объяснять, чем компания с оборотом в 203 миллиарда отличается от типовой ЗАО "Рога и Копыта". В этой компании я проработал несколько лет и настолько привык к хорошим условиям труда, уважению к сотрудникам и наличию салфеток в туалете, что отныне не испытываю ни малейшего желания работать в более худших условиях.

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

Выбор правильного места работы или как работая программистом не умереть от инфаркта

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

Лет до 25 я в буквальном смысле слова болтался "как говно в проруби" по разным, не побоюсь этого слова, конторам. Зачастую часто увольнялся после нескольких месяцев и практически не рос в профессиональном плане. Часто работал "за копейки" "у чёрта на куличиках", в весьма сомнительных организациях, где не было перспектив как карьерного, так и профессионального роста. Всё изменилось после моего трудоустройства в компанию Мвидео в 2011 году: я попал в огромную корпорацию №1 в России по продаже бытовой техники. Думаю, не нужно объяснять, чем компания с оборотом в 203 миллиарда отличается от типовой ЗАО "Рога и Копыта". В этой компании я проработал несколько лет и настолько привык к хорошим условиям труда, уважению к сотрудникам и наличию салфеток в туалете, что отныне не испытываю ни малейшего желания работать в более худших условиях.

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

Я надеюсь также (очень), что когда-нибудь программистишки поебошат друг друга в мелкий винегрет - и нам всем станет немного легче.

Избегайте компаний-голодранцев и компаний-эксплуататоров

На сайте orabote.top я обнаружил очень хорошую статью под названием "Основные виды работодателей", её автор выделил три основные типа компаний:

Компании-голодранцы - задерживают и/или не выплачивают з/п. Официально не оформляют. Начальники-самодуры и дилетанты:

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

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

Аналог завода:

Это компании с внятной стратегией, чаще с регламентом, где каждый сотрудник знает, что именно он должен делать в течении рабочего дня, за что получит премию, а за что будет оштрафован. Самыми наглядными примерами таких компаний являются торговые сети, например, "Магнит", "Пятерочка", "Метро", "МакДональдс", "Евросеть", "Эльдорадо" и подобные. Сама тенденция мира к глобализации подталкивает бизнес к такому формату. К сожалению внедрение системы подразумевает сведЕние влияния сотрудника на рабочий процесс к порядку определенных и понятных действий, что автоматически переводит того в разряд несложнозаменимых. Зарплаты в таких компаниях весьма и весьма скромные и за каждый рубль вы отработаете - будьте уверены.

Компании-эффективные (наиболее редко встречающийся вид) - позволяют вам реализоваться как специалисту, при этом вы зарабатываете:

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

Вы должны искать именно компанию третьего типа - эффективную. Если вы устроитесь программистом в компанию-голодранцев или в компанию-эксплуататоров, то будьте уверены - вас хватит максимум на год-полтора. Дальше - перманентный стресс, убитые нервы и депрессия. Автор этих строк работал в одной московской телекоммуникационной компании, которая являлась 100% компанией-эксплуататором: "рулила" отделом разработки женщина 30 лет, которую достаточно открыто гнобило руководство на протяжении 6 лет её работы в компании. Она же, в свою очередь, гнобила разработчиков. Приемы гнобления сотрудника варьировались от публичного упрёка в медлительности/некомпетенции, до приватных претензий в духе "ты получаешь больше всех в отделе, а работаешь не так, как я бы этого хотела". Бессмысленные требования каждый день присылать отчет по выполненным задачам и "наезды" в случае, если левой пятке руководителя что-то не понравилось - были совершенно обыденными вещами. При всём при этом темп разработки был просто сумасшедший, за день разработчики выполняли по 2-5 задач, которые в другой компании, с более мягким и лояльным руководством, делались бы несколько дней. Качество кода при этом хромало, что усиливало энтропию проекта. Работать в таких условиях было невыносимо. Основной контингент сотрудников были люди приезжие/с детьми/с кредитами и т.д., т.е. все те, кто не мог позволить себе оказаться без финансов даже на непродолжительное время увольнения, поэтому всем приходилось терпеть.

Старайтесь устроиться в крупные компании и корпорации

Забудьте раз и навсегда про веб-студии, конторы из 2-3 человек, местечковые интернет-магазины, "стартапы" и прочий "мусор". Рассматривайте предложения только от больших корпораций - лидеров розничного рынка, банков, госучереждений, лидеров в сфере медицинских услуг и т.д.

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

- своевременная з/п без задержек
- индексация и повышение з/п
- 13-я зарплата
- скидки на товары для сотрудников
- налаженный процесс разработки, адекватное руководство
- действительно интересные и глобальные задачи
- какие-никакие, но все же ж корпопротивные мероприятия

Ещё основной плюс больших компаний и корпораций - это не только финансовая стабильность. Это постоянное ощущение течения жизни, минимум застоя.

Перед тем, как пойти на собеседование - читайте отзывы о работодателе в интернете

Банально, но факт - это работает и позволяет узнать многое.

Вакансии компании висят на сайтах по поиску работы неправдоподобно долго

Вариантов несколько:

- Неадекватный отдел персонала или неадекватный технический руководитель, которому "никто не подходит".
- Текучка кадров.
- Загнивающий проект, с которого бегут разработчики.

Делать там нечего. Хорошие вакансии долго простаивать не могут.

Перед собеседованием выясните, будет ли вас собеседовать специалист

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

Если после собеседования с HR-ом, вам говорят, что "технический специалист сейчас с вами не может провести собеседование" - "он занят/на встрече/заболел" - это показатель высшей степени неблагонадежности компании и наплевательского отношения к сотрудникам. Ни одна сопливая девочка из HR не имеет права решать, работать вам в компании или нет - это решение должен принимать ТОЛЬКО технический специалист после собеседования.

Если вам отказывают в собеседовании с техническим специалистом - немедленно уходите. Расценивайте это как наплевательство по отношению к вам и вашему личному времени. Дайте соответствующий отзыв в интернет - это поможет другим соискателям сэкономить их время.

Вам предлагают сделать тестовое задание

Конечно, у вас уйма свободного времени, почему нет. Потратьте 4-8 часов, вам же все равно делать нечего - вы же безработный.

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

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

Буду краток: бегите оттуда.

У вас спрашивают результат работы выражения $i+++++$i, что быстрее - пре-инкремент или пост-инкремент и другие не "Real-Life задачи".

Собеседующий вас - идиот, которому посчастливилось чудом вылезти в начальники. Теперь он испытывает "синдром вахтера" и идёт на "Хабр" с вопросом что бы такое задать, чтобы вас завалить. Ему не нужен работник - ему нужно потешить Чувство Собственной Важности, поиздеваться над вами.

На самом деле ни одному профессиональному разработчику не придет в голову писать в реальном коде что-то вроде $i+++++$i;. Профессиональный разработчик тем и отличается от новичка, что пишет код так, чтобы его понимал в первую очередь человек, а уж потом - интерпретатор.

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

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

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

После трудоустройства

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

Сверхурочная работа

Например, среди программистов очень распространённая модель поведения, при которой сотрудники в буквальном смысле слова жертвуют своим временем ради работы - остаются после положенного установленного договором времени на рабочих местах. Подобное поведение, как правило, вызвано исключительно фактом нахождения более старших по рангу коллег на рабочем месте и в очень редких случаях - интересом к работе. В некоторых случаях может быть гласное или негласное осуждение сотрудника, который работает по установленным нормативам, т.е. уходит вовремя. В редких ситуациях вас могут "кормить" пропагандой о том, что вы должны "развиваться", работать на благо компании и поэтому поработать лишние полчаса-час для вас не должно быть преградой.

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

Программирование и ваша жизнь

Профдеформация

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

Нельзя делать из программирования культ и смысл жизни

Подобными действиями очень часто грешат новички: уходят в программирование с головой, спускают на обучение годы жизни, уделяют профессии 90% свободного времени. Должна быть разумная черта, грань, за которую вы не должны переступать. Бесконечное оттачивание навыков в IT не сделает из вас миллионера или человека с достатком сильно выше среднего (да-да, забудьте мифы о программистах-миллионерах), вы не станете знаменит или бессмертен. Но есть все шансы потерять лучшие годы жизни. Необходимо развивать в себе иные качества личности, которые пригодятся в реальной жизни, совершенствоваться в других сферах. Например, жизненно важно уметь делать тривиальный бытовой ремонт, разбираться в устройстве автомобиля, уметь владеть инструментом. Полезно ходить в походы, заниматься активно спортом, делать всё то, что не лежит в плоскости IT, что является антиподом мыслительно-сидячей работы.

Рано или поздно придётся уходить

Потратить очень много времени на быстроустаревающие знания с возможностью через достаточно быстрое время уйти на помойку истории - это абсолютно нелогическое использование ресурса своей жизни. Бежать в колесе, как белка, может выдержать человек только на очень раннем этапе своего жизненного пути. Рано или поздно придётся сходить. Всегда помните об этом.

Современное IT подобно ветру - оно очень быстро развивается и гнаться за всеми нововведениями и тенденциями, следить за огромным количеством фреймворков и технологий многие годы не получится. Хотя по правде говоря, это скорее поток кровавого поноса. И хотите вы этого или нет - рано или поздно придется остановиться и искать иной путь заработка, более "стабильный" и менее стрессовый, т.к. к тому времени вы просто морально сгорите как рядовой специалист. Уделять всю свою сознательную жизнь программированию и быстро меняющимся технологиям может только человек, живущий исключительно в мире нулей и единиц, т.е. весьма отрешенный человек без личной жизни и оффлайн-перспектив. Выходом может быть только самоубийство.
Сообщение слишком длинное. Полная версия.


No.48599 Ответ [Открыть тред]
Файл: 15211418425220.png
Png, 54.75 KB, 625×459 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
15211418425220.png
Есть архивчик, там файлы 96-99 годов (даже 92-го). Анон сказал, что использовался язык программирования RPG. Я скачал компилятор Lattice RPG II на DOS, программа сама запускается, но вот как посмотреть код? Как вообще это всё было написано?

https://drop.me/BP2pGV
>> No.48603 Ответ
>>48599
Внутри файла Z.exe всё написано:

Создание, удаление и обработка лицевых счетов
Создание, удаление и обработка групп лицевых счетов
Создание, удаление и обработка сводов групп
Работа с планом расчетов: создание, удаление и работа
Работа со справочником имен, закрытие месяца и т.п.

Разработал А.Корнейчук
Фирма Плюс/МИКРО
ZluKA 3.30 1993

Гугл считает, что они находятся в Караганде: https://www.ctopm.net/blank-cfvg

>>48599
Внутри файла Z.exe всё написано:

Создание, удаление и обработка лицевых счетов
Создание, удаление и обработка групп лицевых счетов
Создание, удаление и обработка сводов групп
Работа с планом расчетов: создание, удаление и работа
Работа со справочником имен, закрытие месяца и т.п.

Разработал А.Корнейчук
Фирма Плюс/МИКРО
ZluKA 3.30 1993

Гугл считает, что они находятся в Караганде: https://www.ctopm.net/blank-cfvg

Но проще написать на любом современном языке обёртку над этими файлами, т.к. TXT/CLG/RPS/RPG — обыкновенные текстовые файлы (нет, они не написаны на RPG).
Сообщение слишком длинное. Полная версия.


No.48481 Ответ [Открыть тред]
Файл: 4-Minimal-Scala-Web-Frameworks-for-Web-Developers.png
Png, 8.42 KB, 635×282 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
4-Minimal-Scala-Web-Frameworks-for-Web-Developers.png
Очередной тред про самый лучший язык для JVM.

Лучшая книга по Скале: http://www.ozon.ru/context/detail/id/31921731/
Учебник по Скале на русском: http://twitter.github.io/scala_school/ru/index.html
Второй учебник по Скале на русском: http://twitter.github.io/effectivescala/index-ru.html
Курс по fp на Скале для слоупоков: https://www.coursera.org/course/progfun
Конфа треда: https://t.me/hcdev

Список годноты: https://github.com/lauris/awesome-scala
Презентации летнего ScalaDays: https://www.parleys.com/channel/53a7d269e4b0543940d9e535/presentations?sort=views&state=public
Два недавних форка компилятора, один от тайплевела и второй от баттхертнутого:
https://github.com/typelevel/scala (https://github.com/typelevel/scala/wiki/Differences)
https://github.com/paulp/policy

Очередной тред про самый лучший язык для JVM.

Лучшая книга по Скале: http://www.ozon.ru/context/detail/id/31921731/
Учебник по Скале на русском: http://twitter.github.io/scala_school/ru/index.html
Второй учебник по Скале на русском: http://twitter.github.io/effectivescala/index-ru.html
Курс по fp на Скале для слоупоков: https://www.coursera.org/course/progfun
Конфа треда: https://t.me/hcdev

Список годноты: https://github.com/lauris/awesome-scala
Презентации летнего ScalaDays: https://www.parleys.com/channel/53a7d269e4b0543940d9e535/presentations?sort=views&state=public
Два недавних форка компилятора, один от тайплевела и второй от баттхертнутого:
https://github.com/typelevel/scala (https://github.com/typelevel/scala/wiki/Differences)
https://github.com/paulp/policy

Завтра ищешь в интернете книжку Programming in Scala. Похуй если ничего не поймешь. Затем идешь на scala-lang.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию скала кода - от EPFL естественно, чтобы от зубов отскакивало. Когда напишешь свой первый клон Twittera, по пути изучив основы дискретного и лямбда исчисления, скачиваешь и изучаешь любой асинхронный скала вебсервер, рекомендую Play!. Как переделаешь твиттер клон, чтобы выдавал по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop и Spark, сверхбыстрые асинхронные key-value хранилища, NoSQL и прочие мира открытого исходного кода приблуды. Отсос хиккующих питонистов / просто неудачников типа годаунов или рубифанбоев, сосут по жизни, не заставит себя ждать и уже через пол года ты будешь подворачивать штаны, есть маффины, запивая смузи и любая баба будет течь от упоминания твоей зарплаты.
Сообщение слишком длинное. Полная версия.
>> No.48510 Ответ
>>48481
Нам нужен готовый красивый продукт, который хотим развивать. Так просто это не осметить. Нужно встречаться и разговаривать о затраченном времени. Мы вам перезвоним.


[0] [1] [2] [3] [4] [5] ... [51] [52] [53]
Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]