• Как работать с картой google на swift?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Комментировать
  • Имеет ли смысл начинать с Си?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Плюсы:

    Си это сила. У него пока нет конкурентов в системном программировании (разве что rust подкрадывается и D, но они чуть на другие вещи ориентированы).

    Минусы:

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

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

    Если же вас интересуют более мэйнстрим вещи вроде web или мобильная разработка - проще сразу брать какой-нибудь современный динамический язык (python, javascript) и радоваться жизни.
    Ответ написан
    12 комментариев
  • В чем смысл ежедневных сборок?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Варианты могут быть такие:
    а) На каждый коммит сразу идет сборка продукта и прогоняются интеграционные тесты.

    Плюсы такие - на рабочем месте вам нужен только GIT и IDE, все компиляторы, окружение для запуска приложения - на нодах билдсервера. В результате вы можете кодить откуда угодно, и сразу проверять целостность сборки с каждым коммитом.

    б) сборка может быть ночной. Например потому что билд идет 5 часов на толстом сервере, и на рабочей машине он будет идти 10-15 часов, а то и не идти вообще. Тогда конечно, желательно не ломать билд недоделанными коммитами. Но git же позволяет коммитить без пушей, либо пользоваться бренчами, и настраивать сборку не на просто коммит, а на мерж в девелоперский или мастер бренч.

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

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

    sim3x
    @sim3x
    У тебя уже все должно быть посчитано в твоем бизнесс-плане
    К чему такие вопросы?
    Ответ написан
    2 комментария
  • Как правильно сделать git запросы?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Сделайте локальный коммит, а потом git pull
    Ответ написан
  • Как реализовать одинаковые методы, работая с tableView в UITableViewController и UIViewController?

    Flanker_4
    @Flanker_4
    Соглашусь, что UITableViewController лучше не использовать вовсе. Но и Вас я могу понять, хочется быстро накидать экран в сторибоарде и не заморачиваться. Вот какие решения я использовал:
    1) для новых приложений ( >= iOS 9) Использовать UIStackView. Идеально подходит для подобного рода задач и не требует лишних телодвижений, что требует uitableview
    2) Использование нового подхода, так продвигаемого Apple в swift вместо ООП - протокольно ориентированное программирование.
    Объявляете свой протокол для работы с tableView, где объявляете readonly property NSArray *tableViews (кто сказал что на контроллере может быть только одна таблица ;) ), ну или на худой конец myTableView

    Объявляете свою категорию/extension в терминологии swift (а лучше их набор) на UIViewController, где используется вышеуказанный протокол и вышеуказанная property.
    Дальше в UITableViewController реализовываете этот протокол

    - (NSArray <UITableView*> *) tableViews{
        return @[self.tableView];
    }

    аналогично делаете в своем базовом BaseViewController (а нужен ли он теперь вообще? подумайте. хотя лучше оставить, но он по идее теперь станет максимально пустым)
    Ну и в viewDidLoad/init вызываете нужные методы из категорий для инициализации
    Получилось сумбурно, но я надеюсь Вы уловили месседж
    Ответ написан
    Комментировать
  • Сколько может стоить разработка подобного приложения?

    a13xsus
    @a13xsus
    Lazy developer
    Вопрос скорее должен звучать как сколько нужно времени на разработку приложения с таким-то ТЗ, из которого будет понятно, что конкретно нужно делать, какие технологии использовать. И время уже конвертировать в деньги.

    Если разработчик — вы, тогда смотрите ТЗ, оценивайте временные рамки, согласуйте их с заказчиком. Если оплата почасовая — называйте вашу часовую ставку, ведите учет затраченного времени в часах, множите. Если fixed price — договаривайтесь.
    Ответ написан
    Комментировать
  • Macbook Pro 13" (2015) для разработки ОК?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для серьезной разработки - нет. Даже air слабоват. Все упрется в процессор. Но для обучения - норм.

    если нужно именно писать код

    Писать код - это малая часть того чем занимаются программисты. Вам этот код еще запускать надо. И чем серьезнее разработка - тем больше ресурсов требуется. Сначала это просто ruby, потом добавляются различные системы сборок, потом окружение изолировать придется (docker-ы всякие), и так постепенно задачи будут все более усложняться.
    Ответ написан
    4 комментария
  • Как в Swift объединить два массива?

    DevMan
    @DevMan
    это не массивы, а словари (dictionary).

    extension Dictionary {
    	mutating func merge(other:Dictionary) {
    		for (key,value) in other {
    			self.updateValue(value, forKey:key)
    		}
    	}
    }
    
    let airports  = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
    let airports2 = ["YYZ2": "Toronto Pearson2", "DUB2": "Dublin2"]
    var airports3 = [String : String]()
    airports3.merge(airports)
    airports3.merge(airports2)
    
    print(airports3)
    // ["YYZ": "Toronto Pearson", "YYZ2": "Toronto Pearson2", "DUB": "Dublin", "DUB2": "Dublin2"]
    Ответ написан
    Комментировать
  • Как правильно организовать продажу знаний?

    Мое мнение: никому не нужны ПЛАТНЫЕ знания по "некоторым навыкам" неизвестного парнишки, когда все есть в бесплатном доступе, а для дураков и в платном доступе от хороших профессионалов своего дела

    Не знаю ни одной IT области, которой нельзя научиться бесплатно.
    А со знанием английского можно и вовсе постичь дзен, обучаясь еще и по буржуйским материалам
    Ответ написан
    9 комментариев
  • Правда ли UUID так надёжен?

    GavriKos
    @GavriKos
    В вашем случае намного проще генерировать ID по нику пользователя в чате (его ID-номеру в базе, чтобы короче)+таймштампу с точностью до микросекунды. Гарантированая уникальность.
    Ответ написан
    Комментировать
  • Как работают URL запросы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Сначала

    википедия: HTTP

    потом

    гугл: objective-c отправить http запрос
    Ответ написан
    2 комментария
  • Как правильно сделать ленту записей на CoreData?

    DevMan
    @DevMan
    какой "огромный массив объектов в памяти"?
    подтягивайте столько записей, сколько можете показать на экране (или немного более).
    остальные подтягиваются либо по запросу, либо по скролу.
    Ответ написан
    2 комментария
  • В чем разница isHittable и exists?

    DevMan
    @DevMan
    тут все понятно из самих названий:
    exists - существует ли элемент.
    isHittable - возможнo ли взаимодействовать с элементом (реагировать на клик/тач/жест).

    например, мы выводим таблицу из 50 строк. те ячейки, которые видны на экране есть и exists и hittable. a те которые не поместились на экран есть exists, но не hittable.

    думаю так будет понятно:
    if (dateTextField.exists) {
        NSLog(@"date field exists");
    }
    if (dateTextField.hittable) {
        NSLog(@"date field action is possible");
    }
    Ответ написан
    2 комментария
  • Как получить доступ к элементов структуры по указателю (С++)?

    @vilgeforce
    Раздолбай и программист
    object* oPtr = (object*)p;
    oPtr->b = "foobar";
    не вариант, ладно.

    unsigned char* addr = (unsigned char*)o;
    addr = addr + offset2;
    std::string* strPtr = (std::string*)addr;
    *strPtr = "foo";
    Вариант два тоже не вариант?
    Ответ написан
    4 комментария
  • Плохо ли то, что макбук начинает шуметь?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Плохо конечно, если это Macbook, как вы говорите. Ведь он без движущихся частей!
    Ответ написан
    8 комментариев
  • Для чего предназначен этот код?

    kimono
    @kimono
    Web developer
    function(e) {
      // отменяем привычное действие ссылки
      e.preventDefault();
      // добавляем класс loading
      $(this).addClass("loading");
      // переменной confirm_text присваиваем атрибут ссылки "Выход" с именем data-confirm или false
      var confirm_text = $(this).data("confirm") || false;
      // переменной method присваиваем атрибут ссылки "Выход" с именем data-method или get
      var method = $(this).data("method") || "get";
      // берем адрес ссылки для выхода
      var url = $(this).attr("href");
      // создаем пустой объект, будем использовать его для отправки данных на сервер
      var post_data = {};
      // если метод отправки = post, пробегаемся по всем атрибутам "data-post" ссылки "Выход" и заносим их значения с маленькой буквы в наш объект
      if (method == "post") {
        for (var i in $(this).data()) {
          if (i.indexOf("post") === 0) {
            post_data[i.replace(/^post/, "").toLowerCase()] = $(this).data(i)
          }
        }
      }
      var send = true;
      // если у нас задан атрибут confirm_text (по всей видимости это alert-сообщение типа "Вы уверены что хотите выйти?"), то проверяем нажал ли пользователь "Да"
      if (confirm_text) {
        if (confirm(confirm_text)) {
          send = true
        } else {
          send = false
        }
      }
      // Если пользователь нажал "Да" или атрибут confirm_text не задан, то отправляем данные на сервер
      if (send) {
        $.ajax({
          url: url,
          cache: false,
          dataType: "script",
          type: method,
          data: post_data
        })
      }
    }



    ... а также почему если я перейду по ссылке toster.ru/auth/sign_out будет совсем не то, что я ожидаю (выход из аккаунта).

    Значит на сервере выход из аккаунта не поддерживает метод GET. Иначе, пользователи могли бы вставить в посты изображение со ссылкой <img src="http://toster/sign-out"> и после захода на эту страницу все пользователи автоматом разлогинивались.
    Ответ написан
    Комментировать