Задать вопрос
  • Уважаемые знатоки, как сделать такую кнопку?

    thoozu
    @thoozu
    Веб-разработчик
    Можно воспользоваться псевдо-классами :before и :after.
    Ответ написан
    Комментировать
  • Как учиться новому после рабочего дня?

    @galliard
    Расскажу свою историю.
    Лет 5 назад устроился на обезьянью работу за еду, отдаленно связанную с программированием.
    Первые 3 месяца активно впахивал на благо компании. Заодно изучал компанию, и её процессы, людей. Когда закрепился и чувствовал себя более комфортно, начал заниматься самообучением. Когда по 2-4 часа в день, а когда и несколько дней подряд. При этом рабочие задачи отодвигал, а то и откровенно клал на них [большой и толстый]. А когда спрашивали, говорил что долго, сложно и лепил прочие отмазки. Дома обучался довольно редко и под настроение, ни к чему себя не принуждая. Через год от меня стали активно требовать результата работы, но я уже чувствовал в себе силы начать самостоятельно разрабатывать проекты и уволился. И довольно быстро нашел отличную работу, со свободным графиком, интересными задачами и втрое большей зарплатой)))
    Ответ написан
    Комментировать
  • Где найти практику по javascript?

    fnnzzz
    @fnnzzz
    front-end dev
    https://codefights.com
    codewars.com

    прямо мультиплеер с реальными задачками и разной сложностью.
    Ответ написан
    Комментировать
  • Где найти практику по javascript?

    @Novamoscow
    https://github.com/rtivital/jsraccoon

    Мы знаем, что вы хотите сделать сегодня ночью! Прочитать все советы и хитрости по вёрстке и JavaScript в нашем репозитории. Там же найдёте сборник статей по объектно-ориентированному JavaScript, самым полезным нововведениям ES6 и огромное количество задач для начинающих изучать JavaScript с подробным решением.

    Из группы вк по фронту
    Ответ написан
    Комментировать
  • Что изучить первым и выгоднее Angular, Angular 2 или React?

    feligz
    @feligz
    JS/TS developer
    Лихо вы TypeScript в минусы записали ) Статическая типизация сильно повысит надежность вашего кода, сделает его более структурированным и понятным. Многие ошибки будут вываливаться уже на стадии компиляции. Так что TS это большой плюсище.
    Ответ написан
    Комментировать
  • Кто пользуется http://export.yandex.ru/weather-ng/forecasts/id.xml? Почему не работает?

    wielski
    @wielski
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Комментировать
  • Nodejs или php(yii2) для новичка?

    sayber
    @sayber Куратор тега PHP
    Да, я программирую на PHP и еще асинхронно!
    yii2 бекенд, а на JS+Node.JS+BEM фронтенд.

    Начните с самого начала.
    Почитайте что такое серверный язык, что такое backend и frontend.
    Как реализуется такие технологии. Все это понять и осмыслить.
    Затем уже задавать вопрос в таком ключе.

    Сейчас же у вас вопрос звучит так - я вот прочитал/услышал про .... технологи, решил их использовать как то и что бы все это работало.

    Зачем вам на фронте JS+Node.JS+BEM а на бэке yii2 ?
    Как вы представляете себе работу этого стека ?

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

    gordiyenko
    @gordiyenko
    iOS Дизайнер
    launchscreen.xib существует как раз для того, чтобы не заваливать проект макетами под все разрешения. Если сверстать его как и любой другой экран интерфейса — то есть, множеством элементов, используя constraints и прочую магию — получится более легкое, масштабируемое и простое решение.

    #добавлено:

    Если выбор всё же за набором картинок, то решение за правым кликом в списке картинок:

    ba229a068f5d471ba7cb39e7e4327c1e.png

    Получается такой нехилый набор и никаких классов:

    77e3aaafe18347c3b99d23bed917ce3f.png
    Ответ написан
    5 комментариев
  • Какая разница между @include и include?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Собака не имеет никакого отношения к include. Это не один оператор, а два совершенно разных оператора.
    2. Увидев @ в коде ты можешь почти со стопроцентной уверенностью сказать, что его писал неграмотный пользователь, и пользоваться этим кодом не стоит.
    3. Увидев в коде @include ты можешь смело считать его автора абсолютным лохом и нубом, а сам код надо выкидывать немедленно. Потому что @include глушит не только саму ошибку включения файла, но и все ошибки в этом файле - то есть, поступает стократ хуже. Это значит, что если автор допускает такие косяки в коде, то и все остальное у него тоже ад кромешный.
    4. Самое главное. Ошибки надо не подавлять. Ошибки надо исправлять. Но опять же, делать это с умом. Начинающие программисты считают сообщения об ошибках своими личными врагами, и борются с ними всеми доступными средствами - с помощью @, error_reporting(0) и др. Получив линейкой по рукам и запомнив на всю жизнь, что так делать не надо, ониначинают с не меньшим рвением писать всякие проверки - лишь бы не допустить, не дай бог, ненавистного сообщения об ошибке. Например:

    if (file_exists($inc))
    {
        include $inc;
    } else {
        echo "Файл не найден";
    }

    Так вот, это - еще хуже. Для начала, часть ошибок этот код все равно не отловит. Но это даже не самое главное. Главное - что вот это вот "Файл не найден" не имеет ни малейшего смысла. Пользователю оно ничего не скажет. А программист о нем не узнает. А если и узнает, то ничего не поймет! Какой файл? Где не найден? По какой причине? Системное сообщение об ошибке содержит массу бесценной информации помогающей идентифицировать ошибку, сообщая нам где она произошла, какой файл не найден, по какой причине не найден. Выдавать вместо этого огрызок "файл не найден" - это мазохизм.

    И вот тут мы должны произвести натуральную революцию в неокрепшем детском мозгу: сообщение об ошибке не твой враг, а твой друг! И надо добиваться его появления всеми возможными способами! В том числе и выпиливанием бессмысленных проверок. Проверку можно ставить только если у нас есть сценарий обработки ошибки: к примеру, вместо этого файла мы можем заинклюдить какой-то другой, дефолтный. Тогда да - проверка имеет смысл. Но если это самый обычный инклюд, который всегда должен быть на своем месте, то его отсутствие обязано вызывать ошибку! Чтобы она была сразу показана на дев сервере и тут же исправлена. Чтобы она была записана в лог на продакшене и тут же исправлена.

    Ошибки не надо подавлять. Ошибки не надо прятать. Ошибки надо исправлять.
    Ответ написан
    3 комментария
  • Где посмотреть видео про использование Git?

    FanKiLL
    @FanKiLL
    Есть переведённые курсы от lynda.com про git - если вам именно на русском надо
    rutracker.org/forum/viewtopic.php?t=4782388

    Но лучше в оригинале смотреть
    rutracker.org/forum/viewtopic.php?t=4178341

    Я вам ничего не давал и меня тут вообще не было.
    Ответ написан
    Комментировать
  • Как улучшить навыки построения веб-приложения (php)?

    nowm
    @nowm
    Ссылка на мое убожество

    Первый и очень важный совет: если у вас возникает желание написать: «Ссылка на мое убожество», лучше сразу сотрите весь код и не отвлекайте людей по пустякам. Смотрите: вы называете его убожеством. Значит вы знаете почему он убогий. В этом случае поправьте его до такой степени, чтобы у вас не появлялось желание самому называть его убогим. Поправили — публикуйте. Если же вы его называете убогим только потому, что кто-то ещё называет его убогим, то просите того человека делать обзор, а не всех вподряд.

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

    Спросите у того, кто вам это сказал. Поинтересуйтесь, что можно исправить и в каком направлении работать. Просто в одной компании у Senior PHP Programmer может быть даже меньше навыков, чем у Junior PHP Programmer в другой компании. Если кто-то говорит, что код — гавно, попросите объяснить, почему он плохой. Если люди не объясняют, просто забейте и программируйте в своё удовольствие.

    Чётких критериев деления на Junior, Middle и Senior нет. Но есть признаки, по которым можно примерно ориентироваться.

    1. Если человек пишет программу так, что вывод нарушает семантику выходного формата, это явный признак юниорства. Для примера, в файле /framework/index.php есть такой код:

    echo '<!-- Код выполнен за '.number_format(microtime(1)-$t,3).' секунды -->';


    Это выведет примерно такой код:
    <html>
    . . .
    </html>
    <!-- Код выполнен за 0.531 секунды -->


    Семантически это неправильно, так как после закрывающего тега HTML больше не должно ничего быть.

    2. Русские и английские комментарии смешиваются. Вообще, лучше писать комментарии на английском, так как код вы выкладываете на ресурс, где большинство посетителей англоговорящие (я про GitHub, а не про Тостер). При этом, без проблем можно писать комментарии на русском, если вам глубоко параллельно на англоязычную аудиторию. Но в этой ситуации нужно писать все комментарии на русском. У вас же там мешанина — автоматически сгенерированные фреймворком англоязычные комментарии и рядом комментарии на русском языке. В вашем случае нужно либо переписать английские комментарии на русский, либо русские комментарии перевести на английский.

    Дополнительно, не нужно писать комментарии для обыденной фигни, вроде:
    $config['per_page'] = 10; // сколько записей показывать на странице

    Это тоже самое, что наклеить на монитор заметку, что Земля вращается вокруг Солнца. Вам лично нужно постоянно самому себе напоминать этот факт? Возможно, есть смысл напоминать какие-то сложные моменты, вроде расстояния между Солнцем и Землёй в миллиметрах, но не обыденные вещи.

    3. Не-единообразный подход к оформлению кода. Например, фреймворк сгенерировал такой код:

    if (defined('ENVIRONMENT'))
    {
        switch (ENVIRONMENT)
        {
            case 'development':
                error_reporting(E_ALL);
            break;
    
            case 'testing':
            case 'production':
                error_reporting(0);
            break;
    
            default:
                exit('The application environment is not set correctly.');
        }
    }


    Это код по стандарту PSR-2

    Код, написанный вами, не попадает под этот стандарт. Для примера:

    if (strlen($uri)>1) {// если не главная страница...
      if (rtrim($uri,'/')!=$uri) {
        header("HTTP/1.1 301 Moved Permanently");
        header('Location: http://'.$_SERVER['SERVER_NAME'].str_replace($uri, rtrim($uri,'/'), $_SERVER['REQUEST_URI']));
        exit();
      }
    }


    Я предлагаю самостоятельно определить, что здесь не соответствует PSR-2. В целом, я чаще всего забиваю на PSR-2. Но я пишу так, как написан основной код. Если основной код написан по стандарту PSR-2, я свои правки тоже делаю в этом стиле. Мешать стандарты, делать в одном месте отступ в два пробела, в другом — в четыре пробела, а в третьем в один TAB — это тоже признак юниорства. Сразу видно, что вы писали мало и не можете понять, что в коде должно быть единообразие, чтобы он выглядел не-юниорским.

    4. Велосипеды — ещё один признак новичка. Раз уж вы таким способом (как в листинге выше) пытаетесь определить главную страницу, можно сократить код (про «велосипед» объяснение в пунктах «в» и «г»):

    a) Нафига добавлять в блок IF единственный блок IF? Такая вложенность блоков нужна только если у вас внутри первого блока IF есть несколько IF-операций, а не одна единственная. Например:

    if (x = 0) {
        if ( isset(y) ) {
            echo 'The Y is set';
        }
    
        if ( isset(z) ) {
            echo 'The Z is set';
        }
    
        echo "Echo something";
    }


    Нужно так писать в вашем случае:

    if (strlen($uri) > 1 && rtrim($uri, '/') != $uri) {
        // some code
    }


    б) Если вы несколько раз пытаетесь использовать вызов функции с одними и теми же параметрами, и функция определённо возвращает один и тот же результат, лучше один раз присвоить её результат переменной и использовать переменную. Например, «rtrim($uri,'/')» вызывается несколько раз. Совершенно понятно, что она всё время будет возвращать один и тот же результат. Конечно, rtrim работает быстро и разницы не будет заметно в итоге. Но вот, например, если у вас функция будет делать запрос в БД, и вы будете её таким способом каждый раз дёргать, это скажется на производительности.

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

    // Плохой подход
    echo 'У меня есть ' . get_my_apples_from_database() . ' яблок, потому что ' . get_my_apples_from_database() . ' яблок — это круто';
    
    // Хороший подход
    $my_apples = get_my_apples_from_database();
    echo "У меня есть $my_apples яблок, потому что $my_apples яблок — это круто";
    
    // Плохой подход
    $my_apples = get_my_apples_from_database();
    echo "У меня есть $my_apples яблок";
    
    // Хороший подход
    echo 'У меня есть ' . get_my_apples_from_database() . ' яблок';


    в) Если вы пользуетесь CodeIgniter, почему бы не пользоваться его возможностями определения факта, что сейчас открыта главная страница?

    г) Вобще, редиректы со слеша на страницу без слеша нужно делать средствами веб-сервера, а не средствами PHP-интерпретатора.

    Если у вас установлен Apache, можно добавить в .htaccess в корне веб-сайта такой код:

    RewriteCond %{REQUEST_URI} ^.+
    RewriteRule ^(.*)/$ /$1 [L,R=301]


    Это только для иллюстрации. Я не гарантирую, что эта конструкция будет работать идеально, но как пример она хорошо подходит.

    5. Вот такой интересный код в контроллере application/mvc/controllers/blog.php:
    $query = $this->db->query("SELECT count(`id`) FROM `blog_page` WHERE `category`='$id'");//Считаем


    CodeIgnitor — это MVC-фреймворк, он помогает понять, что такое MVC и как правильно писать MVC-приложения. Куча документации же на эту тему. Предлагается разделять код на модель, контроллер и представление. Это означает, что каждая часть выполняет свои какие-то функции. Модель, например, кроме прочего, занимается добычей данных из базы данных. Только модель этим должна заниматься. SQL-запросы в контроллере — это... есть такое выражение: «толстые тупые уродливые контроллеры». Это обычное определение, ничего обидного. Так называются контроллеры, которые делают запросы к БД и частично генерируют HTML-код. Они появляются в ситуации, когда разработчику влом прыгать по файлам и он начинает лепить всё в контроллер. Или когда у него нет достаточного количества знаний по MVC, чтобы правильно разделять код.

    * * *

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

    $i = 0;
    
    foreach($query->result_array() as $row)
    {
    	$myrow[$i]['url'] = $row['url'];
    	$myrow[$i]['title'] = $row['title'];
    	$myrow[$i]['text'] = substr(strip_tags($row['text']),0,255);
    	$i++;
    }


    Вместо этого можно было написать так:

    $myrow[] = array();
    
    foreach($query->result_array() as $row)
    {
    	$myrow[] = array(
    		'url' => $row['url'],
    		'title' => $row['title'],
    		'text' => substr(strip_tags($row['text']),0,255)
    	);
    }


    Переменная $i тут не нужна. Можно нормально обойтись без неё. А вот $myrow обязательно нужно определить, чтобы не сталкиваться с неожиданными ошибками, если $query->result_array() вернёт 0 запией.

    Читайте разный код. Понятно, что это универсальный совет, на который вы ответите: «я знаю». Но если вы не будете читать, останетесь безграмотным, вне зависимости от того, знаете вы про полезность этого совета или нет.

    Если пишете на CodeIgniter, почитайте его исходники и документацию. Не почитаете — будете плодить велосипеды, вместо которых можно было бы использовать API фреймворка.

    Используете MVC? Почитайте, для начала: ru.wikipedia.org/wiki/Model-View-Controller Там про толстые контроллеры тоже есть.

    * * *

    Вообще, очень тонкий момент, когда заходит разговор про Junior'a, значит где-то рядом есть и Middle и Senior, значит вы хотите работать в конкретном месте с конкретными людьми. Есть смысл подоставать этих людей, набиться в ученики. Если вы так не думаете, пошлите их на три буквы и программируйте, как считаете нужным.

    DISCLAIMER: Я на всякий случай уточню, что не занимаюсь обучением или поиском чужих косяков в коде. У меня было немного свободного времени, которое я потратил на ответ. Это не значит, что я готов с кем-то няньчиться. Сам ничего не умею.
    Ответ написан
    2 комментария
  • Зачем писать свой движок сайта?

    @samodroid
    Старайтесь выполнять работу по своим силам,простой движок сайта можно сделать, это не такая уж трудная задача.Так как пхп-это язык с ооп, то воспользуйтесь этим козырем, разложите все задачи движка по классам, вам будет намного легче. Главное написать план действий на бумаге на каждый день и не переутомляться. Вот пример плана:
    1 день: сделать главную страницу.
    2 день: сделать стиль элементов.
    3 день: создать модуль загрузки картинок.
    4 день: создать модуль добавления новых страниц сайта.
    5 день: создать модуль меню.
    Две недели-это достаточный срок для написания основы для движка и минимальный функционал. Возможно это просто проект для набора опыта, потом легче будет работать. В крайнем случае если вас уволят с работы, то хотябы будет опыт, после дома вы всегда сможете улучшить свои результаты и найти другую работу, где вы пройдете испытание. Главное- не отчаиваться, отчаяние- самый большой враг человека! Очень часто бывает,что человек по-многу раз ищет новую работу.
    Ответ написан
    1 комментарий
  • Как осуществить подключение нескольких шрифтов в css?

    Zoxon
    @Zoxon
    Веб-разработчик
    @font-face {
    font-family: "PT Serif";
      src: url("../fonts/ptserif-normal.eot");
      src: local('☺'), 
      url("../fonts/ptserif-normal.eot?#iefix") format("embedded-opentype"), 
      url("../fonts/ptserif-normal.woff") format("woff"),
      url("../fonts/ptserif-normal.ttf") format("truetype"), 
      url("../fonts/ptserif-normal.svg#PT Serif") format("svg");
    
      font-weight: normal;
      font-style: normal;
    }
    
    @font-face {
      font-family: "PT Serif";
      src: url("../fonts/ptserif-bold.eot");
      src: local('☺'), 
      url("../fonts/ptserif-bold.eot?#iefix") format("embedded-opentype"), 
      url("../fonts/ptserif-bold.woff") format("woff"), 
      url("../fonts/ptserif-bold.ttf") format("truetype"), 
      url("../fonts/ptserif-bold.svg#PT Serif") format("svg");
    
      font-weight: bold;
      font-style: normal;
    }
    
    @font-face {
      font-family: "PT Serif";
      src: url("../fonts/ptserif-italic.eot");
      src: local('☺'), 
      url("../fonts/ptserif-italic.eot?#iefix") format("embedded-opentype"), 
      url("../fonts/ptserif-italic.woff") format("woff"), 
      url("../fonts/ptserif-italic.ttf") format("truetype"), 
      url("../fonts/ptserif-italic.svg#PT Serif") format("svg");
    
      font-weight: normal;
      font-style: italic;
    }
    
    @font-face {
      font-family: "PT Serif";
      src: url("../fonts/ptserif-bolditalic.eot");
      src: local('☺'), 
      url("../fonts/ptserif-bolditalic.eot?#iefix") format("embedded-opentype"), 
      url("../fonts/ptserif-bolditalic.woff") format("woff"), 
      url("../fonts/ptserif-bolditalic.ttf") format("truetype"), 
      url("../fonts/ptserif-bolditalic.svg#PT Serif") format("svg");
    
      font-weight: bold;
      font-style: italic;
    }


    В font-weight можно использовать не ключевые слова, а цифры

    100 Ultra Light
    200 Thin
    300 Light
    400 Regular, Normal
    500 Roman
    600 Medium, SemiBold
    700 Bold
    800 Heavy, ExtraBold
    900 Black

    При использовании указывать font-weight и font-style, в зависимости от их комбинаций будет выбран нужный файл шрифта

    UPD: Если вам не нужно поддерживать совсем уж древние браузеры IE8 (eot) и Android 4.3 (ttf) то достаточно подключить только woff и woff2.
    Svg нужен для Safari версии ниже 5.1

    Подробнее смотрите на caniuse.com

    Хорошая статья на эту тему nicothin.pro/page/web-fonts

    @font-face { 
      font-family: 'Web font'; 
      src: url('webfont.woff2') format('woff2'), 
           url('webfont.ttf')  format('truetype'), /* Только если нужна поддержка старых Android, иначе закомментировать */ 
           url('webfont.woff') format('woff'); 
      font-weight: normal; 
      font-style: normal; 
    }
    Ответ написан
    4 комментария
  • Мобильные устройства, вредно ли их постоянно держать на подзарядке?

    liveor
    @liveor
    Насколько я понял, данные советы равносильны и для ноутбуков, в которых используется Li-Ion батарея? Или на самом деле есть какие-то тонкости и нюансы, от которых срок службы аккумулятора может варьироваться?
    Ответ написан
    1 комментарий