• Чем может быть полезен C++ веб разработчику?

    @poiuy7
    Суть в следующем:
    C/C++/Assembler - это низкоуровневые языки (например там нужно выделять память под объекты и не забывать её освобождать)
    Поэтому всегда видно какой из алгортим, чего стоит для железа.
    На высокоуровневых языках - это все скрыто.
    И для понимать, что в реальности происходит, и писать более оптимальный код с точке использования ресуросов, нужно иметь опыт по C/C++/Assembler.

    Тоесть изучать только синтаксис C/C++/Assembler нет смысл, также нужен опыт.
    В дальнейшем это сделает вас более квалифицированным специалистом.
    Ответ написан
    Комментировать
  • Как составить план проектирования проекта?

    amerov
    @amerov
    Web Developer
    в дополнение к вышесказанному, отмечу, что так же необходимо определить частоту итераций.
    советую почитать Совершенный код. Практическое руководство по разр...
    Ответ написан
    Комментировать
  • Как по вашему мнению лучше объяснить потенциальному клиенту, что его сайт устарел?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Ну, клиенты приходят не чтобы заказать сайт или какие-то работы (типа дизайна) по отдельности. Им нужно решать свои задачи (чаще всего — продавать товар, привлекать клиентов, только своих, и т.п.).

    У большинства художественный вкус таков, что показывая образцы самого современного и прогрессивного дизайна, будьте готовы наблюдать лёгкое непонимание. А на вопрос «Что нравится вам» приготовьтесь увидеть такие образцы говнодизайна, что аж дух захватывает в плохом смысле этого слова:). Обсуждение структуры — вообще, на мой взгляд, трата времени.

    Так что вам, всего-то, нужно ответить на самый важный вопрос — как смена сайта повлияет на продажи клиента?
    Ответ написан
    Комментировать
  • Какие привычки могут сэкономить время?

    GavriKos
    @GavriKos
    - не ставить знаки препинания в сообщениях (sms, соцсети, мессенджеры);
    - сокращать некоторые слова и выражения;

    Это не лайфхаки. Это неуважение к собеседнику. А экономия - копеечная в данном случае.
    Ответ написан
    Комментировать
  • Какой дизайн сайта сейчас впереди?

    vaux
    @vaux
    Курящий лыжник
    Веб-дизайн, как и любая другая область, развивается. Сейчас основной принцип, которым руководствуются профессиональные веб-дизайнеры и дизайнеры интерфейсов - убрать всё лишнее. На большинстве качественных сайтов вы увидите только нужную информацию и правильные акценты, где нет часиков на флеше, баннера с обменным курсом, полоской новостей, идущей по краю сайта, занимающей четверть страницы и отображающей новости аж годовой давности. Всё это осталось в прошлом. Хорошие мысли по этому поводу я часто встречаю в советах на сайте бюро Артема Горбунова. Вот, кстати, сегодняшний совет, который можно отнести и к вашему вопросу: artgorbunov.ru/bb/soviet/20150216. Вообще, они проповедуют принцип максимизации полезного действия, с которым я крайне согласен. Кстати, этот принцип относится не только к веб-дизайну, но и ко всему дизайну в широком его понимании.
    Ответ написан
    11 комментариев
  • Особая магия с 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'ует только при попытке отправить в него значение.
    Ответ написан
  • Есть ли магазины готовых ios, android приложений?

    @onepavel
    Консультация и разработка мобильных приложений
    Ответ написан
    Комментировать
  • Как установить старую версию приложения на iphone?

    Prognosticator
    @Prognosticator
    TODO: Здесь будут ворованные умные мысли, типа мои
    Ответ написан
    Комментировать
  • Что такое серверная и клиентская часть?

    @gtd
    Последние два тэга не в тему.
    Ответ написан
    Комментировать
  • Какие есть Objective-C репозитории приложений с грамотной структурой кода и паттернами?

    kaspartus
    @kaspartus
    К книжкам частенько идет репозиторий на гитхабе, можно посмотреть там. Еще есть cookbook'и, там есть готовые решения для кучи проблем.

    Если хочется углубиться в патерны, поищите какую-нибудь advanced книжку, там как раз и занимаются тем, что пытаются не просто сделать, а сделать правильно и читаемо, показывают приемы, которые не используют в туториалах из серии "лишь бы работало".
    Ответ написан
    1 комментарий
  • Не могу найти синоним к слову логирование?

    ammet
    @ammet
    Ruby on Rails developer
    Протоколирование вполне подоходит.
    Ответ написан
    2 комментария
  • Не могу найти синоним к слову логирование?

    Properrr
    @Properrr
    Журналирование
    Ответ написан
    Комментировать
  • Что такое парадигмы программирования?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Паради́гма - совокупность фундаментальных научных установок, представлений и терминов, принимаемая и разделяемая научным сообществом и объединяющая большинство его членов. Обеспечивает преемственность развития науки и научного творчества.

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

    Лично мне нравится определение "стиль программирования как описания намерений программиста".
    Ответ написан
    2 комментария
  • Как изменить label при нажатии на кнопку в другом контроллере?

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

    Имхо, здесь логичнее использовать паттерн делегирования.
    Контроллер с кнопкой "добавить"

    @protocol AddControllerDelegate <NSObject>
    // здесь передаете то, что было добавлено. если ничего не надо передавать, то без второго параметра
    @required
    - (void)addController:(AddController *)controller addedObject:(id)object;
    @end
    
    @interface AddController : UIViewController
    @property (nonatomic, weak) id<AddControllerDelegate> delegate;
    @end


    Контроллер с label должен реализовать протокол и при переходе на второй контроллер
    выставить себя делегатом для второго

    // .h
    @interface LabelController : UIViewController
    @end
    
    // .m
    
    @interface LabelController() <AddControllerDelegate>
    @property (nonatomic, weak) IBOutlet UILabel *label;
    @end
    
    
    @implementation LabelController
    - (void)prepareForSegue:(UIStoryboardSegue *)segue
    {
        if ([segue.identifier isEqualToString:@"your-segue-identifier"]) {
            AddController *addController = segue.destinationController;
            addController.delegate = self;
        }
    }
    
    #pragma mark - AddControllerDelegate
    
    - (void)addController:(AddController *)controller addedObject:(id)object
    {
        // здесь достаете новый текст label из пришедших данных
        NSString *labelText = [object labelText];
    
        self.label.text = labelText;
    }
    
    @end
    Ответ написан
  • MVC в IOS: может ли Model иметь Delegate к контролеру?

    alexyat
    @alexyat
    iOS Developer
    Может, можете написать все что душе угодно. Только на картинке что вы запостили, там написано в Model - KVO & Notification, и лучше использовать их при обновлении данных в модели, т.к. обычно об обновлении данных нужно узнать нескольким Controller, сделать это проще через notification, а Key-Value Observing нужно когда один контроллер следит за какой-то переменной.
    Ответ написан
    Комментировать
  • Есть ли программа для создания иконок iOS?

    trueClearThinker
    @trueClearThinker
    Photoshop/ Menu/ Make pizdato
    Ответ написан
    Комментировать
  • Спам от моего домена?

    tyzhnenko
    @tyzhnenko
    System Administrator, DevOps, QA Engineer
    Любой может отправить письмо с любым пользователем на любой домен в MX для этого домена. Таков протокол SMTP :(

    Судя по заголовкам:
    Received: from ([200.204.237.84])
    by gmr-mx.google.com with ESMTP id d5si12333070eep.0.2012.09.21.12.36.17;
    Fri, 21 Sep 2012 12:36:19 -0700 (PDT)
    Received-SPF: softfail (google.com: domain of transitioning F058B94F5@domen.com does not designate 200.204.237.84 as permitted sender) client-ip=200.204.237.84;

    Вы получили письмо, для «вас» от «вас». С IP — 200.204.237.84, потому как у вас не запрещено принимать почту от вашего домена с иных IP кроме как указанных в SPF.
    Чтобы запретить принимать почту от вашего домена с других IP попробуйте поставить -all, вместо ~all в SPF записи.
    Ответ написан
    1 комментарий