Задать вопрос
  • Как не покатывать блок семь дней?

    lxfr
    @lxfr
    Поставьте куку на неделю по событию открытия и перед открытием проверяйте эту куку и надобность ее установки.
    Как работать с куками прекрасно знает гугл.

    if (кука != true) {
    открыть окно();
    поставить куку равную true на неделю ();
    }
    Ответ написан
    Комментировать
  • Как не покатывать блок семь дней?

    @stup1d
    Решение содержится в тэгах к вопросу - cookie. Ставить и читать куки можно так (взято из интернета):
    function getCookie(c_name){
        var i,x,y,ARRcookies=document.cookie.split(";");
        for (i=0;i<ARRcookies.length;i++)
        {
            x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
            y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
            x=x.replace(/^\s+|\s+$/g,"");
            if (x==c_name)
            {
                return unescape(y);
            }
        }
    }
    
    function setCookie(c_name,value,exdays){
        var exdate=new Date();
        exdate.setDate(exdate.getDate() + exdays);
        var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
        document.cookie=c_name + "=" + c_value;
    }


    Т.е. на клик по "закрыть попап" делаем
    setCookie('popup', 1, 7);

    А перед его отображением проверяем ее наличие
    if ( ! getCookie('popup')) {
        ...
    }


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

    @beduin01
    Я вообще начал писать приложения на D. По удобству как Python. При этом язык компилируемый и со строгой типизацией.
    Почитайте ddili.org/ders/d.en/index.html
    Если понравится, то приступайте. Порог вхождения не выше чем у Python.
    Ответ написан
    2 комментария
  • Должен ли веб-программист уметь рисовать/верстать/создавать дизайн?

    @xydope
    тыжпрограммист. :)

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

    gbg
    @gbg
    Любые ответы на любые вопросы
    Не поздравлять их в онлайне:
    %D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%
    Ответ написан
    Комментировать
  • Как правильно сделать выборку в ROR?

    viktorvsk
    @viktorvsk
    Во-первых, has_many :orders всё-таки (во множественном числе)
    По простому можно делать как-то так:
    class UsersController < ActionController::Base
       def index
         @users = Hash[User.all.map{ |u| [u.name, u.orders.to_a }].to_json
       end
    end

    Но правильно было б, наверное, посмотреть в сторону rabl или builder, вывести @users = User.all, а дальше заказы уже обработать в view.
    Вот что такое jbuilder: railscasts.com/episodes/320-jbuilder
    Ответ написан
    Комментировать
  • Особая магия с channels в golang?

    Tyranron
    @Tyranron
    Сначала отвечу на второй вопрос.
    close() никакого отношения к scope не имеет вообще, он просто делает канал "закрытым", то есть таким, что при чтении значений из канала и записи из него возникает panic. Это всё. Соответственно...
    что случится, если закрыть буферизированый канал до того, как считать из него все значения, успевшие туда попасть?
    Канал закроется, при следующей попытке считать с него значение получите panic. Значения, что остались внутри, считайте потерянными, Вы их больше никак не получите.
    UPD: Это не так! (см. конец поста и комментарии)
    Соберется ли такой chan сборщиком мусора при уходе его в out of scope? Что будет с обьектами внутри канала?
    Соберется он сборщиком мусора только тогда, когда на него никто больше не будет ссылаться (если он объявлен локально, то да, out of scope). Объекты внутри тоже соберутся, если на них больше никто не ссылается. Те, на которые еще ссылается кто-то, останутся.

    Теперь замечания по Вашему примеру:
    select {
    case b <- number:
        fmt.Printf("Sent into b: %d\n", number)
    default:
        fmt.Printf("b chan closed\n")
    }
    Этот кусок здорово дезинформирует. Во-первых select на запись c default секцией никоим образом не спасает от panic при записи в закрытый канал. Он всего лишь делает запись в канал всегда неблокируемой. Как только Вы таким select'ом попытаетесь записать в закрытый канал что-то, словите сразу панику. Потому правильно для восприятия это место выглядит следующим образом:
    select {
    case b <- number:
        fmt.Printf("Sent into b: %d\n", number)
    default:
        fmt.Printf("Number %d just has been thrown away\n", number)
    }
    Если Вы сделаете канал a буферизированным, то тут Вам Ваши panic'и и полетят, потому что Вы пишете в закрытый канал.
    Закономерный вопрос: почему тогда panic'и не летят при небуферизированном канале а?
    Ответ: Вам просто везет =)
    Во-первых, на playground'е runtime.GOMAXPROC=1 и runtime.NumCPU=1. То есть в реальности все дело крутится в одном потоке и параллельность тут псевдо.
    Во-вторых, у меня локально (OS X) этот скрипт выкидывает panic'у после получения числа 25 даже при runtime.GOMAXPROC=1. Вам банально повезло, что внутренний планировщик горутин на playground'е ведет себя именно таки образом. При буферизированном канале он ведет себя немного иначе и Вы получаете закономерную panic'у сразу.

    Если совсем на пальцах по первому вопросу, то:
    При небуферизированном канале close(b) по каким-то соображения планировщика выполняется только после того как отработали обе горутины, если глянуть на вывод, то надпись "B:1" будет в самом конце. Потому то все и отрабатывает нормально, хотя это поведение совершенно не гарантированно логикой программы, наоборот, программа рассчитана на то, что close(b) выполнится сразу после того, как мы оттуда что-то считаем. Это и происходит, если канал a сделать буферизированым (надпись "B: 1" вылетает сразу), так как в этом случае планировщик меняет свои соображения, и мы получаем закономерную panic'у.

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

    UPD:
    Я допустил ошибку, как верно указали в комментариях Виталий Яковенко и SilentFl, закрытый канал не выдает panic при чтении с него. Он разрешает считать все значения, которые в нем остались, после чего отдает "пустые" значения для свое типа, больше никогда не блокируя выполнение.
    Закрытый канал panic'ует только при попытке отправить в него значение.
    Ответ написан
  • Что из этих технологий для чего используется?

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Оукей. давайте возьмем ваш пример с fl.ru + чаты.

    mongodb - хипстерская база данных. Для проекта типа fl.ru я бы пожалуй не использовал оную (не потому что монга отстой а потому что я лично не вижу в использовании оной смысла в контексте проекта типа fl.ru. Нам не нужен шардинг, реплекация реализуется нормально на любой нормальной RDBS, документоориентированность не нужна, хотя при грамотном подходе можно было бы реализовать неплохие агрегированные коллекции и оптипизировать селекты... Для себя не нашел у монги ни одного плюса перед RDBS типа PostgreSQL). В любом случае если вы не оставляете выбор - тут у нас будут храниться все данные. Придется потратить время на то что бы избавиться от желания что-то заджойнить и реализовать map/reduc-ы для обновления связанных коллекций. Но зато это будет так по хипстерски!

    То есть если у вас есть куча однотипных запросов с кучей джойнов данные для которых обновляются редко а выборки происходят часто, то тогда можно вооружиться монгой а делать коллекции как агрегации этих выборок. Если вы вставляете референсы и пытаетесь эмитировать джойны в монге то значит вы сделали не правильный выбор основного хранилища данных). Правда денормализовать данные можно и с RDBS....

    sphinx - поисковой индекс. То есть если мы должны реализовать вменяемый поиск (например по описанию вакансии) - то стоит его заюзать. Сфинкс не самый дружелюбный зато один из самых быстрых поисковых индексов. Хорошо интегрируется с MySQL и подобными и если сравнивать с ElasticSearch из коробки чуть лучше дружит с русским языком. Но опять же у эластики свои плюшки. Некоторые оной заменяют монгу так как по большинству фич в плане хранилища данных они совпадают.

    redis - мы там вроде чатик делали. Помимо того что redis это хорошее key-value in-memory хранилище, которое к тому же может обеспечить нам надежность хранения данных (мэпится на файловую систему еще), оно так же поддерживает pub/sub. То есть чисто теоритически мы можем не добавлять в стэк штуки типа ZeroMQ и прочие *MQ для реализации авторизации и связи приложения чатика и основного приложения (вдруг у нас чатик будет написан на go/node.js/erlang).

    memcache - вот тут стоит подумать нужен ли он если у нас есть редиска. Раньше для жирного кеша выбор был очевиден - memcached, так как reddis в те времена не поддерживал кластеризацию. Сейчас же по возможностям редиска далеко впереди. Так что даже то что memcached чуточку быстрее (но жрет больше памяти и не поддерживает авторизацию к примеру из коробки) не должно стать поводом для использования оного. Но я если честно redis в кластерах не использовал и ничего говорить не могу, а memcached испытан годами.
    Ответ написан
    1 комментарий
  • HP ProCurve 2650 vs Cisco Catalyst 2960/3550: что выбрать для свитчей доступа в офисной сети?

    @throughtheether
    human after all
    На мой взгляд, сеть довольно проста, требования не самые трудновыполнимые, но выбрать лучше 3550.
    Плюсы:
    - когда ваша сеть вырастет из одного L2-сегмента, 3550 можно будет переконфигурировать (используя его L3-возможности)
    - больше "кнопочек и рычажков" - более разнообразный опыт настройки для вас

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

    По поводу HP ProCurve, мне запомнился менее удобный по сравнению с cisco/juniper cli-интерфейс и странная терминология (то, что я привык называть portchannel/etherchannel/aggregated ethernet, в терминах HP называется Trunk).
    Ответ написан
    7 комментариев
  • Как сделать чтоб не отваливались IP телефоны?

    @Deq56
    Python dev, JS, CSS, Asterisk, Mikrotik
    у тебя телефонов много? попробуй их в отдельный vlan вытащить
    Ответ написан
    1 комментарий
  • Как установить несколько Asterisk на одном сервере?

    а что вам мешает развернуть на сервере две виртуальные KVM машинки? и на каждой поставить свой Астериск. возьмите дедикейтед и сделайте. на одном ВПС будете сталкиваться с кучей гемороя.
    Ответ написан
    1 комментарий
  • $.ajax и .load() при большом количестве посетителей - реально?

    begemot_sun
    @begemot_sun
    Программист в душе.
    100-200 посетителей в день это не нагрузка. Разберитесь с производительностью сервера, и почему возникают 501, 504, 404 ?

    Например:
    404 -- это явно неверный URL, до php дело не доходит
    504 -- явно производительность php, увеличьте таймаут ожидания на сервере (для начала).
    Ответ написан
    1 комментарий
  • Как реализовать многократную посылку NSURLConnection?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Я думаю ошибка в 4ой строке.
    Ответ написан
    Комментировать
  • Составить SQL запрос (один ко многим)

    0neS
    @0neS
    Используйте LEFT JOIN и алиасы:
    SELECT event.title, event.url, event.date, type.name as type_name, tournament.name as tournament_name, team1.name AS team1_name, team2.name AS team2_name
    FROM events event
    LEFT JOIN types type ON event.type_id = type.id
    LEFT JOIN tournaments tournament ON event.tournament_id = tournament.id
    LEFT JOIN members team1 ON event.member_1_id = team1.id
    LEFT JOIN members team2 ON event.member_2_id = team2.id
    ORDER BY event.date
    Ответ написан
    Комментировать
  • Как ссылаться на таблицу, которая была создана только при помощи миграции в Rails?

    sck_v
    @sck_v
    exflow.io
    ActiveRecord::Base.connection.execute('select * from table_name')
    Ответ написан
    Комментировать
  • Как составить сложный MySQL запрос?

    Anonym
    @Anonym
    Программирую немного )
    Гуглите JOIN, в вашем случае LEFT JOIN
    Ответ написан
    2 комментария
  • Как изменить цвет NavigationBar?

    timokhin
    @timokhin
    iOS developer
    Для всего приложения (в AppDelegate):
    [[UINavigationBar appearance] setBackgroundColor:[UIColor blueColor]];


    Для отдельного контроллера:
    [self.navigationController.navigationBar setBackgroundColor:[UIColor redColor]];
    Ответ написан
    2 комментария
  • Как узнать день недели из настроек iPhone?

    [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekday fromDate:[NSDate date]] weekday]
    Ответ написан
    7 комментариев
  • Что означают литералы обозначений или символы в Ruby?

    @progenth
    Если вы про это
    :something
    то это не изменяемые строки. Они легче и в некоторых местах удобнее.

    Например
    "string"
    "string"
    "string"

    это разные объекты, хотя абсолютно одинаковые, а

    :string
    :string
    :string

    это один и тот же объект.

    Соответственно в памяти 1 объект, а не 3. Если предположить, что мы используем символы как ключи где нибудь в массиве, то выигрыш очевиден.

    А насчет удобства, тут конечно на вкус и цвет.
    Многим
    somefunc :param
    нравится больше чем
    somefunc "param"
    А в рельсах вообще сплошь и рядом...
    Ответ написан
    1 комментарий