Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Короткая инструкция для относителных путей

#linux #freebsd


При использовании относительных путей например cd ./../../../.. хочется использовать
какой нибудь сокращенный эквивалент этой команды, что то похожее на  ..\4 .

Может в POSIX системах есть, что то похожее на это ?
    


Ответы

Ответ 1



Вы можете сами назначить алиасы, например такие: alias ..="cd .." alias ...="cd ../.." alias ....="cd ../../.." alias .....="cd ../../../.." alias ......="cd ../../../../.." Или такие: alias ..="cd .." alias ..2="cd ../.." alias ..3="cd ../../.." alias ..4="cd ../../../.." alias ..5="cd ../../../../.."

Ответ 2



поступил вот так. написал скрипт на баше #!/bin/bash i=1 while [ "$i" -le "$1" ]; do i=$(($i + 1)) str=$str"../" done echo $str и вот так его вызываю: cd `имя_скрипта 7` 7 - это количество директорий на которые нужно вернутся. если кто то может улучшить этот скрипт то буду этому рад _____________ 17.10.2017 ______________ скрипт был усовершенствован до такого вида #!/bin/bash i=1 while [ "$i" -le "$1" ]; do i=$(($i + 1)) ss=$ss"../" done cd $ss unset ss затем создаем вот такой алиас alias cdn='. имя_скрипта ' и теперь его можно вызывать вот так: cdn 6 цыфра в конце это количество директорий на которые необходимо вернутся

Java ArrayList sort в ранних версиях

#java #android #сортировка #arraylist


Пытаюсь отсортировать ArrayList. Жалуется, что в api не поддерживается compare. Как
можно выполнить сортировку в более ранних версиях андроида?

Collections.sort(MyList, new Comparator() { 
    @Override
    public int compare(MyModel o1, MyModel o2) {
        return Boolean.compare(o1.isDeleted(),o2.isDeleted());
    }
});

    


Ответы

Ответ 1



Метод: public static int compare (boolean x, boolean y) класса Boolean стал доступен в API level 19. На более ранних версиях можно использовать метод: public int compareTo (Boolean b) этого же класса, который доступен начиная с API level 1. Пример: boolean b1 = true; boolean b2 = false; int result = Boolean.valueOf(b1).compareTo(b2); В Вашем случае: Collections.sort(MyList, new Comparator() { @Override public int compare(MyModel o1, MyModel o2) { return Boolean.valueOf(o1.isDeleted()).compareTo(o2.isDeleted()); } }); Или же можно написать свою реализацию сравнения, так как в данном случае это довольно просто.

Ответ 2



Collections.sort(MyList, new Comparator() { @Override public int compare(MyModel o1, MyModel o2) { return (o1.isDeleted() == o2.isDeleted()) ? 0 : (o1.isDeleted() ? 1 : -1); } });

Какой пинг считается большим? 200-300, это много для сервинга в интернете?

#хостинг #ping #icmp


Здравствуйте. Хостинг находится в США, ping из России согласно тестам 200-300ms.
Следует ли переносить сайт на хостинг в Россию?

Сайт: Wordpress + форум bbPress 
Хостинг в США Namecheap

Выскажитесь те кто сидит в Москве и администрирует сервера в США.

Вопрос: является ли критичным пинг в 200-300 мс для пользователей из России? И следует
ли вложить деньги и перенести сайт на хостинг в Москву?
    


Ответы

Ответ 1



Согласно Google Pagespeed Insights время загрузки страницы должно быть в пределах до 0.2s (т.е. 200ms). Это учитывается при прохождении гуглоботом по вашему сайту при индексировании. Да и Яндекс тоже на этот параметр смотрит, т.к. время загрузки страницы влияет на "восприятие" вашего сайта. Однако, при работе сайта, когда вы отправляете запрос "получить страницу", эта страница должна еще и сформироваться, т.е. запрос должен быть обработан сервером - а это еще некоторое время. А у вас только на передачу запросов и получение ответа будет тратиться минимум 200-300ms. Так что время загрузки страницы будет куда больше. С другой стороны, гуглобот скорее всего будет этот сайт обходить с серверов в Америке (если регион сайта не указан "Россия"), Яндекс же - нет. Следовательно, для продвижения - этот параметр будет очень критичен. С другой стороны, если вы не собираетесь продвигать этот сайт или же основная масса посетителей будет из Америки, тогда можно оставить там. Если же сайт ориентирован на Россию - то тогда хостинг желательно в России. Ну или хотя бы в Европе. С другой стороны, вступил в силу закон, по которому если сайт хранит какую-либо информацию о Российских гражданах (а это имя, телефон и тому подобное, что как раз можно указать на любом форуме), то информация должна храниться на серверах, расположенных в РФ. Иначе может грозить крупный штраф. Такие штрафы обычно ставятся не по факту самого нарушения, а за каждого человека, которого касается это нарушение. Т.е. пропорционально количеству человек, оставивших на сайте информацию о себе. P.S.: Данный закон касается только резидентов РФ, подробнее - в разделе "Трансграничность"

Ответ 2



Пусть страница у вашего пользователя начнёт загружаться через эти 200-300 мс. Если у вас сайт из статического HTML без картинок и https, то уменьшив RTT, вы увеличите скорость открытия сайта на идеальном соединении у идеального пользователя (забудем что RTT ограничивает полосу пропускания TCP). Теперь вспомним что сайт у вас, скорее всего, динамический, на https, с кучей разного JS и картинок... Всё это вместе запросто может съесть секунду-другую на загрузку и подготовку к отображению вашей страницы в браузере. Гость сайта вашего не обязательно заходит с идеального соединения. Это всё к тому что RTT не обязательно так важен, как может показаться. Оптимизация других частей сайта может принести много больше пользы, чем перенос сервера на более близкую к пользователю площадку. От теоретических изысканий перейдём к практике. Рассмотрим сайт автора этого ответа, который живет на момент написания ответа на японском сервере с RTT из Европы в районе тех самых 200 мс. Сайт из статического HTML, значит у вас будет хуже. Для иллюстрации на момент тестирования на сервере был отключен OCSP stapling. WebPagetest показывает нам на понятном графике что DNS запросы заняли 327 мс, установка соединения предсказуемо заняла порядка одного RTT, а проверка SSL сертификата заняла целых две трети секунды. (Включение OCSP stapling сокращает время на проверку сертификата примерно в два раза.) О чём это нам говорит? Не так страшен RTT как его малюют. Смотрите на что на самом деле тратится время при открытии страниц сайта. Очень может быть что уменьшение RTT в два раза не ускорит открытие страниц в те же два раза.

Ответ 3



Если аудитория сайта в России, стоит перенести в Европу. Стоит ли переносить Россию - вопрос, конечно, очень спорный по понятным причинам (правило №1 из "9,5 правил ведения безопасного IT-бизнеса в России" гласит: Держите серверы за границей). Если Вас устраивает Россия в качестве юрисдикции для ваших серверов - переносите в Россию. Если аудитория и там, и там, желательно быть и там, и там. P.S.: проблема с законом об обработке персональных данных, конечно же, не решится, если сервера переедут не в Россию. Но раз они и так в США, то, по всей видимости, это не проблема для автора вопроса.

Как сделать горизонтальную прокрутку на сайте?

#javascript #jquery #slickjs #owl_carousel #mootools


С помощью чего можно реализовать горизонтальную прокрутку, как на этом сайте?

https://www.adveris.fr/voeux2015/
    


Ответы

Ответ 1



На нативном js примерно так function scrollHorizontally(e) { //включает горизонтальный скрол элемента колесом e = window.event || e; var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); //это шаг колеса для разных браузеров document.documentElement.scrollLeft -= (delta * 40); //прокручиваем всю страницу e.preventDefault(); }; function addMouseWell(elem, callback) { //вешает кроссплатформенный обработчик на колесо мыши над элементом if (elem.addEventListener) { if ('onwheel' in document) { elem.addEventListener("wheel", callback); } else if ('onmousewheel' in document) { elem.addEventListener("mousewheel", callback); } else { elem.addEventListener("MozMousePixelScroll", callback); } } else { elem.attachEvent("onmousewheel", callback); } } addMouseWell(window, scrollHorizontally); body { overflow:hidden; max-width:100%; } #wide { width:3000px; }
Очень широкий контейнер. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quibusdam sit libero beatae vitae placeat, culpa similique, at fugit est eum distinctio cupiditate asperiores! Laborum, porro, exercitationem! Veritatis ea quisquam repudiandae. Deserunt unde iste placeat eaque. Error adipisci temporibus neque inventore ratione dicta quasi, ipsa corrupti alias distinctio nam quibusdam magni cumque, rem possimus officiis optio laudantium minima amet soluta eligendi. Quis, earum. Vitae eum cupiditate consequatur pariatur quis voluptatibus, dignissimos nam recusandae voluptatem repellendus exercitationem excepturi fugiat, obcaecati nostrum libero quaerat. Magni dolorem, deleniti tempore quas similique distinctio quam animi. Fugit nihil dolor dolores eos quidem quas, culpa fugiat amet expedita consectetur provident corporis blanditiis obcaecati tempora eum, repellendus quam! Aliquam quos pariatur, dignissimos dolor velit quo illum, fugit hic? Praesentium, aliquid id omnis nesciunt alias deleniti obcaecati ipsa doloremque itaque harum earum assumenda, fuga quisquam quia voluptate necessitatibus consequatur soluta maxime. Fuga quas autem debitis earum dicta repellendus illum.


Ответ 2



$(function () { $('.slider').slick({ arrows: false }); $('.slider').mousewheel(function (e) { if (e.deltaY !== 1) { $('.slider').slick('slickNext'); } else { $('.slider').slick('slickPrev'); } e.preventDefault(); }); }); body { margin: 0; } .slider { width: 100vw; height: 100vh; } .slick-list, .slick-track { width: 100%; height: 100%; } .slider__item { width: 100%; height: 100%; background-color: #ccc; } .slider__item span { margin: auto; height: 100%; font-family: sans-serif; font-size: 32px; align-items: center; justify-content: center; display: flex; }
1
2
3
4


Замена значений 2-х переменных

#java


Подскажите, пожалуйста. Как заставить это работать? 

public static void main(String[] args) {
  int a = 0;
  int b = 3;
  swap(a, b);
}

public static void swap (int x, int y){
  int tmp = x;
  x = y;
  y = tmp;
}

    


Ответы

Ответ 1



Примитивы передаются не по ссылке. В вашем коде меняются лишь локальные копии на стеке в методе swap. Можно завернуть во что-то. Часто делают так: public class IntRef { public int value; public IntRef (int val) { value = val; } } Тогда ваш код будет таким: public static void main(String[] args) { IntRef a = new IntRef(0); IntRef b = new IntRef(3); swap(a,b); } public static void swap (IntRef x, IntRef y){ int tmp = x.value; x.value = y.value; y.value = tmp; }

Ответ 2



В джаве нет передачи переменных по ссылке, поэтому сделать swap двух переменных невозможно. Можно менять поля у объектов, но получается, что вместо двух переменных нужно иметь 2 поля (2 поля у одного объекта, либо по 1 полю у двух объектов), но это явно не то, что имело бы смыл делать.

Как использовать free в качестве deleter'а?

#cpp


У меня есть примерно такой код:

std::unique_ptr information(malloc(arr_size),&free);


Но компилятор кидает исключение:

error: no matching function for call to ‘std::unique_ptr::unique_ptr(void*, void (*)(void*) throw ())’
std::unique_ptrinformation(malloc(arr_size),&free);


Скажите, пожалуйста, почему происходит эта ошибка, и как её исправить?
    


Ответы

Ответ 1



В С++11 соответствующие конструкторы принимали первый параметр типа std::unique_ptr<>::pointer. В вашем случае это char *. Эти конструкторы не будут вызываемыми и в С++11 по той причине, что в С++ результат malloc типа void * не может быть неявно приведен к типу char *. Начиная с C++17 спецификация несколько поменялась, но суть осталась той же. Соответствующие конструкторы std::unique_ptr являются шаблонными template explicit unique_ptr( U p ) noexcept; template unique_ptr( U p, /* ... */ d ) noexcept; но согласно http://en.cppreference.com/w/cpp/memory/unique_ptr/unique_ptr, эти конструкторы участвуют в overload resolution только в том случае, если выполняется одно из условий Тип U совпадает с std::unique_ptr<>::pointer Тип U - это std::nullptr_t (еще одно условие, котрое не относится к делу) В вашем случае std::unique_ptr<>::pointer - это char *, а U будет дедуцировано как void *, что не соответствует ни одному из этих условий. Именно поэтому компилятор сообщает вам, что в данном случае нет подходящей функции для вызова. Если же явно привести первый аргумент к char *, то код должен скомпилироваться std::unique_ptr information((char *) malloc(arr_size), &free);

Ответ 2



Сделайте явное преобразование в нужный тип любым удобным образом: std::unique_ptr information ((char*)malloc(arr_size), free);

Как правильно сверстать звезды рейтинга с помощью css?

#javascript #html #css #вёрстка


Идея такая: есть 5 звездочек в выборе отеля(выведены в линию). Нужно отрисовать так,
чтобы при наведении на отдельную половинку она закрашивалась (и закрашивались все предыдущие
звездочки), а при клике остались закрашеные. Как это реализовать?

Вот код:



input.rollover_star_left {
  border: 0;
  background: url(http://i.piccy.info/i9/acf4293564d7a31bcefbbd1d0f7cfb50/1508744962/665/1188837/star_left.png);
  width: 9px;
  height: 17px;
  opacity: 1;
  margin-left: 0%;
  padding: 0%;
  position: relative;
}

input.rollover_star_right {
  border: 0;
  background: url(http://i.piccy.info/i9/96647d92383f2c62285a388ac4250516/1508745513/665/1188837/star_right.png);
  width: 9px;
  height: 17px;
  opacity: 1;
  margin-left: 0%;
  padding: 0%;
  position: relative;
}

input.rollover_star_right:hover {
  background: url(http://i.piccy.info/i9/caabcb81d9900bd6b972db8253ea49fc/1508746359/647/1188837/white_star_right.png);
  transition: all 0.25s ease-in-out;
}

input.rollover_star_left:hover {
  background: url(http://i.piccy.info/i9/2e385a77c4916b4c9e1e5d29d8bedb1b/1508746351/647/1188837/white_star_left.png);
  transition: all 0.25s ease-in-out;
}





    


Ответы

Ответ 1



В сети полно примеров, вот например один из них: .rating-wrapper { overflow: hidden; display: inline-block; } .rating-input { position: absolute; left: 0; top: -50px; } .rating-star:hover, .rating-star:hover~.rating-star { background-position: 0 0; } .rating-wrapper:hover .rating-star:hover, .rating-wrapper:hover .rating-star:hover~.rating-star, .rating-input:checked~.rating-star { background-position: 0 0; } .rating-star, .rating-wrapper:hover .rating-star { float: right; display: block; width: 16px; height: 16px; background: url('http://css-stars.com/wp-content/uploads/2013/12/stars.png') 0 -16px; } @media screen and (min-device-width: 320px) and (max-device-width: 640px) { .responsive-ad { display: none; text-align: center; } .responsive-ad-device { display: block; } } @media screen and (min-device-width: 960px) { .responsive-ad-device { display: none; } .responsive-ad { display: block; text-align: center; } }