• Колледж или 11 для программиста?

    Образование тоже разное бывает. Были бы возможности я бы в свой 29 прямо сейчас уехал бы учиться в MIT или Berkley. Московские вузы и ШАД тоже неплохо но не настолько чтобы бросить все ломиться туда.

    Но вот обычные вузы в моем городе дают только базовые знания и устаревшие на 15 лет технологии.

    Вот серьезно лучше пройти пару открытых курсов того-же MIT или Udemy чем сидеть 2 часа на лекции где
    профессор в 2 научными степенями на полном серьезе рассказывает от том как что такое Java-апплеты и на практике необходимо из писать, хотя даже их api уже из всех браузеров выпилили.
  • Колледж или 11 для программиста?

    Максим Федоров,

    Согласен, сам сейчас работаю над проектом в сфере образования состоящим из 5 сервизов где на каждый сервис своя команда 3-5 человек + PM. Причем каждый сервис это монолит с 1 000 000+ строк кода не учитывая код фремворка (laravel). Планируем в будущем разбить все монолиты на микро сервисы и схожие по функционалу объединить но это пока только в планах.

    До этого 5 лет работал над CRM и скоринговой системой. То еще веселье было.

    Я к тому что можно на PHP создать за 2 дня с нуля лендинг + админку при этом все это уложится в 500 строк кода и любой упорный студент осилит это.
  • Что даёт проксирование ссылок на внешние сайты?

    Андрей Филимонов, Эффект такой что в большинстве случаев большинство поисковиков такую ссылку проигнорируют, а вот люди нет.
  • Классы .hidden и .visible в Bootstrap. Скрытие элементов, опасно ли для SEO?

    Ботам немного пофиг на стили и они всегда видят исходный код страницы со всеми от сюда вытекающими последствиями.

    Выхода два
    - первый отдельная мобильная версия вроде https://m.habr.com
    - SPA с SSR которое уже на уровне загрузки определяет тип браузера и выдает соответствующий контент
  • Что даёт проксирование ссылок на внешние сайты?

    Google по моему может и такие ссылки понимать, если сайт не внес путь проксирования в список не сканируемых страниц или не использует хитрые скрипты.
    Другие поисковики - не факт что могут.

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

    Для seo полезно только тем - что позволяет нагнать пользователей и если они не закрывают сайт сразу то небольшой плюс сайту это даст. Google аналитика точно анализирует время прибывания на сайта, и поведение.
    Если пользователь зашел на сайт и тут-же его закрыл - тогда минус, если прочитал 30-50% страницы и перешел еще на парочку - тогда плюс.

    Как-то так.
  • Mysql php, как взять определенные столбцы?

    new2k19, Тогда опять 2 варианта

    1 - на каждый не стандартный столбец придется прописать if

    $i=0;
          while ($game = mysqli_fetch_assoc($games)){ 
            $i++;?>
            <tr <?php if(($i%2)==1){ ?> class="odd" <?php } ?> >
    	  <?php foreach($game as $col => $value) {
              $col = '';
    	  if($col === 'name' && isset($game['id']){
    		$col = "<td><a href="https://store.steampowered.com/app/{$game['id']}" target="_blank">{$i}. {$value}</a></td>";
    	  }		
    	  if($col === 'cards_count' && isset($game['id']){
    		$col = "<td>
    			<a 
    			   target="_blank"
    			   href="https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_{$game['id']}&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2&appid=753#p1_price_asc" 
    			>{$value}</td>";
             }
             if(in_array($col,['price', 'cards_price', 'profit', 'max_cards_price', 'max_profit'])){
             	$col = "<td>{$value}</td>"
             }
             echo $col;
    	}
          }


    2 - воспользоваться шаблонизаторами либо DOM + isset
    <?php 
    $table = [
        1 => [ 'id' => 1, 'name' => 'n1', 'price' => 1000, 'cards_count' => 1, 'cards_price' => 1000, 'profit'=> 200,'max_cards_price' => 1500, 'max_profit' =>  1000 ],
        2 => [ 'id' => 2, 'name' => 'n2', 'price' => 2000, 'cards_count' => 2, 'cards_price' => 4000, 'profit'=> 200,'max_cards_price' => 1500, 'max_profit' =>  1000 ],
        3 => [ 'id' => 2, 'name' => 'n3', 'price' => 3000, 'cards_count' => 3, 'cards_price' => 9000, 'profit'=> 200,'max_cards_price' => 1500, 'max_profit' =>  1000 ],
    ];
    
    $headers = [ 'name', 'price', 'cards_count', 'cards_price', 'profit', 'max_cards_price', 'max_profit' ];
    
    $dom = new DOMDocument();
    $tableDom = $dom->createElement('table');
    
    $thead = $dom->createElement('thead');
    $thr   = $dom->createElement('tr');
    foreach ($headers as $header) {
        $th              = $dom->createElement('th');
        $th->textContent = $header;
        $thr->appendChild($th);
    }
    $thead->appendChild($thr);
    $tableDom->appendChild($thead);
    
    $tbody = $dom->createElement('tbody');
    $odd =false;
    foreach ($table as $row) {
        $tr = $dom->createElement('tr');
        if($odd){
            $tr->setAttribute('class', 'odd');
        }
        foreach ($headers as $header) {
            $td = null;
            if ($header === 'name' && isset($row['name'], $row['id'])){
                $td = $dom->createElement('td');
                $td->setAttribute('href', "https://store.steampowered.com/app/{$row['id']}");
                $td->setAttribute('_target','blank');
                $td->textContent = $row[$header];
            }
            if ($header === 'cards_count' && isset($row['cards_count'], $row['id'])){
                $td = $dom->createElement('td');
                $td->setAttribute('href', "https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_{$row['id']}}&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2&appid=753#p1_price_asc");
                $td->setAttribute('_target','blank');
                $td->textContent = $row[$header];
            }
            if(in_array($header,['price', 'cards_price', 'profit', 'max_cards_price', 'max_profit'])){
                $td = $dom->createElement('td');
                $td->textContent = $row[$header];
            }
            if($td){
                $tr->appendChild($td);
            }
        }
        $odd = !$odd;
        $tbody->appendChild($tr);
    }
    $tableDom->appendChild($tbody);
    $dom->appendChild($tableDom);
    
    echo $dom->saveHTML();
  • Mysql php, как взять определенные столбцы?

    new2k19,

    получаем запрос - из него список столбцов

    // Все столбцы
    $headers = [
    id => '#',
    col1 => 'Заголовок 1',
    col2 => 'Заголовок 2',
    col3 => 'Заголовок 3',
    col4 => 'Заголовок 4,
    col5 => 'Заголовок 5,
    ],
    // Полученные столбцы
    $cols = $_POST['columns'];
    /** Пусть это будут эти столбцы
    $cols = [ id, col1, col3, col5];
    */


    Далее выбираем список столбцов из таблицы
    select id, col1,col3,col5 from my_table
    Пусть массив строк это $table

    Далее выводим таблицу

    <table>
    <tbody>
       <tr>
           <?php foreach($cols as $col){ echo "<th>{$headers[$col]}</th>" } ?>
      </tr>
           <?php foreach($table as $row){ echo '<tr>'; foreach($row as $col){ echo "<td>{$col}<td>"; } echo '<tr>'; } ?>
    </tbody>
    </table>
  • Отходит штекер у новых новых наушников, в чем проблема и что делать?

    На youtube гугли видео про то как пользоваться тестером, как паять паяльником, как зачищать и залуживать провода, как пользоваться паяльным феном, как использовать клеевой пистолет/силикон и про термоусадочные трубки - таких видео пруд пруди, по моему еще было пара видео как раз про ремонт наушников.

    Основные моменты:
    1 - Сперва прозвонить все провода а потом резать
    2 - Зачистить и залудить контакты
    3 - Еще раз зачистить и залудить контакты ( на наушниках обычно тонкие жестко изолированные жилы и для того чтобы их надежно зачистить и припаять придется помучиться )
    4 - Готовую спайку стоит еще раз прозвонить тестером
    5 - Заизолировать все обратно с помощью термоклея и силикона внутри корпуса
    6 - Если виновен штекер - то на спайку штекера и провода поставить термоусадочную трубку или обмотать изолентой

    Минимальные требования:
    Отвертка
    Советский паяльник
    Любой флюс
    Олово
    Изолента
    Супер-клей

    Комфортные требования:
    Набор отверток
    Паяльная станция с регулируемым паяльником и паяльным феном
    Силиконовый пистолет или пистолет с термоклеем
    Паяльная проволока с содержанием флюса
    Термоусадочная трубка
    Супер-клей
  • Почему Ajax срабатывает только со второго раза?

    Еще добавлю что более удобный способ - если это возможно сделать страницу реактивной используя тот-же vue-js. Жизненные циклы компонентов позволят забыть от этом как о страшном сне и валидация тоже будет проще, правда придется понять как работает дерево состояний - но если изучали теорию конечных автоматов - то это будет проще простого!
  • Что сделать чтоб клиент быстрее оплатил заказ?

    dimasibirak: Не на самом деле отличный способ сломать бэкапы в принципе. Будет 2 варианта - первый это процесс бэкапа работает не из под рута и бэкапов больше не будет. Второй - бэкап снимется, но вот при развертывании он либо не развернется либо развернется с этими 000 правами что повеселит студентов которые будут потом его разворачивать.

    Адекватные люди конечно быстро просекут в чем фишка. Но небольшой файлик о том что заказчик-кидалово в корне проекта уменьшит кол-во людей которые будут работать с этм заказчиком вообще. Уже предлягали починить такие сайты на что я говорил что исправить это может только тот кто написал - и слал подальше таких "заказчиков"
  • Почему не выводятся данные из БД?

    Nokira Nokawa: на будущее поставь phpStorm, читай www.php.net/manual/ru, узнай про design patterns и best practice, и будут тебя няшки!
    а я пойду читать tl.rulate.ru/book/1015
  • Почему не выводятся данные из БД?

    Эх, когда-то давно в далекой, далекой галактики я тоже был новичком и не знал про var_dump =)
  • Почему не выводятся данные из БД?

    Nokira Nokawa: Еще один момент - значит массив отображается так

    array( 0=>"3") - и действительно так

    для того чтобы он отображался как array( "last_id"=>"3")
    замените
    $row = $result->fetch_row(); на $row = $result->fetch_assoc();
  • Почему не выводятся данные из БД?

    Nokira Nokawa: значит в таблице posts 1 пост - добавьте еще парочку для теста =)
  • Почему не выводятся данные из БД?

    Nokira Nokawa: это я понял - для этого в sql есть замечательная функция MAX(имя_поля) - которая внезапно выведет максимальное число в поле - для вас это последний id
  • Почему не выводятся данные из БД?

    Nokira Nokawa: и еще лучше заполучить себе phpStorm или intelliJIdea для работы кода и настроить xdebug - это позволит проверять код отладчиком шаг за шагом. если нет возможности - тогда постоянно

    var_dump($переменная); die();
  • Почему не выводятся данные из БД?

    сделал тестовый файл tmp.php:

    class template_class
    {
    var $values = array();
    var $html;

    function get_tpl($tpl_name)
    {
    if (empty($tpl_name) || !file_exists($tpl_name)) {
    echo "Шаблон $tpl_name не найден!";
    return false;
    } else {
    $this->html = join('', file($tpl_name));
    }
    }

    function set_value($key, $var)
    {
    $key = '{' . $key . '}';
    $this->values[$key] = $var;
    }

    function tpl_parse()
    {
    foreach ($this->values as $find => $replace) {
    $this->html = str_replace($find, $replace, $this->html);
    }
    }
    }

    $tpl = new template_class;

    $tpl->get_tpl('main.tpl');

    $rows = [
    [
    'id' => 1,
    'created_at' => date('Y-m-d H:i:s'),
    ], [
    'id' => 2,
    'created_at' => date('Y-m-d H:i:s'),
    ], [
    'id' => 3,
    'created_at' => date('Y-m-d H:i:s'),
    ], [
    'id' => 4,
    'created_at' => date('Y-m-d H:i:s'),
    ]
    ];

    while($row = array_shift($rows) ){
    $tpl->set_value('PUB_NUM', $row['id']);
    }
    $tpl->tpl_parse();
    echo $tpl->html;

    В шаблоне есть вывод. - попробуйте узнать что есть внутри самой базы.

    И еще я бы поправить код так:
    $result = $db->query ("SELECT MAX(id) as last_id FROM posts", MYSQLI_USE_RESULT);
    $row = $result->fetch_row();
    // Для теста раскоментировать строку ниже
    // var_dump($row); die();
    $tpl->set_value('PUB_NUM', $row['last_id']);
  • Что сделать чтоб клиент быстрее оплатил заказ?

    dimasibirak: какой коварный и жестокий ход! вы сделали мой день!