• Зачем нужен link preload, и что хочет от меня pagespeed?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Что я делаю не так?
    Нужно добавить <link rel="preload" />, а не заменить ими ваши скрипты.
    Ответ написан
    Комментировать
  • Предложите обоснование необходимости внедрения и сопровождения Linux-дистрибутивов (Alt, Mint, etc) в предприятиях малого предпринимательства?

    Adamos
    @Adamos
    Поставил и забыл. Проблемы - если только с поломавшимся железом. В отличие от винды, которая через полгода использования становится тормозной помойкой.
    Не требуется постоянное обновление железа вслед за требованиями Редмонда. У меня большая часть подопечных сидит на Core2Duo и не жалуется. У некоторых до сих пор Pentium4. Новых i3/i5 - считанные единицы, в очередную закупку планирую Ryzen3, разницы в работе все равно нет, а по цене проц+мать+память+SSD выходят в сумме 14 тысяч. Смысла добавлять к этому червонец за Винду, чтобы потом с ней корячиться, не вижу совершенно.

    Перемены, на самом деле, у многих назрели не только в системе, но и в самой организации работы. Многим фирмам давно пора выкинуть Винды и перестать мучить Ёксель, внедрить нормальную CRM - и работать на чем угодно, лишь бы браузер запускался...
    Ответ написан
  • Какой нужен ssd для MacBook air 13 2015?

    @Arik
    разные решения бывают https://ru.transcend-info.com/apple/
    можно как вариант взять простой ssd m.2 и купить у китайцев переходник:
    5d4aa136c327a170495119.png или 5d4aa140bdfe5133174762.png

    Из нюансов может слететь серийный номер
    Ответ написан
    7 комментариев
  • Есть ли кто юзал Ipad 2018 c диагональю 9'7'' и Mi Pad 4 Plus 10 какой из них лучше подходит для чтения книг'?

    @tutuborg
    Лучше всего для чтения книг подходя специализированные книгочиталки.
    Экран типа "e-Ink" пока в этом вопросе никто не презвошел.
    Гуглить Pocketbook или Kindle
    Ответ написан
    2 комментария
  • Чем отличаются буферизированные каналы от небуферизированных?

    @SilentFl
    рассматривайте каналы как очереди queue. небуферизованный - с длиной 1, буферизованный - с длиной n (ch := make(chan struct{}, n). запись в канал может быть осуществлена если в канале есть еще места, при заполнении канала запись лочится (т.е. код "встает" на этой попытке и ждет пока освободится место). в соответствии с этим:
    ch1 := make(chan struct{})
    ch1 <- struct{}{} //ок, ушло в канал
    ch1 <- struct{}{} //висим и ждем когда кто-нить прочитает из канала


    ch2 := make(chan struct{},3)
    ch2 <- struct{}{} //ок, ушло в канал
    ch2 <- struct{}{} //также ушло
    ch2 <- struct{}{} //и еще ушло
    ch2 <- struct{}{} //а вот тут лок. висим и ждем когда кто-то прочитает из канала
    Ответ написан
    Комментировать
  • Что тут проиходит?

    @SilentFl
    Мы не заходим во вторую ветку потому что time.After нам создает канал. Соответственно, на каждой итерации первым приходит сигнал от time.After(1*time.Second), после чего идет следующая итерация цикла, и оба таймовских канала пересоздаются. Вынесите time.After(10*time.Second) перед цикл, чтобы он не пересоздавался каждую итерацию, и будет вам счастье. вот так:
    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	c1 := make(chan struct{}, 10)
    	time_limit := time.After(time.Second * 10)
    Label1:
    	for {
    		select {
    		case res := <-c1:
    			fmt.Println(res)
    		case <-time_limit:
    			fmt.Println("time limit")
    			break Label1
    		case <-time.After(time.Second * 1):
    			fmt.Println("timeout 1")
    		}
    	}
    }

    Примечание - Label1 нам здесь нужна в из-за того, что компилятор расценивает break как часть select'а (ведь break располагается в первую очередь в select'e, а уже потом в for'е. синтаксис break [label_name] позволяет указать кому прерываться.

    Но лично мне этот label совсем не нравится (каким-то душком от него отдает, как в 70е года вернулись, того и гляди goto где-нить вылезет), и я бы написал этот код так:
    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	c1 := make(chan struct{}, 10)
    	time_limit := time.After(time.Second * 10)
    	func() {
    		for {
    			select {
    			case res := <-c1:
    				fmt.Println(res)
    			case <-time_limit:
    				fmt.Println("time_limit")
    				return
    			case <-time.After(time.Second * 1):
    				fmt.Println("timeout 1")
    			}
    		}
    	}()  //просто анонимная функция
    }
    Ответ написан
    Комментировать
  • Иммиграция разработчика в Канаду. Что, где и зачем?

    codingal
    @codingal
    Front end и не только
    В 18 можно сделать и перерыв, а потом уже доучиться с четким пониманием того, зачем это нужно.
    "Полезные" знания в вузе - это не основы ПХП а ля "Евгений Попов", а те самые предметы, которые входят в классическую программу тех.вуза - матан, дискретка, численные методы и т.д. Многие сетуют, что не уделили им достаточного внимания в свое время.
    Этих работ и заказов с фриланса будет еще море, а вот времени нормально выучить математику может и не быть.
    Ответ написан
    1 комментарий
  • Какой выбрать язык для серверной части highload проекта?

    voidnugget
    @voidnugget
    Программист-прагматик
    Когда люди называют 1Гбит динамического http трафика highload'ом - это вызывает у меня довольно нелепую ухмылку.

    Сравнивать php / python / ruby более-менее целесообразно так как это полностью интерпретируемые языки с кэшированием байткода, иногда с оптимизациями, как в случае с jRuby и Project Graal. Обычно такие вещи помирают на 14-17К запросов в секунду с пустыми ответами... В общем на одном гигабите трафика тут обычно всё и заканчивается. Node.js по производительности более корректно сравнивать с JVM языками типа Groovy или Scala, но никак не с самой Java. На практике через Netty на Disruptor'е под offheap'ом и Terracotta можно пропустить и 40Гбит живого трафика, без статики, - главное правильно профилировать и писать прямо pfRing.

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

    Если вы хотите строить что-то действительно стоящее - стоит смотреть в сторону CQRS-ES'a и реактивных приложений в рамках SOA. Возможно внедрение микросервисных архитектур если нет требований к задержкам на выполнение запросов. Но, учитывая что вы задаёте здесь вопросы о том "что лучше node.js или python" не думаю что у вас хватит опыта для построения подобных вещей.

    Можно пробовать golang - яндекс слез с python'a на golang по причине слоупочности оного, и довольно хорошо так слез. В golang'е сейчас самый лучший RAD, гораздо круче того же node.js. Идеоматичность самого языка решает достаточно много потенциальных проблем ещё на этапе разработки. Да и сообщество сейчас довольно активно пилит его runtime - внедряют многопоточный gc и ещё пару вкусностей. Даже не умея всех этих асинхронностей и прочей лабуды с golang'ом можно получить довольно хороший выхлоп. Правда меня немного смущает отсутствие нормальных datamapper'ов и scaffolding'a под golang.
    Ответ написан
    16 комментариев
  • Бесплатный SSL сертификат (StartSSL)?

    opium
    @opium
    Просто люблю качественно работать
    1)можно
    2)брал несколько штук вроде не встретил ограничения но думаю они есть
    Ответ написан
    Комментировать
  • Как аггрегировать данные с нескольких постгрессов?

    sim3x
    @sim3x
    Хочется и нужно - две большие разницы

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

    Вот забавное решение
    stackoverflow.com/a/3200176/1346222
    truncate table tableA;
    
    insert into tableA
    select *
    from dblink('dbname=postgres hostaddr=xxx.xxx.xxx.xxx dbname=mydb user=postgres',
                'select a,b from tableA')
           as t1(a text,b text);


    можно еще с WAL файлами поиграться и репликациями

    Ну и неплохо иметь схему сервиса в общих чертах
    Ответ написан
    2 комментария
  • Что такое нарушения принципов ООП?

    @Mercury13
    Программист на «си с крестами» и не только
    Нарушение инкапсуляции. Наружу (т.е. public) торчат какие-то данные, которые можно изменить, и объект уходит в противоречивое состояние.

    Инверсия абстракции. Простые вещи, которые, вероятно, понадобятся потомкам, недоступны даже через protected.

    Нарушение принципа Лисков (ломаная абстракция). Для отца вы сделали некое предположение, которое неверно для сыновей. Классический пример — прямоугольник и квадрат — предполагается, что отец может произвольно масштабироваться, что неверно для сына.

    Класс вместо интерфейса. Если можно, родителя делайте классом без данных с двумя видами функций: public virtual = 0, и protected/public не-virtual (т.н. интерфейс с утилитами). Наследоваться от нескольких классов с данными очень некузяво (а во многих языках вообще невозможно).

    Всемогущий родитель. Слишком много функциональности придумали родительскому классу.

    В общем, покажите интерфейсы (protected/public, без точных реализаций) ваших классов, и погоняем, что там неверного.
    Ответ написан
    Комментировать
  • Как клонировать репозиторий в Git?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Слэш и пробел не подходят.

    Там должен быть пробел. "не подходят" -- покажите текст ошибки.
    Ответ написан
    Комментировать
  • Как перекодировать файл .xml из UTF-8 в cp1251 c помощью php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    <?xml version="1.0" encoding="utf-8"?>

    И в этом заголовке 1251 пишется как windows-1251
    Ответ написан
    2 комментария
  • Что почитать для мотивации?

    insiki
    @insiki
    broken pipe
    Лучший способ «прокачать» себя (стать умнее, креативнее и успешнее) – читать книги. Какие?

    Начни
    Автор: Джон Эйкафф
    Книга о том, как раскрасить свою серую жизнь в яркие тона. Быть как все – проще всего. Быть неординарной личностью – поступок, заслуживающий уважения. Сколько бы вам ни было лет, каким бы ни был ваш социальный статус, все сводится к одной простой истине: нужно начать.
    Прочитав эту книгу, вам действительно захочется начать действовать, начать менять себя и свою жизнь. А когда начинать новую жизнь, как не в Новый год?

    В этом году я…
    Автор: М. Дж. Райан
    Книга о том, как изменить привычки, сдержать слово или сделать то, о чем давно мечтал. Обычно такие жизненные обещания дают себе под Новый год, а после праздника благополучно их «забывают». В книге собраны знания автора в области психологии, нейрофизиологии и философии, которые вылились в практические рекомендации, как воплощать в жизнь обещания, данные себе под бой курантов.

    Выйди из зоны комфорта
    Автор: Брайан Трейси
    Книга о том, как правильно распределять время и добиваться решения сложных задач, выходя из зоны комфорта. В ней – 21 практический совет, следуя которым можно стать столь же успешным, как автор. Брайан Трейси – миллионер, который в юности бросил школу и начинал свой путь наверх фактически с нуля. Эта книга – емкий и сверхполезный сборник секретов личной эффективности Брайана Трейси. Она переведена на 40 языков, ее тираж составляет более 1 200 000 экземпляров.

    Как люди думают
    Автор: Дмитрий Чернышев
    Книга о сущности мышления. Люди часто думают на автомате, между тем любой акт мышления – есть творчество. Книга поможет вам смотреть на обыденные вещи свежим взглядом. Это авторский проект Дмитрия Чернышева, который придумал даже собственный «алфавит мышления», призванный помочь тренировать самый главный человеческий талант – способность думать.

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

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

    Искусство объяснять
    Автор: Ли ЛеФевер
    Книга о том, как сделать так, чтобы вас понимали с полуслова. Ведь когда вас понимают – это счастье, а в бизнесе – еще и деньги. По мнению автора, нет людей, которые неспособны понять, есть те, кто не может объяснить. Книга поможет вам всегда, в любой ситуации, находить нужные слова. Благодаря этому, в ваших личных и профессиональных отношениях будут царить полное взаимопонимание и гармония.

    Жизнь на полной мощности
    Авторы: Джим Лоэр и Тони Шварц
    Книга об управлении энергией, о том, как сбалансировать в жизни разные виды энергий – физическую, эмоциональную, умственную и духовную. Ее авторы – известные спортсмены, которые советуют относиться к жизни не как к марафону, а как к серии спринтерских дистанций – периодов деятельности с полной самоотдачей, чередующихся с эпизодами полноценного отдыха и восстановления сил. Эту книгу, помимо нас, рекомендуют к прочтению главред МИФа Михаил Иванов и бизнесмен Олег Тиньков (кстати, он на обложке). Сегодня и еще несколько дней электронную версию этой книги можно получить в подарок от «Манн, Иванов и Фербер» абсолютно бесплатно.
    Ответ написан
    2 комментария
  • В чем разница между гостем и обычном пользователем?

    @ShamblerR
    Виндовый гость убогая попытка нагнать в качестве разграничения прав линукс
    В котором уже от лохматых готов он есть.
    фактически права гостя распространяются на папку /home/%{User}
    для винды это справедливо для твоей учетной записи рабочеий стол и тд. все что выходит за папку юзера, не является твоей собственностью и эти файлы открыты только для чтения.
    Но посколкьу винда изначально не понимала такого чувтсва юмора, она не может запретить пользователю писать на c:\ вы этого юмора просто не поймете. По сему пришлось ограничить запись ислкючительно в каталоги системные для винды.
    Поскольку система прав в винде сделана в виде GUI и мало вероятно что даже проффесиональный админ виндовс качественно сможет свести их в один график на бумаге, и появляются такие вопросы.
    виндовс маст дай ;)
    Ответ написан
    3 комментария
  • Как выбрать узкую специализацию?

    God-emperor
    @God-emperor
    create a golden path
    Тут скорее вопрос в том, для чего ты хочешь заниматься?
    Заработать денег? Двигать науку? "Шоб тёлочки давали"? etc.

    Ответив на этот вопрос честно, ты сможешь понять, по какому критерию выбирать. Возможно твоё "нравится"/"не нравится" тебя уже волновать не будет.
    Ответ написан
    2 комментария
  • Что написать в качестве примеров кода?

    un1t
    @un1t
    Вот ты на Джанге программируешь. Наверняка встерчаешься с какими-то моментами, которые приходится руками писать и копировать из проекта в проект. Воьзми этот код или эту идею и сделай отдельное приложения для Джанги. Вот есть например sorl.thumbnail, вроде отличная библиотека, по крайней мере была. В потом они намудрили там с бакендами и хранилищами, добавили универсальности, и сейчас на ~30 превьюшек генерируется ~170 запросов к базе. Я как это увидел, выпилил ее нафиг из проекта и написал свою ресайзилку изображений. Правда чтобы ее выложить надо еще много усилий приложить, я пока не готов. Ну или поправь там эту логику и предложи пулл-реквест или просто свой форк сделай с нормальной логикой.
    Или вот другая штука.
    Сейчас популярна MongoDB. В Джанге для работы с деревьями есть mptt, но она работает с реляционными базами. А вот для Монги такой библиотеки я пока не видел. В деревья в Монге хранить тоже приходиться. Пока какие-то кастомные решения использую. Был бы рад если бы появилась вменяемая библиотека.
    Ответ написан
    Комментировать
  • Что написать в качестве примеров кода?

    Tiendil
    @Tiendil
    Разработчик ПО.
    Ещё не видел компании, в которой нельзя было бы взять кусок рабочего файла в качестве примера. Он всё равно без контекста не применим.

    Напишите игрушку: понятно, интересно, достаточно сложно.
    Ответ написан
    2 комментария
  • Как и чем профилировать python, postgresql, железо, etc?

    @devel787
    Возможно вам будет интересен цикл статей habrahabr.ru/company/mailru/blog/201594
    Ответ написан
    Комментировать
  • Как и чем профилировать python, postgresql, железо, etc?

    Tiendil
    @Tiendil
    Разработчик ПО.
    Если в продакшне надо смотреть, то строго newrelic — отличный сервис.

    А при разработке начать можно с этого: www.vrplumber.com/programming/runsnakerun — хороший профилировщик для Python. Прогоняете нагрузочный тест и смотртите что сколько отжирает.
    Ответ написан
    2 комментария