• Какие есть современные альтернативы Wordpress?

    очень неплохой MODX Revolution. Но в некотором смысле это специфичная CMS, точнее CMF. Для создания сайтов визиток, малых и средних корпоративных сайтов идеальная штука. Сайт можно собрать за считанные часы. Главное чтобы верстка была.
    Ответ написан
    5 комментариев
  • Материальная ответственность/штраф за просрочку дедлайна?

    Jump
    @Jump
    Системный администратор со стажем.
    За причиненный Работодателю ущерб Работник несет материальную ответственность в пределах своего месячного заработка, за исключением случаев, предусмотренных ст. 243 ТК РФ.
    Непонятно какой именно ущерб вы принесли работодателю. Уронили греческую вазу на столе руководителя, или перевернули служебный форд фокус?
    Если так - то разумеется придется платить.

    Если же ваш работодатель просохатил проект - и влетел на штрафные санкции по договору, это его проблемы.
    Вы-то тут каким боком?

    Ваша задача в компании - работать работу. Вас не касаются проблемы компании.
    Если компанию кинули, не заплатили, клиент ушел - это все не ваша забота.
    Ваша забота выполнить порученную работу и получить зарплату.
    Ответ написан
    Комментировать
  • Материальная ответственность/штраф за просрочку дедлайна?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Насколько я знаю, законы у нас "лесенкой". То есть если в законе, принятом более мелкой инстанцией, пытаются отменить положение закона, принятого более высокой инстанцией - закон этот (от нижней инстации) юридически ничтожен.

    Поэтому:

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

    В Вашем случае - работодатель .удак. Даже если Вы и на самом деле ни хрена не делали, это его работа - отвешивать волшебные пендели.

    Что делать? Во-первых, денег не отдавать, если они уже получены - никаких. Если еще не получены - придти и спросить "Где деньги, Зин"? И все разговоры - на диктофон, причем не стесняться, доставать и предупреждать - буду писать, так как ситуация конфликтная. Все бумаги, что дают подписывать - ксерить. Возможно, придется обратиться в трудовую инспекцию. Возможно даже в суд. Где работодателю придется доказать, что проект сорвался из-за Вас, а не из-за его х...орошего управления :)

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

    Работать правда в этой конторе после всего этого будет нельзя...
    Ответ написан
    2 комментария
  • Материальная ответственность/штраф за просрочку дедлайна?

    BBmike
    @BBmike
    1. Правильно все понял
    2. Можешь не отдавать деньги
    3. Прокуратура / трудинспекция

    И скажи этому дебилу, что проект просрочен не потому, что ты медленно кодил, а он хреново управлял.
    Ответ написан
    6 комментариев
  • Где я могу проверить качество своего резюме?

    Maksclub
    @Maksclub Куратор тега Карьера в IT
    maksfedorov.ru
    Не надо спрашивать HR и рекомендаций сервисов!
    - напишите о своих навыках в описании о себе максимально подробно — это главное поле, остальные миллион полей -- полная дичь
    - напишите 2-3 места работы с описанием релевантных задач (не протокольного формата, а просто — что делали)
    - постарайтесь обойтись без местоимения "я" и без эпитетов (без единого чтобы вообще)
    - поменьше галиматьи про "выберите навыки из списка", меньше про длинные названия университетов и курсов... меньше про личный спорт и хобби — это все фишки сервисов не нужные... вот список того, чем пожертвовал ради хорошего описания, которое не затеряется в куче полей:
    5b4f1446bced5585230989.png

    ...

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

    PS>S. Распространяйте резюме эффективно, вот описание как искал работу через vc.ru
    Ответ написан
    17 комментариев
  • Какими бесплатными стоками вы пользуетесь для поиска иконок, фото и элементов интерфейса?

    DDDsa
    @DDDsa
    В феврале на хабре был список:
    300 потрясающих бесплатных сервисов

    В разделе "Дизайн + код" есть ссылки на подобные ресурсы.
    Ответ написан
    Комментировать
  • Какими бесплатными стоками вы пользуетесь для поиска иконок, фото и элементов интерфейса?

    dukenuk
    @dukenuk
    UI/UX designer, UI artist
    Большой выбор иконок, которые можно скачать бесплатно и вставить для примера в свой макет, а для релиза, когда идея ясна уже отрисовать свои.
    The Noun Project

    В моей копилке сайтов есть следующие ссылки:
    iconmonstr.com
    www.iconarchive.com - free icon stock search
    www.iconfinder.com - free icon stock search

    designmoo.com - stock web dribble ui free
    freepsdfiles.net
    365psd.com/
    365psd.ru/
    www.freebievectors.com
    www.flaticon.com - free icon
    www.freepik.com
    openclipart.org
    www.freedigitalphotos.net
    www.everystockphoto.com
    www.freephotosbank.com
    www.studio25.ro/EN
    www.photogen.com
    www.freejpg.com.ar
    www.turbophoto.com
    www.kavewall.com
    www.morguefile.com
    www.adigitaldreamer.com
    www.imagebase.net
    www.photorack.net
    qvectors.net
    www.vecteezy.com
    https://www.vectoropenstock.com/
    www.vectormadness.com
    www.vectorilla.com
    vector4free.com
    www.graphicsfuel.com
    www.greatvectors.com
    wowvectors.com
    www.vectorportal.com
    www.free-vectors.com
    www.allvectors.com
    www.logoinstant.com - logo
    shaboopie.com - logo
    imageafter.com - текстуры
    mayang.com/textures — с дневным лимитом
    free-textures.got3d.com — частично бесплатный
    newtek.com/freestuff — требуется регистрация

    Free Photo
    search.creativecommons.org — поисковик бесплатных фоток
    https://www.flickr.com/search/?q=paris&l=cc&ct
    https://500px.com/creativecommons
    photopin.com

    Little Visuals littlevisuals.co
    Unsplash unsplash.com
    Death to the Stock Photo join.deathtothestockphoto.com
    New Old Stock nos.twnsnd.co
    Superfamous (requires attribution) superfamous.com
    Picjumbo picjumbo.com
    The Pattern Library thepatternlibrary.com
    Gratisography www.gratisography.com
    Getrefe getrefe.tumblr.com
    IM Free (requires attribution) imcreator.com/free
    Jay Mantri jaymantri.com
    Public Domain Archive publicdomainarchive.com
    Magdeleine magdeleine.co
    Foodiesfeed foodiesfeed.com
    Picography picography.co
    Raumrot www.raumrot.com/10
    ISO Republic isorepublic.com
    www.gratisography.com
    stockphotos.io
    pickupimage.com — в основном, природа и города.
    www.rgbstock.com
    pixabay.com - free photo
    unsplash.com Unsplash
    www.picjumbo.com Picjumbo
    www.gratisography.com Gratisography
    www.superfamous.com Superfamous
    www.littlevisuals.co Little Visuals
    www.splitshire.com Split Shire
    www.pixabay.com Pixabay
    www.imcreator.com/free I’m Free
    www.nos.twnsnd.co New Old Stock
    wefunction.com/category/free-photos Function Free Photos
    pjrvs.com/a/photos Paul Jarvis Free Photos ]
    www.sxc.hu - hi-res free clipart photo
    www.photl.com - hi-res free clipart photo
    getty.edu - photo history
    www.firestock.ru
    www.photogen.com
    www.everystockphoto.com
    www.stockvault.net
    morguefile.com
    freerangestock.com
    www.dreamstime.com/free-photos
    picjumbo.com
    getrefe.tumblr.com
    pixabay.com
    join.deathtothestockphoto.com
    littlevisuals.co
    superfamous.com
    www.coolwebmasters.com/engine/go.php?url=aHR0c..
    compfight.com
    www.coolwebmasters.com/engine/go.php?url=aHR0c..
    www.imcreator.com/free
    nos.twnsnd.co
    photopin.com
    wefunction.com/category/free-photos
    pjrvs.com/a/photos
    allthefreestock.com — все бесплаьные стоки
    www.pexels.com
    ru.photl.com
    https://stocksnap.io/ — CC
    Ответ написан
    6 комментариев
  • Как правильно писать на ООП?

    TLDR: Все зависит от ситуации. Набивайте свои шишки и наберетесь опыта.

    Самый главный вопрос - зачем вы вообще хотите использовать ООП, насколько сложный и "правильный", какие цели хотите достичь.

    Когда разрабатываете библиотеку, то есть несколько важных целей (независимо от парадигмы):
    1. Апи должнен быть простым, понятным и самодокументируемым
    2. Вы должны иметь возможность развивать библиотеку и не нарушать при этом уже используемый пользователями API

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

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

    Не слушайте евангелистов ФП - сейчас в JS функциональностью модно прикрывать говнокод.

    Так же не слушайте тех, которые на каждом углу кричат "Composition over inheritance", "Banana monkey problem" другие страшные термины. В своем религиозном угаре они забывают, что все эти принципы рекомендации для определенных ситуаций. Да, иногда (в большинстве случаев на самом деле) композиция значительно лучше наследования, очень часто стыкаешься с ситуацией, что наследование применено не в тему и из-за этого усложнено развитие. Но иногда наследование - правильный путь и пока сами не набъете шишек - будет крайне сложно понять разницу. Помогает принцип is-a/has-a. И я видел код отличных программистов, где наследование было применено так, что значительно разгрузило API и упростило код. Не зацикливайтесь из-за религиозных фанатиков.

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

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

    С другой стороны, будут ли довольны пользователи вашей библиотеки, если им придется инджектить все зависимости? Даже если вы сделаете вызов по-умолчанию, то чтобы изменить одну зависимость - придется изменять все. Я приведу пример, где использование наследования даст необходимую вам гибкость и API для пользователя не разбухнет, зато он сможет изменить каждый шаг. Вот:

    interface IPipeline {
    	ResultView Render (RawData rawData);
    }
    
    class Pipeline : IPipeline {
    	protected virtual ParsedRawData ParseRawData(RawData rawData) {
    		return new DataParser(rawData).GetParsedData();
    	}
    	
    	protected virtual ActualData GetActualData (ParsedRawData rawData) {
    		return new HttpRequest(rawData.src);
    	}
    	
    	protected virtual ResultState GetResultState (RawData rawData, ActualData actualData) {
    		return new StateCounter().Count(rawData, actualData);
    	}
    	
    	public virtual ResultView Render (RawData rawData) {
    		var parsed = ParseRawData(rawData);
    		
    		if (parsed.IsValid) {
    			var actual = GetActualData(rawData);
    			var state = GetResultState(rawData, response);
    			return new Renderer().Render(state);
    		} else {
    			throw new Exception("Raw data is invalid");
    		}
    	}
    }


    Для пользователя это выглядит довольно симпатично:
    new Pipeline().Render(rawData);

    Если же ему необходимо брать из другого источника данные - он легко это исправит:
    class MyPipeline : Pipeline {
    	protected virtual ActualData GetActualData (ParsedRawData rawData) {
    		return new LocalStorageRequest(rawData.src);
    	}
    }
    
    new MyPipeline().Render(rawData);


    Конечно, это же можно сделать при помощи композиции. Ну давайте поиграем на основе паттерна Билдер:

    interface IPipeline {
    	ResultView Render (RawData rawData);
    }
    
    class Pipeline : IPipeline {
    	private IRawDataParser rawDataParser;
    	private IActualDataReciever actualDataReciever
    	private IResultStateCounter resultStateCounter;
    	private IRenderer renderer;
    	
    	public GetRawDataParser () {
    		return rawDataParser ?? new RawDataParser();
    	}
    	public GetActualDataReciever () {
    		return rawDataParser ?? new ActualDataReciever();
    	}
    	public Pipeline GetActualDataReciever (actualDataReciever) {
    		actualDataReciever = actualDataReciever;
    		return this;
    	}
    	
    	// ...
    	private GetRenderer () {
    		return renderer ?? new Renderer();
    	}
    	
    	
    	public virtual ResultView Render (RawData rawData) {
    		
    		var parsed = GetRawDataParser().Parse(rawData);
    		
    		if (parsed.IsValid) {
    			var actual = GetActualDataReciever().Get(rawData);
    			// ...
    			return GetRenderer().Render(state);
    		} else {
    			throw new Exception("Raw data is invalid");
    		}
    	}
    }


    Использование по-умолчанию всё то же:
    new Pipeline().Render(rawData);

    А изменить пользователь их может так:
    new Pipeline()
    	.SetActualDataReciever(new MyDataReciever())
    	.Render(rawData);


    Тут впору уже и о DI Container'ах почитать.

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

    В качестве вывода повторю самое главное - просто тренируйтесь, пишите и набивайте шишки, читайте о паттернах и приемах, но помните, что это рекомендации, а не законы и старайтесь думать и анализировать, что пишете и читаете.
    Ответ написан
    Комментировать
  • Как правильно писать на ООП?

    Xuxicheta
    @Xuxicheta
    инженер
    У вас линейная обработка данных, это одна процедура, а вы сделали класс ради класса.

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

    Качественный класс написать сложно, плюс наследование в js не особо рекомендуется. А для композиции лучше подходят простые функции.
    Ответ написан
  • Как правильно писать на ООП?

    Adamos
    @Adamos
    ООП - это компьютерная мечта о дамской сумочке. Которая большая внутри и крошечная снаружи.
    Главное в хорошем классе - это интерфейс, позволяющий вообще не думать о том, что находится внутри класса.
    Представьте себе черный ящик, решающий вашу задачу. Сформулируйте, каких внешних данных ему должно быть достаточно и какими внешними же признаками и логикой должен обладать этот ящик. Старательно абстрагируясь от того, что там будет происходить внутри (процедурное программирование приучает думать об этом, придется напрячься).

    Простейший пример - jQuery.cookies. Кукисы в браузере хранятся неудобно для редактирования, но это проблемы внутри черного ящика, снаружи их быть не должно. Снаружи вам надо поставить куку и прочитать куку. С коротким списком возможных свойств. Вот это класс и реализует, вполне успешно. Буквально одним методом.
    Мог бы этот метод быть простой процедурой? Да, конечно. Но как раз это - неважно.
    Ответ написан
    2 комментария
  • Как стать "законченным" специалистом по бекенду?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    не стоит становиться
    «законченным»
    ценный специалист, всегда растет и обгоняет... не обязательно во всем, хотя бы в чем то (и лучше востребованном)
    Ответ написан
    Комментировать
  • Как стать "законченным" специалистом по бекенду?

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

    одного этого на пол жизни хватить может

    Еще бы добавил в список
    - очереди RebbitMQ, Kafka и тд
    - MongoDb
    - ElasticSearch
    - Docker
    Ответ написан
    1 комментарий
  • Как стать "законченным" специалистом по бекенду?

    GTRxShock
    @GTRxShock
    SA
    Ответ написан
    Комментировать
  • Как стать "законченным" специалистом по бекенду?

    Redis, в качестве основной NoSQL-СУБД - Плохая идея
    Для изучения, так как планируете работать с бекендом, то очень кстати изучить основы безопастности приложения, так как это очень важный момент
    Ответ написан
    5 комментариев
  • Как запретить загрузку сайта при отключенном javascript в браузере?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Подписывайте ссылки на файлы через ajax по клику (или другому событию).
    Нет JS - нет файлов)

    2. Создайте "ширму" доп.слоем поверх всего контента (на всю ширину и высоту страницы) и отключайте её через JS.
    Ответ написан
    Комментировать
  • Как запретить загрузку сайта при отключенном javascript в браузере?

    @Dorothy
    Возможно,
    <html>
    <head>
    <noscript>
    <meta http-equiv="refresh" content="0;url=http://site/blank.html">
    </noscript>
    </head>
    </html>
    Ответ написан
    1 комментарий
  • Как сделать ленивую загрузку без рывков при скролле?

    Exploding
    @Exploding
    wtf?
    Ну очевидно же, что блоку, в который загрузится изображение нужно установить ширину и высоту, такую же как у изображения, которое будет загружено.

    UPD.
    Добавьте в свою lazy-функцию плавное изменение размера блока и "рывков" не будет... Да и вообще, сколько "экземпляров" задач, столько и вариантов решений
    Ответ написан
  • Json или html что лучше?

    @codemafia
    Самоотвод
    JSON - универсальнее, нет привяки к шаблонам сервера, меньше по размеру
    Ответ написан
    3 комментария
  • Как роутер узнает маску подсети?

    fzfx
    @fzfx
    18,5 дм
    > Зачем в таблице маршрутиризации хранятся маски.
    для того, чтобы комп знал, какой диапазон IP-адресов имеется ввиду (маска определяет диапазон адресов).
    > Они же не передаются вместе с пакетом.
    нет, потому что незачем.
    > И как роутер поймет куда отправить пакет, если к нему подключены 2 компьютера с одинаковыми ip адресами, но разными масками?
    отправит на тот, для которого на данный момент у роутера имеется запись в arp-таблице.
    Ответ написан
    2 комментария
  • Где брать примеры хорошего ООП?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Если у вас проблема с тем, как делить код на объекты, это означает, что
    1. Вы плохо продумали архитектуру проекта, либо вообще плохо представляете что должен делать проект.

    2. Мало опыта - в таком случае не парьтесь, просто пишите код как можете. опыт придет с набиванием шишек, когда будете рефакторить код и понимать что наверное надо было вот так изначально разбить, чтобы сейчас было проще.

    3. ООП был придуман как выход для написания крупных приложений, которые пишутся большим количеством программистов. В отличие от модульного программирования ООП позволяло не только разбить код на отдельные куски, но еще и сделать эти куски инкапсулированными независимыми "объектами", каждый из которых может поместиться в голову среднестатистического программиста, чтобы упростить процесс разработки.
    Это одна из причин, почему ООП достаточно сложно освоить на маленьких проектах.
    Ответ написан
    Комментировать