• Microsoft прекратила разработку Windows, новых версий больше не будет
    +8
    <translation-joke>
    >> Компания уже тестирует превью-билды Windows 10 на добровольцах и заключенных.

    Microsoft теперь проводит опыты над людьми? :)
    </translation-joke>
  • С 1 мая российские правообладатели постараются навсегда закрыть 700 сайтов
    +1
    Не все налоги одинаково плохи, надо смотреть куда они идут и работают ли они вообще.

    В некоторых странах хотя и высокие налоги, но они, для примера, вычисляются после того, как будут списаны затраты на различные услуги и товары — носки, машину, квартиру, ноутбуки, кафе, книги и прочее.
    То есть после этих списаний, получается сумма например в 500 денежных единиц и оттуда будет взято 30-40%, а не с полной ЗП в 2000 единиц.
    При этом может быть возвращена определенная сумма, если было рассчитано больше, чем на самом деле.

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

    И после этого, там еще будет начислена высокая пенсия — от 1500 до 2500 долларов\евро, то есть не так, как например в России, как мне рассказала знакомая, работающая в бухгалтерии, когда сколько бы не получал, сколько бы налогов не платил, а получается все равно около 12-13 тысяч пенсия, и то и 8 тысяч, так как для получения большей пенсии надо 40 лет работать за 60 тысяч, что даже не всегда в Москве возможно :)
  • Полифазный сон: отзывы, «теория», личный опыт
    +1
    Совсем недавно ученые открыли, что во время сна мозг занимается поддержанием системы в чистоте от веществ, выработанных клетками. Тоже самое, что делает лимфатическая система, только процесс более сложный.

    Поэтому здоровый, продолжительный сон — это залог нормального функционирования мозга и долголетия.

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

    Ведь дело не в том, сколько вы бодрствуете, а в том, сколько полезных задач вы можете сделать за день.
  • 7 ключевых трендов веб-дизайна на 2015 год
    +3
    Не знаю про других, но мне почти любую инфорграфику приходится буквально «расшифровывать».

    Для примера инфографика выше — обращаешь внимания сначала на лица, потом на число 70%, потом на слово Budget, потом на цветные доллары и мозг пытается связать все это воедино.
    Потом, когда присматриваешься и пытаешся не обращать внимания на яркую 70%, видишь уже текст.

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

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

    И вот смотришь на это и пытаешся все расшифровать и тебя посещает мысль «Зачем я вообще на это смотрю?» :)
  • Семь принципов создания современных веб-приложений
    0
    Как раз для Wordpress есть замечательный плагин Lazy Load, который ставиться за 20 секунд и который позволяет загружать картинки по мере прокрутки страницы.
  • Семь принципов создания современных веб-приложений
    +4
    Если зайти на страничку автора, который пишет про отрицательные задержки, ускорение загрузки и так далее и у которого даже количество просмотров страниц обновляется в реальном времени, можно увидеть «потрясающую оптимизацию» его странички, когда при первом заходе загружается 37 мегабайт картинок:

    image
  • Опыт применения Go в продакшене Яндекса
    +2
    Как я понимаю, философия создателей языка состоит в том, чтобы «не перегружать».

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

    Возможно в будущем это все введут, а на данный момент есть что есть.

    Я сейчас полностью пишу на Go и знаю, как не хватает многих вещей, но в тоже время это каким-то странным образом позволяет решать задачи более простыми и элегатными способами, не создавая лишних «сущностей».
  • Несколько интересностей и полезностей для веб-разработчика #24
    –1
    Мне понравился вот этот: datetimepicker — сразу симпотично выглядит и в комплекте интересные фишки, напободие выбора диапазона дат.
  • Ruby on Rails исполнилось 10 лет
    +1
    Angular — потрясающий инструмент, я просто был реально ошеломлен, когда увидел в действии как работает databinding в нем.

    Но в тоже время, мне нравится подход DHH, который звучит примерно так: сервер всегда мощнее даже самого мощного десктопа, потому что он под это заточен.
    Поэтому логичнее на клиент отправлять уже готовый HTML, отрендеренный на сервере, а на клиенте только замещать элементы.

    У них Basecamp, как я знаю, так работает. В одном выступлении он показывал, что если открывается форма редактирования — она вероятнее всего приходит с сервера и просто вставляется в контейнер (он говорил они такие элементы даже не рендерят, а сразу отдают из хранилища типа memcached).

    Хотя это и увеличивает трафик, но на клиенте сохраняется достаточно простая логика и это будет работать везде без тормозов и отклик сайта получается очень быстрый.
  • Ruby on Rails исполнилось 10 лет
    0
    Я не спорю, потому что я тут сравниваю интерпретируемый и компилируемый языки.

    Но я сравнил ROR с проектом Golang не просто так — фунционал получился точно таким же. Те же самые «кучи библиотек», только на Golang теперь.
    То есть мы переписали достаточно сложный проект с ROR (больше 30 таблиц со сложными зависимостями, больше 80 view, про assets pipeline — мы остались на Sprockets) на Golang и действительно сократили конфигурацию серверов и стоимость, сами worker'ы потребляет не больше 20 MB памяти в пике, процессор вообще на 1-3%, сервер как-будто на отдыхе :)
    Большой плюс — убрали Sidekiq, заменив их на goroutines и заменили Faye (опять же средствами самого языка сделали).

    Хотя, как я уже сказал, не всегда было так удобно, как на ROR — приходилось писать больше кода, иногда изобретать и переизобретать, написали много библиотек своих (частично выложили их на github).

    Просто часто удивляет, что на достаточно простые задачи тратится столько памяти.
    Возможно я чего-то не понимаю, но по-моему склеить даже 300 файлов в 1 или несколько маленьких не должно занимать много минут и около 1 GB памяти :)
  • Ruby on Rails исполнилось 10 лет
    +1
    Очень люблю эту технологию, хотя часто она бывает магической, но стоит немного понять как работает сам Ruby — все становится на свои места.
    Это лично мое мнение, но я считаю, что самый главный минус Ruby on Rails (и Ruby) — это прожорливость памяти.

    Или взять тот же самый форум Discourse — отличная вещь, но минимальные требования 2 GB, хотя я смог запустить его на 512 MB при помощи сервера puma, но работал он как-то нестабильно.
    Но на 512 MB он не смог выполнить команду assets:precompile, только на 1 GB :) 1 гигабайт памяти на склеивание пару десятков файлов? Кхм…

    Многие могут сказать, что сейчас память стоит значительно дешевле, но чтобы сделать небольшой сайт — иногда думаешь влезет он на 512 MB или раздуется даже под небольшой нагрузкой :)
    Просто платить 20 долларов за тот же изначально пустой форум — это небольшая лишняя трата, по-моему.

    Поэтому сейчас частично перешли на Golang (много разных маленьких пакетов типа Gorilla Mux): 2-5 MB при запуске вместо 50-100 MB и под нагрузкой вырастало максимум до 17 MB вместо около 700 MB в Rails. Скорость ответов тоже радует.

    Хотя вот в Golang нехватает быстрой разработки (Revel не совсем подошел под задачу), иногда приходится переизобретать что-то или писать много больше кода, чем в том же Rails.
  • Визы для стартапов: как открыть собственное дело за рубежом (часть 1)
    0
    Тоже очень хочется почитать.

    И может кто-нибудь знает.
    Я читал, что туда может поехать только команда минимум из 2 человек, потому что вроде бы там нужно записатся в инкубатор обязательно, а туда записывают только команды — это правда?
  • Визы для стартапов: как открыть собственное дело за рубежом (часть 1)
    0
    Я это к тому, что в статье было написано «высокий уровень владения английским языком», но формальные требования не такие уж и высокие.

    Но эти сертификаты общаться с носителями языка не помогут, вот тут уже действительно нужен «высокий уровень владения» :)
  • Визы для стартапов: как открыть собственное дело за рубежом (часть 1)
    +1
    Если не ошибаюсь, в Канадской Startup-Visa требуется требуется минимальный IELTS 5.0, что является средним уровнем владения английским.
  • Почему вы до сих пор носите «глупую» одежду?
    0
    У меня один вопрос: разве в футболке, которая не пачкается, не будет жарко? При таком покрытии, ткань ведь скорей всего не «дышит» (хотя я возможно ошибаюсь и ткань пропускает воздух, но не пропускает жидкости).

    А если чуть вспотел, то пот… будет вылетать и скатываться из под футболки?
  • Стартап шаг за шагом: будущее онлайн-образования
    0
    Может я побуду кэпом и занудой сейчас, но по-моему самый быстрый способ научится печатать — понять зачем нужна быстрая печать и просто печатать :)

    У меня есть знакомая девушка, она очень не любит общатся через онлайн-общение, так она до сих пор печатает очееень медленно.

    Я пытался использовать и клавогонки, и тренажеры, но самый быстрый способ оказался самым простым: когда нужно было перепечатать 300 килобайт текста под диктовку, уже через некоторое время я достаточно быстро печатал на русском без ошибок :)

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

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

    Чуть теории и тонна сознательной практики творят чудеса.

    К теме: поэтому тут важно желание и вот всем онлайн-курсам нужно работать именно с тем, чтобы помогать людям понять зачем им это нужно, нужно ли вообще и помогать находить желание. Ну и конечно делать увлекательные курсы :)
  • Стартап шаг за шагом: будущее онлайн-образования
    +1
    Если не ошибаюсь, было такое исследование, когда спрашивали подростков об их уровне владения компьютерными технологиями. Вроде бы логично — столько игр, столько приложений, компьютеры с детства.

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

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

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

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

    Но WOW-эффект всегда присутствует, поэтому это так популярно сейчас.

    Надеюсь вы нащупаете нужный баланс :)
  • Стартап шаг за шагом: будущее онлайн-образования
    +8
    Это мое личное мнение, но мне почему-то всегда казалось, что геймификация процесса обучения — это шаг в другую сторону от того, что действительно надо.

    Просто в процессе обучения есть 2 важных момента:
    1) Человек должен четко понимать зачем ему это нужно, иначе все будет скучным для него. Это как с натуральными языками — если человеку не нужен язык, его сложно будет выучить. А если очень нужен — процесс будет простым, быстрым и легким, все запомнится само собой, натурально.
    2) В обучении важнее всего не запомнить факты, а понять каким образом это делается, ответить на вопрос «как?» и понять основы.

    Мне кажется, смешивая игру и обучение, человек больше будет сконцентрирован на игре, нежели на обучении. Картинки запомнятся лучше, конечно, но не факт что запомнится то, что нужно и при этом придет понимание.
  • Делаем многопользовательскую игрy на Go и WebSocket'ах
    +3
    Кстати, вместо goto: Exit можно использовать defer statement. Он срабатывает когда оборачивающая функция завершается.

    Поэтому в самом начале функции run() можно создать анонимную функцию и положить ее в список defer

    func (r *room) run() {
      defer func() {
        // delete room
        delete(allRooms, r.name)
        delete(freeRooms, r.name)
        roomsCount -= 1
        log.Print("Room closed:", r.name)
      }()
    
    ///....
    }
    

    После этого делать просто:

    if len(r.playerConns) == 0 {
      return
    }
    
  • Что происходит на рынке new gTLD: актуальная статистика
    +16
    По-моему один из самых нужных доменов верхнего уровня сейчас — это ".api"

    facebook.api, google.api, twitter.api, yourproduct.api — понятно, лаконично, элегантно.
  • Backend без проблем. Чудо или будущее?
    0
    Лично мне это чем-то напомнило решения типа Heroku. У них есть входная точка, потом идет роутер, который посылает запросы к worker'ам, а ими может быть все, что угодно — nodejs, go, ruby, python.

    К worker'ам же подключаются различные плагины в виде БД, поиска (elastichsearch), аналитики, отправки писем и т.д., сами эти сервисы работают в «облаках».

    Причем так как это все работает в основном в Amazon датацентрах (и Heroku, и плагины), то связь между системами идет по локальной гигабитной сети и задержки минимальны.
  • Облачная платформа для чатов в мобильных приложениях
    0
    Спасибо за ответ. Вы правы, у них нет передачи аудио, видео и картинок, они просто передают сообщения в текстовом виде.
  • Облачная платформа для чатов в мобильных приложениях
    +1
    Скажите пожалуйста, чем ваш сервис, помимо протокола, отличается от известных решений pusher.com и pubnub.com?
  • Облачная платформа для чатов в мобильных приложениях
    0
    Хм, если я правильно вас понял, то pusher.com и pubnub.com как раз для этого и существуют. Вписываешь appKey, подписываешся на канал и ждешь сообщений.

    Конечно там нет протокола обмена изображениями, эмоций и т.д., но это не сложно делается и получается более гибко, когда сервис передает лишь сообщения (можно сделать свой простой протокол, например, на основе JSON).

    Оба сервиса поддерживают WebSocket, online-статусы (кто в сети на канале). На канал может подписатся как 1 человек (приватная комната), так и много (групповой чат).

    В общем то они заявляют, что их сервисы подходят не только для чатов и приложений в реальном времени, но даже для мультиплеерных игр.
  • Язык Go для начинающих
    +2
    В Go лично мне еще нравится автоформатирование исходного кода с помощью утилиты Gofmt (особенно когда редактор запускает форматирование кода после каждого сохранения файла, например SublimeText с расширением GoSublime).

    Так удобно, когда все в одном стиле.
  • Язык Go для начинающих
    +1
    В Go чаще всего используется не один большой фреймворк, а комбинация нескольких пакетов.

    Но как правильно сказали в Braintree, иногда кажется что в Go надо постоянно переделывать простые вещи, поэтому мы создали для этого отдельный проект на github для того, чтобы не повторять рутинные операции, например по декодированию Json из тела ответа, ошибок API, http клиент, валидации и т.д. (он сейчас просто сборка функций, можно сказать в альфа-версии, поэтому ссылку не привожу — можете посмотреть на github, если интересно, по моему имени пользователя на хабре)

    Например, Martini очень простой для понимания пакет, особенно удобно его Dependency Injection (правда с ним нужно быть аккуратнее, потому что при компилировании не будут выводится никакие ошибки из-за того, что зависимости передаются динамически — например передан пустой указатель).

    В Go шаблоны (templates) по-моему отличные из коробки. Очень быстрые и легкие в использовании.

    В Martini очень просто создавать middleware: мы используем их, например, для подготовки структуры логов и для переменных уровня запросов вот так:

    func midRequestValues(c martini.Context, req *http.Request) {
    	values := &ReqValues{}
    	c.Map(values)
    } 
    

    Где ReqValues — это struct со значениями глобальных оповещений (alert'ов), пользователя (берется из Redis в отдельном middleware) и т.д.

    Так как map передается всегда как указатель, но можно создать несколько простых функций, которые будут заполнять template.FuncMap какими-нибудь функциями-помощниками, как в Rails. Например:

    func (s *Sprockets) SetFuncMap(funcMap template.FuncMap) {
    	funcMap["asset_path"] = s.AssetPath
    }
    


    Тестирование Martini хитрее. Можно сделать простую функцию App(), которая инициализирует все middleware, создает пути и возвращает *martini.Martini.

    func App() *martini.Martini {
    
    	m := martini.New()
    
    	// Setup default middleware
    	m.Use(martini.Recovery())
    
    	r := martini.NewRouter()
    
    	r.NotFound(func() (int, string) {
    		return 404, wutapi.Error404()
    	})
    
    	// Add the router action
    	m.Action(r.Handle)
    
    	return m
    }
    


    После чего в тестах можно вызывать ServeHTTP и смотреть результат. Например:

    func Test_Applications_GetAll(t *testing.T) {
    
    	res := httptest.NewRecorder()
    	req := makeReq("GET", "/v1/oauth2/applications")
    	App().ServeHTTP(res, req)
    
    	assert.Equal(t, res.Code, 200, "they should be equal")
    }
    


    Этот подход удобен тем, что почти все пакеты используют стандартную библиотеку (к слову, очень хорошо и грамотно сделаную, можно даже сказать потрясающе, но у меня мало опыта сравнения например с Java или C++ — мне лично стандартная библиотека Go очень понравилась), поэтому можно заменять и дополнять пакеты как душе угодно и как лучше для проекта.

    Проблемы взаимосвязи между пакетами решатся на уровне компиляции.

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