• Почему не работает Update?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    mysql_* функции уже вообще не должны работать 8)

    А если без смеха, то:
    1) перепишите код так, чтобы он был вам понятен
    2) замените по возможности mysql_* на PDO или на крайняк mysqli_*
    3) установите IDE и xdebug
    Ответ написан
  • Как выбрать бюджетный объектив Canon и фотовспышку?

    Вспышки хватит и самой простой с рассеивателем.
    Китовый объектив слишком темный, но и на него можно со вспышкой.
    Я бы взял что-то вроде Canon 17-85. Он широкоугольный, а это то, что вам нужно.
    Ответ написан
    Комментировать
  • Чем заменить элемент?

    Zifix
    @Zifix
    Barbatum
    Все просто — одна ячейка, фон которой — прогрессбар, поверх название урока. Можно на подложке, можно подобрать цвета, чтобы белый был одинаково хорошо виден на заполненной и незаполненной половинах. Неактивный урок, как правильно написали, приглушить, фон прогрессбара темно-зеленым, заполнение ярче. И уберите градиенты, 2015 год уже.
    Ответ написан
    1 комментарий
  • Чем заменить элемент?

    @GreatRash
    1) У вас прогрессбар не информативен. Нужно или показать процент выполнения урока, или сколько заданий выполнено (если там есть задания), например 10/100.

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

    3) Выкинуть в утиль все эти рамки от которых нет никакого толку.
    Ответ написан
    1 комментарий
  • У кого из вас есть TDD или BDD в разработке, что конкретно вы делаете, когда, как к этому пришли?

    nonlux
    @nonlux
    Книгу не читал, по этому аналогий привести не смогу
    Пишу на php для веб c bdd

    1. Пишу bdd story.
    ( в моем случае это сценарии behat)
    Для меня bdd story это как функциональные и интеграционные тесты, в которых я проверяю работу всего моего продукта в целом.

    Тут вынес несколько правил для себя:
    1.1. Обязательно формулировать цель (название) сценария
    - Я вхожу в личный кабинет
    - Я создаю новую статью блога
    Это поможет отстраниться от лишнего и не превратить сценарий в кашу

    1.2. Писать на нативном языке без технических подробностей
    Я поначалу долго сопротивлялся писать, что либо кроме файлов трансляции на русском. Но потом вкурил фишку. По сути сценарии у меня превратились не просто в тесты, а мини todo list. Всегда четкий и понятный.
    А избегание технических подробностей помогает забыть о проектирование архитектуры системы на этапе написания сценария.
    И мне гораздо понятнее:
    - Я должен видеть "Отказано в доступе"
    чем
    - Статус код страницы должен быть 403

    1.3. Я(Исполнитель) сценария дурак )
    Сценарий не должен быть замудреным. От должен быть простой и не держать какие-либо данные "в голове".

    -
    2. Далее я начинаю реализовывать шаги сценария
    (писать тесты)
    - Если я имею на руках желтый (не реализованный) сценарий, то начинаю уже задумываться о технических подробностях которые лежат на поверхности:
    Например (приведенный код это псевдокод для понятности

    Я должен быть на странице "Новости"
    assert( $uri, '/news');

    Я вижу заголовок статьи "Эта прекрасная статья"
    assertTextInElement('#newsTitle", $title);

    - Если я имею на руках красный тест, то пришло время для кода..

    3. Написание практически всего кода предшествует у меня BDDSpec
    (в моем случае phpspec)

    И так, я получил ошибку от bahat. Я специально настроил утилиту так что бы она ругалась ошибками разрабатываемой системы.
    В итоге я получаю такую ошибку:
    - uri '/new' not exist

    Это для меня прямое указание к действию. т.е я должен создать новую страницу.
    В рамках моей системы уже существуют правила:
    - новая страница - это новое action у контролера.
    - action должен вернуть массив значений для шаблона
    Опираясь на это я создаю спецификацию для контроллера
    class ControllerSpec  {
      public function it_should_show_news ()
      {
        $this->newsAction()->shouldBeArray();
      }
    }


    И далее код, который пройдет этот тест:
    class Controller {
      public function newsAction() 
      {
         return [];
      }
    }


    4. После этого запустив phpspec я получил зеленый bddspec
    5. После этого cнова возвращаюсь к bddstory
    Получаю зеленый шаг
    6. Возвращаюсь на шаг 2.

    Так начинает расти система и обрастать новым протестированным функционалом.

    До bdd использовал tdd c PHPUnit и был очень доволен, пока не подсел на behat + phpspec
    Ответ написан
    6 комментариев
  • Каковы Возрастные ограничения в программировании?

    @ChernovGV
    Я профессионально начал программировать в 26, было тяжело но интересно. За пару месяцев активного изучения не много покачался и смог устроиться на работу.8 часов работы, 15 мин обед и еще 45 мин работы, возвращался домой и еще 3-4 часа работал чтобы успевать все в срок. Через пол года смог уже ходить на нормальный обед и не работать дома. Теперь дома только изучение нового и свои проекты)
    В общем да, не поздно...
    Но есть факты с которыми не поспоришь, мозг активно развивается до 25 лет, к 30 рост нейронных связей замедляется и формировать нужные механизмы мышления будет сложнее...
    P.S.
    Моему деду 84, и он зарегистрировался в facebook раньше меня...
    Ответ написан
    4 комментария
  • Из чего состоит окружение продвинутого php разработчика?

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

    1. docker-окружение
    (в 90% случаев для веб-разработки достаточно php -S 0.0.0.0:8000)
    виртуальные машину становятся нужны:
    - когда надоест переустанавливать хост-систему из-за обилия хлама
    - когда работаешь с несколькими проектами имеющие специфические (разные) настройки окружения(php, web-сервер, база)
    - когда надоест решать проблемы в команде из-за того что по разному настроено окружение

    2. git - система контроля версий
    Помнить что ты и когда изменял, должен не человек, а машина.
    Это необходимо:
    - чтобы не испортить всю работы за прошедший год нажав del
    - чтобы определить кто из команды злодей и все испортил
    - чтобы не думать как перенести свежую версию проекта с одной машины на другую

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

    4. behat + phpspec
    Тесты нужны:
    - когда хочется почувствовать себя безопасности и для сладко спать ночь, забыв о кошмарах о сломанном коде
    - когда в production все снова сломалось
    - когда ты написал одну новую фичу, а сломал три

    5. zsh
    Хорошей консолью приятно пользоваться, работа идет быстрее.
    Консоль есть жизнь, жизнь есть shell.

    6. tmux
    Мало одно окошка в консоли, тогда tmux идет к вам.
    В качестве бонуса получите возможность парного программирования совершенно бесплатно

    7. tmuxinator
    Надоело каждый раз открывать кучу окон для tmux, попробуйте его )
    8. vim
    - Потянуло на что-нибудь необычное?
    - Хочется эффективнее писать код ?
    Ну что открыли vim? В первый раз? Поздравляю закрыть вы его не сможете )
    Вызывает зависимость при частом потреблении


    9. continuous integration сервер
    Вообще ci сервер это одушевленная машина. Это твой тамагочи, ты кормишь его хорошим кодом, он радуется и ты видишь приятный зеленый огонек. Если ты дал с код от скажет что не вкусно. Ну а если ты ему, что гнилое он будет долго на тебя орать плохими словами. Со временем он растет и учится делать более серьезные вещи, и начнет помогать тебе:
    Его скилы:
    - он может сам выполнить 10 минутные тесты
    - подготовить и опубликовать проект
    - рассказать о твоем коде, даже то что ты не знаешь
    Он легко обучается и ты легко сможешь научить его удивительным вещам.

    10. куча линтеров на pre commit hook
    Чтобы ci не кормить плохими продуктами, хорошо бы проверять что ты сделал до отправки на сервер. Что бы не забыть это сделать git сам работу.

    11. gulp
    gulp - это еще один твой помощник.
    как если использовать, как watcher файлов + livepreview, можно забыть о F5 в браузере

    12. bower
    Тоже что и composer но для управления ассетами. Это я о всяких jQuery и Bootstrap

    666. Линукс
    Даже если не хочется ставить как хост-систему, его все равно надо знать. Ваш код будет работать на нем )
    Ответ написан
    16 комментариев
  • MVP как правильно вернуть переменную во ViewModel прогрессбара?

    @tex0
    Вот тут
    А ещё кури в сторону:
    - InvokeRequired
    - SynchronizationContext
    Это вопрос доступа к элементам управления из стороннего потока.
    Ответ написан
    Комментировать
  • Присвоение цвета WPF?

    @tex0
    Есть и второй способ: самостоятельно создать цвет в конструкторе, но тогда как присвоить его в коде?

    у Border есть свойство Background. Это свойство типа Brush. Создаете в классе свойство типа Brush, привязываетесь к нему в XAML, в конструкторе определяете это свойство как вам угодно.

    пример
    XAML:
    ...
       <Border Background={Binding BorderBrush} />
    ...


    Behaviour:
    class MyControl
    {
       public MyControl()
       {
           BorderBrush = new SolidColorBrush(youColor);//youColor - создаете свой цвет классом Color.
       }
       public Brush BorderBrush {get; private set;}
    }


    попробуйте так
    Ответ написан
    Комментировать
  • Как логировать?

    @dmitryKovalskiy
    программист средней руки
    Библиотечка NLog решит 99% ваших задач.
    Ответ написан
    Комментировать
  • Какую выбрать простую CMS для лендинга или мини-сайта?

    Лэндинг можно без CMS сделать, с помощью какого нибудь лэндинг-генератора или wordpress.
    Ответ написан
    4 комментария
  • Выбор литературы C#. Шилдт или Троелсен?

    @dmitryKovalskiy
    программист средней руки
    "CLR via C#" Рихтера - как библия, Шилдт - как учебник по синтаксису. Чарльз Петцольд - по разработке под саму WPF.
    Ответ написан
    3 комментария
  • Как разместить сайт в google с надписью -> реклама?

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

    Alexey_gr
    @Alexey_gr
    подписываешся на
    html5weekly.com
    javascriptweekly.com
    mobilewebweekly.co
    и все, ты в тренде
    Ответ написан
    Комментировать
  • Как быть в тренде новых технологий?

    @wittyrider
    systemd есть людей
    Как за ними следить?

    Каждую неделю на хабре читайте дайджест дайджестов.

    И самое главное, как успевать изучить не только теоретическую часть, но и попробовать на практике?

    В большинство случаев хватит немного поиграться и понят как оно работает и для чего может понадобится. А полностью изучать можете по мере необходимостью.
    Ответ написан
    Комментировать
  • Как показать диалог в потоке BackgroundWorker'a на WPF?

    Neuroware
    @Neuroware
    Программист в свободное от работы время
    не уверен что это поможет, но можно вызвать его через диспетчер
    Dispatcher.Invoke((Action)delegate() { /* тут можно вызвать диалог
     и вообще делать все что угодно, все это будет в основном потоке */ });
    Ответ написан
    2 комментария
  • Какая альтернатива Silverlight Business Application?

    @Gwynbleidd
    Приятность Silverlight еще и в том, что приложение очень удобно разворачивать (в корпоративной среде это особенно важно). WPF в этом плане менее удобен.
    Если устраивает разворачивание приложения WPF, то он в вашем случае представляется оптимальным вариантом (кодовая база будет практически одинаковая), и Microsoft хоронить WPF как будто бы не собирается.

    ASP.NET / HTML5 + JavaScript - нет проблем с развертыванием, но приложение придется переписывать. Если приложение простое, можно и переписать. Если приложение все-таки по своей сути десктопное, тут могут возникнуть проблемы.
    Ответ написан
    Комментировать
  • Использовать ли UserControl в WPF MVVM?

    @Hydro
    C#/.NET Developer
    У вас в корне неправильный подход.
    Давайте по порядку.
    Сначала почитайте про DataContext в WPF, потом про сам MVVM (тщательнее, чем до этого).
    По структуре данных: одна таблица - это один тип аггрегации, соответственно другая таблица - другой тип аггрегации, поясню напримере:
    есть таблица продукты (Id, Код продукта) и есть таблица заказчики (Id, Имя, Код заказанного продукта), для таблицы продукты, необходимо создать класс Product
    class Product : INotifyPropertyChanged
    {
      public int Id {get;set;}
      public int Code {get;set;}
      // + реализация INPC
    }

    По INotifyPropertyChanged погуглите что это.
    Затем для таблицы заказчики создать класс Consumer
    class Consumer
    {
      public int Id {get;set;}
      public string Name {get;set;}
      public IEnumerable<Product> Orders {get;set;}
    }

    Данные выбираются из БД и для каждой таблицы должен создаваться экземпляр соответствующего ей класса.

    Теперь по отображению и CRUD:
    Создаете класс с контекстом

    class MyShopViewModel : INotifyPropertyChanged
    {
     // Выбранный элемент, для которого будем отображать модальное окно
      public object SelectedItem {get;set;}
    }


    Где то в коде, где открывается модальное окно, например в методе ShowObjectEditor делаете:
    public void ShowObjectEditor()
    {
      // создаем окно с редактором объекта БД
      var objectEditor = new ObjectEditorView();
      // Устанавливаем ему DataContext, Где myShopViewModel - Объект класса MyShopViewModel
      objectEditor.DataContext = myShopViewModel;
      // показываем окно
      objectEditor.Show();
    }

    В разметке ObjectEditorView
    <Window>
      <ContentPresenter Content="{Binding SelectedItem}"/>
    </Window>

    Но ContentPresenter не знает как его показывать, вот тут и открывается ответ на Ваш вопрос: для каждого типа данных пишете DataTemplate в ресурсах окна, у меня есть два типа - продукты и заказчики, и разметка приобретает вид
    <Window>
      <Window.Resources>
        <ResourceDictionary>
         <DataTemplate TargetType={x:Type Product}>
          // вот тут и описываем чекбоксы и прочую хрен.
         </DataTemplate>
         <DataTemplate TargetType={x:Type Consumer}>
          // вот тут и описываем чекбоксы и прочую хрен.
         </DataTemplate>
        <.ResourceDictionary>
      <.Window.Resources>
      <ContentPresenter Content="{Binding SelectedItem}"/>
    </Window>

    Теперь для каждого типа данных автоматом подтянется своя разметка и располагаться это будет в одном окне.
    Что не понятно - спросите в комментариях.
    Ответ написан
    4 комментария