• Подводные камни WebDav #2

    В продолжение темы "Подводные камни WebDav". Скрипт подключения работает, и как бы все нормально, но раздражает 2 вещи:

    1. При работе скрипта открывается несколько дополнительных окошек, которые мозолят глаза
    2. После монтирования диска он виден в консоли и в Far manager, но в проводнике появляется примерно через минуту

    Первый вопрос решился так:

    start "" powershell -command "&{start-process -filepath C:autoloadWC_register.cmd -windowstyle hidden -verb RunAs}" %*

    Теперь новые окошки запускаются в свернутом виде и не мешают работе.

    Для решения второго вопроса придумал пока только один вариант - перезапускать службу explorer. На секунду пропадает панель задач, но других вариантов я, к сожалению, пока не вижу.

    taskkill /F /IM explorer.exe
    start explorer

    P.S. Визивиг опять похерил обратный слэш. Путь к файлу надо поправить.



  • Подводные камни WebDav

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

    Возникла следующая проблема - одной из полезных функций сервера является то, что облачную папку можно подключить по WebDav, как сетевой диск. И тут проблем как бы нет, но Windows (в моем случае, 10) после перезагрузки не подключает диск автоматически. Я не глубокий специалист в этом, но тем не менее заметил несколько моментов:

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

    В общем, встала задача написать скрипт, который будет помещен в автозагрузку. При включении компьютера он будет мониторить состояние сети, и когда хост nextcloud станет пинговаться, подключит сетевой диск и перезапустит службу WebClient.

    Одним файлом сделать пока не получилось, и вот почему: 

    • когда мы размонтируем или монтируем диск, эта команда должна выполняться от имени обычного пользователя. Если выполнить ее, как администратор, то пользователь этот диск не увидит
    • перезапуск службы, напротив, должен запускаться с правами админа, так же как и работа с реестром (именно так я собирался добавлять скрипт в автозагрузку)

    Файл connect.cmd, который будет добавляться в автозагрузку:

    @echo off
    net use Y: /delete
    start "" powershell -command "&{start-process -filepath C:autoloadWC_register.cmd -verb RunAs}" %*
    :LOOP
    ping -n 1 mynextcloudhost.ru | find "TTL=" >nul
    if errorlevel 1 (
    ping 127.0.0.1 -n 10 > nul & goto LOOP
    ) else (
    start "" powershell -command "&{start-process -filepath C:autoloadWC_restart.cmd -verb RunAs}" %* & goto connect
    )
    :connect
    Set Login=User121
    Set Password=jkhe3re#
    net use Y: https://mynextcloudhost.ru/remote.php/dav/files/%Login% /user:%Login% %Password% /persistent:no
    if errorlevel 1 ping 127.0.0.1 -n 10 > nul & goto connect

    Да, я захардкодил путь к скрипту, и это нехорошо. Но это я добавил в список дел, с которыми буду разбираться потом.

    В самом начале демонтируется том Y, если он подключен. Запускается скрипт WC_register.cmd, в котором я сделал проверку, есть ли наш скрипт в автозагрузке. Если нет, добавляем в реестр нужную запись. Скрипт запускается с правами администратора.

    Файл WC_register.cmd:

    @echo off
    For /F "tokens=1" %%a in (′reg query "HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun" /v "Netcloud"′) do set regpath=%%a
    If DEFINED regpath ( exit ) Else (
    reg add "HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun" /v Netcloud /t REG_SZ /d "C:autoloadconnect.cmd"
    )
    exit

    Потом мы в цикле пингуем наш хост, пока не добьемся успеха. В этом случае мы вызываем (опять же с правами админа) скрипт WC_restart.cmd, который перезапускает WebClient и передаем выполнение скрипта подпрограмме connect.

    Файл WC_restart.cmd:

    @echo off
    net stop webclient
    net start webclient
    exit

    Потом заново монтируется сетевой диск на томе Y.

    Вот, в принципе, и все. Скрипт работает, и это сейчас самое главное. Немного раздражает, что после перезагрузки компа всплывают prompt-окошки. Это надо будет "допилить" потом. Еще в планах сделать скрипт универсальным, поскольку пользователей много, а хардкодить имя и пароль, а также путь к скрипту - не комильфо. Короче, пока так, а потом буду доделывать.

    P.S. Визивиг режет обратный слэш ( Внимательней с урлами и путем к реестру.



  • С Хабра: Разрабы работают медленно и дорого — и люди считают нас лентяями. Просто в разработке всё сложно

    Взято отсюда.

    — Люди не из индустрии вечно не понимают программистов: что они там такое сложное делают, если видно только две кнопки? Что за непонятные слова говорят? Почему так много получают?

    Вместе с парнями из подкаста «Мы обречены» решили с этим разобраться и запустили совместную рубрику, где будем объяснять, почему в разработке всё так сложно. А для тех, кто любит читать, а не слушать, парни написали эту статью.

    Знаете такое чувство, когда вдруг понял, что работаешь уже целый год, хотя идея проекта была простой? Вас пять разработчиков, четыре тестера, проджект и продакт-менеджеры. Ты смотришь на получившееся ПО, и думаешь — ну что мы могли так долго делать? Пять основных фич, три десятка маленьких — нормальному инженеру на неделю работы.

    Я часто ловлю себя на таком. Но дальше происходит одно и то же. Начинаю разматывать это в голове, вспоминать, какая работа была проделана. Какие нюансы есть в процессе, который мы тут автоматизируем. Какие, казалось бы, нерешаемые проблемы мы разрулили. И чем больше думаю, тем больше убеждаюсь — да то, что мы вообще дошли до этого этапа, это уже небольшое чудо.

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

    Нам всем приходится работать с не-инженерами, для них вся сложность существует только на наших словах — другого способа осознать её у них просто нет. И, конечно же, нам вечно не верят. Как будто нам не хватает собственного синдрома самозванца?!

    Я много раз пытался доносить, насколько сложна каждая мелочь в нашей работе, но в большинстве случаев терпел неудачу. Поэтому стал просто отшучиваться.

    — Почему ты всегда всё делаешь в два раза дольше, чем обещаешь?

    — Потому что создатели Agile не верят, что можно делать что-то больше недели. Вот и говорю, во что поверят.

    А если серьёзно: детали не видны изначально, всегда кажется, что сделать надо немного, и получится быстро. Уже в процессе работы натыкаешься на кучу нюансов, иногда, пока делаешь задачу, требования меняются. Пока работаешь ты — над тем же проектом работают ещё пять человек, и часто их изменения означают дополнительную работу для тебя.

    Бывает, что в процессе работы вообще понимаешь — задачу выполнить невозможно. Но самая жесть в том, что очень часто ты понимаешь — работы над задачей вагон, но если скажешь это менеджеру, он будет требовать, чтобы ты объяснил ему, почему. А это ещё одна гигантская задача — объяснить так, чтобы было понятно и не выглядело, как отмазка.

    Продолжение - под катом.



  • Отключение сетевого диска, подключенного по WebDAV

    Бывает иногда такая проблема.. В общем-то, это даже не только для WebDAV, а, думаю, для всех сетевых подключений с авторизацией. Один раз залогинились - поставили галочку "сохранить пароль" - и все, при следующем создании ссылки на ресурс будет логиниться с той же учетки. Как сбросить?

    Заходим в панель управления, ищем "Диспетчер учетных данных" -> "Учетные данные Windows" -> ищем и удаляем сохраненные данные.

    Не забыть перезагрузить винду.



  • Как определить местоположение пользователя, не спрашивая разрешение на геолокацию?

    Конечно, самый удобный способ узнать, где торчит пользователь, использовать свойство navigator.geolocation. Правда, при этом браузер обязательно спросит его разрешения. Лично я почти всегда отказываюсь, только если зашел на проверенные сайты строительных супермаркетов или дискаунтеров типа Ситилинк. Значит, этот способ будет работать с малой эффективностью - данное окошко вызывает подозрение, и, впрочем, оно подозрительное и есть. Как избавиться?

    1. Нельзя, это часть интерфейса браузера.
    2. Попап выводится в тот момент, когда вы из своего кода вызываете Geolocation.getCurrentPosition() или Geolocation.watchPosition(), если данная страница еще не получила разрешение/отказ.
    3. 3. В вышеупомянутые методы вы передаете два коллбека, на успех и на ошибку. Определить, какую кнопку юзер нажал можно только косвенно исходя из результата.
    4. Дело в том, что спецификация определяет только API, доступное программисту из JS, а как это выглядит со стороны пользователя - личные фантазии браузерописателей. Где-то попап, где-то галочки в настройках, где-то надо с бубном сплясать. Поэтому никаких гарантий про кнопки дать нельзя.
    5. Если navigator.geolocation является false, значит у пользователя не поддерживается геолокация (например, старый браузер или еще что-то).

    Так что делать?? Неужели все-таки придется напрягать пользователя окошком подтверждения? Есть еще один вариант.

    API Yandex Maps позволяет определять координаты пользователя, используя свои сервисы. Код довольно простой. Подключаем Yandex Api со своим ключом, и пишем в коде:

    var location = ymaps.geolocation.get();

    // Асинхронная обработка ответа.
    location.then( function(result) {
    // Добавление местоположения на карту.
    myMap.geoObjects.add(result.geoObjects)
    }, function(err) {
    console.log(′Ошибка: ′ + err)
    } );

    В свойстве result.geoObjects.position - координаты местонахождения пользователя.

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

    P.S. Практика показала, что это все полная херня. Точности никакой. А иногда Яндекс может "зашвырнуть" пользователя из Самарской области в Казахстан...





  • Восстановление сайта

    К большому сожалению, сервер, где находился сайт, теперь не существует. Никаких бекапов получить тоже не удалось. Пришлось покупать другой хостинг. Теперь по кусочкам восстанавливаю то, что было, из того, что осталось на компе и частично из вебархива. Надеюсь, за пару недель приведу сайт в надлежащий вид.



  • Как определить, что клиент зашел на сайт через браузер iPhone?

    searching on the net there are two common ways of achieving this. My favorite though is in PHP its just so clean? wow. :D

    In PHP you can write

    <?php function isIphone($user_agent=NULL) { if(!isset($user_agent)) { $user_agent = isset($_SERVER[′HTTP_USER_AGENT′]) ? $_SERVER[′HTTP_USER_AGENT′] : ′′; } return (strpos($user_agent, ′iPhone′) !== FALSE); } if(isIphone()) { header(′Location: http://www.yourwebsite.com/phone′); exit(); } // ...THE REST OF YOUR CODE HERE ?>

    and in javascript you can write

    var agent = navigator.userAgent; var isIphone = ((agent.indexOf(′iPhone′) != -1) || (agent.indexOf(′iPod′) != -1)) ; if (isIphone) { window.location.href = ′http://www.yourwebsite.com/phone′; }



Загрузка...

Войти на сайт

Регистрация