Ноутбук Surface Book 2 не переподключается автоматически к некоторым беспроводным сетям. Возможно, этой же проблеме подвержены другие ноутбуки и планшеты Surface с беспроводным адаптером Marvell Avastar.
Как это выглядит: я прихожу в офис, включаю ноутбук (он выходит из гибернации), но он не подключается к известной ему беспроводной сети — её при этом или нет в списке сетей, или она есть, но подключиться к сети, если по ней кликнуть, он не может.
Открыть Device Manager, найти устройство Marvell AVASTAR Wireless-AC Network Controller
, в контекстом меню нажать Disable device, потом Enable device. После этого ноутбук подключится к сети.
Чтобы не открывать каждый раз Device Manager, можно сделать PowerShell-скрипт и запускать его в один клик.
Выяснение InstanceId. Сначала потребуется выяснить InstanceId адаптера на ноутбуке. Для этого запускаем PowerShell и вводим команду Get-PnpDevice
:
PS C:\Users\helgi> Get-PnpDevice -FriendlyName "*Marvell*Wireless*" | ft -wrap -autosize friendlyname, instanceid FriendlyName InstanceId ~~~~~~~~~~~~ ~~~~~~~~~~ Marvell AVASTAR Wireless-AC Network Controller PCI\VEN_11AB&DEV_2B38&SUBSYS_045E0009&REV_00\4&32FA7CC7&0&00E0
Точное название адаптера можно посмотреть в Device Manager.
Скрипт. Создаем где-нибудь в удобном месте (например, в C:\scripts
) файл Restart-Marvell.ps1:
# # Disable, then enable Marvell AVASTAR Wireless-AC Network Controller # Disable-PnpDevice -InstanceId "PCI\VEN_11AB&DEV_2B38&SUBSYS_045E0009&REV_00\4&32FA7CC7&0&00E0" -confirm:$false Write-Host 'Adapter disabled' sleep 1 Enable-PnpDevice -InstanceId "PCI\VEN_11AB&DEV_2B38&SUBSYS_045E0009&REV_00\4&32FA7CC7&0&00E0" -confirm:$false Write-Host 'Adapter enabled' sleep 1 Write-Host -NoNewLine 'Press any key to continue...' $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
InstanceId в скрипте (PCI\VEN_11AB&DEV_2B38&SUBSYS_045E0009&REV_00\4&32FA7CC7&0&00E0
) заменяем на тот, который был получен при помощи команды Get-PnpDevice
.
Ярлык для быстрого запуска. Создаем в удобном месте (на Рабочем столе или в папке Quick Launch) ярлык на PowerShell.exe, в поле Target в окне свойств прописываем:
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe C:\scripts\Restart-Marvell.ps1
Там же нажимаем Advanced и ставим галку Run as Administrator — без этого не получится остановить и запустить адаптер и будут сыпаться ошибки. То же будет и при простой попытке запустить сам файл скрипта.
Готово. Теперь вместо кликов в Device Manager можно запустить этот ярлык, подтвердить запуск от имени администратора и нажать любую клавишу, когда скрипт отработает.
Тэги: powershell, surface, советы
Написать комментарий
Джефф Этвуд убеждает, что всем подряд учиться программировать не надо. Он сравнивает работу программиста с работой сантехника: важная профессия, но именно профессия, а не что-то, что должен освоить каждый.
Очень хочется объяснить это элитизмом и желанием оградить узкий кружок посвящённых от вторжения новичков, но, думаю, Этвуд на самом деле верит в то, что говорит: в отличие от математики и умения связно излагать свои мысли, программирование нужно не всем.
В комментариях защищают программистский образ мысли как полезный самому широкому кругу. Получается такой девиз: программистом можешь ты не быть, но понимать, что такое алгоритм и структура данных, ты обязан.
Хотя я полностью согласен с Этвудом в том, что скрипт-кидди, прочитавшие книгу «Освой самостоятельно за 24 часа», и на основании этого считающие себя программистами, принесли миру вреда больше, чем пользы, у этой медали есть и другая сторона.
Она заключается в том, что опытные, профессиональные люди, прекрасно разбирающиеся в своей области, сидят перед компьютером и выполняют рутинные, однообразные операции. Они не могут помыслить о том, что в «ворде» есть макросы, или просто боятся их.
Тотальное выпиливание из винды средств разработки даже простейших скриптов привело к тому, что люди сплошь и рядом отправляются выполнять работу машины.
Разумеется, решение не в том, чтобы вернуть в винду QBASIC. Но как в конце восьмидесятых — начале девяностых QBASIC (плюс немного пакетных файлов) был приемлем как средство автоматизации, так и сейчас есть подходящие средства, хотя бы вордовские макросы или, ещё лучше, маковский «автоматор».
Тезис «программирование — вторая грамотность», по-моему, остаётся верным и сейчас.
Тэги: программирование, ссылки
Написать комментарий
Вот такой фрагмент кода на C#:
var c = CultureInfo.GetCultureInfo("hsb"); var dt = new DateTime(2011, 2, 20, 15, 30, 0); var fmt = dt.ToString("g", c); DateTime pdt; if (!DateTime.TryParse(fmt, c, DateTimeStyles.AllowWhiteSpaces, out pdt)) Console.WriteLine("failed");
напечатает failed
только для следующих культур: hsb
, hsb-DE
, dsb
и dsb-DE
. В fmt
оказывается строчка 20. 2. 2011 15.30 hodź.
для hsb
или 20. 2. 2011 15.30 goź.
для dsb
.
Для всех остальных культур дотнет успешно парсит им же самим сформированную строку.
Да, hsb
и dsb
— это верхнелужицкий и нижнелужицкий языки.
Тэги: c#, wtf, работа, язык
Написать комментарий
Месяц назад случился очередной переезд, правда, недалеко: из Новогиреева в Перово. Смешно, но я, кажется, привыкаю: по крайней мере последние два переезда были не такими и болезненными.
Для новой квартиры пришлось собрать некоторое количество икеевской мебели. Так вот, коллеги программисты, икеевские инструкции — всем нам образец.
Вне зависимости от того, что мы делаем: «коробочную» программу, информационную систему для «операторов» или внутренную автоматизацию для своих же, — всегда, абсолютно всегда идеальную программу портят пользователи. Даже если пользователи — это мы же.
И получается так, что совершенство системы (внутреннее или внешнее) никем не оценено и бесполезно, если пользователи не могут ей, эм, пользоваться. Приходится им помогать, отвлекаясь от увлекательных технических деталей и переключаясь на такие скучные, унылые вещи как эргономика (= простота пользования) и инструкции по эксплуатации.
А «Икея» нашла способ сократить свои расходы, предлагая покупателям самим собирать столы и стулья. То есть перевернула всё с ног на голову: сделала процесс сборки простым, в том числе благодаря качественным инструкциям. Плюс каждый человек, вкрутивший три самореза по этой инструкции, теперь может считать себя крутым сборщиком мебели.
Нам, программистам, тоже надо бы так.
Редакция от 23 февраля 2012
Тэги: всё равно что пожар, программирование
Написать комментарий
Если появляется необходимость настроить трак с исключительно русским интерфейсом, то, помимо самого интерфейса, хочется получить и русскоязычную справку. Несмотря на то, что худо-бедно часть справки по траку на русский переведена, в дистрибутив она не входит.
Чтобы не заменять страницы справки на переведённые по одной, можно воспользоваться таким shell-скриптом:
#!/bin/sh env=/path/to/trac/env for page in `trac-admin $env wiki list | tail -n +4 | cut -f1 -d' '` do wget http://trac.edgewall.org/wiki/TranslationRu/${page}?format=txt \ -O $page -o /dev/null if [ "`stat -c %s $page`" -ne "0" ] then trac-admin $env wiki import $page $page echo $page downloaded fi done
Укажите в переменной env
путь к окружению трака и запустите скрипт в каталоге, куда у текущего пользователя есть право записи, лучше в пустом (чистить каталог от скачанных страниц придётся вручную).
Тэги: sh, trac
Написать комментарий
Я тут внезапно сообразил, что за всю жизнь на разу не писал квайна. Поэтому сел и написал вот такой вот на питоне:
CODE = """ import sys out = sys.stdout.write out('CODE = ""' '"' + CODE + '"' + '""') out(CODE) """ import sys out = sys.stdout.write out('CODE = ""' '"' + CODE + '"' + '""') out(CODE)
Он дубовый (можно найти поинтереснее), но честный, без использования repr
или исходного кода.
Тэги: python
Комментарии (2)
Допустим, вы хотите почитать на досуге, скажем, в метро, комикс The Order of the Stick. Для этого нужно выкачать его целиком. Что вы предпочтёте — короткий скрипт на любимом языке или wget -r -A=gif
?
Я выбрал скрипт на питоне, вышло 30 строчек.
from urllib import urlopen, urlretrieve from os.path import exists from os import rename import re
urlt = "http://www.giantitp.com/comics/oots%04d.html" regexp = r'<IMG src=\"(\/comics\/images\/\w+.gif)"'
for i in range(1, 740): print "%4d =>" % i, outf = "%04d.gif" % i if exists(outf): print "already downloaded" continue pageurl = urlt % i h = urlopen(pageurl) data = h.read() mo = re.search(regexp, data) if not mo: print "can't find gif in page" continue imgurl = "http://www.giantitp.com" + mo.group(1) print imgurl, urlretrieve(imgurl, "temp.file") rename("temp.file", outf) print "- saved to", outf
Тэги: python
Написать комментарий
Симптомы такие: в «студии» при нажатии Ctrl+C в буфер ничего не копируется, так что нажатие Ctrl+V ничего не вставляет. То же самое и Ctrl+X: текст из редактора исчезает, но в буфере ничего нет, приходится отменять.
Microsoft Connect предлагает выключить расшаривание буфера обмена в RDC, во всех видах. Я закрыл два подключённых RDC, и мне действительно помогло.
В питоне начиная с версии 2.5 появилась тернарная операция с синтаксисом true_value if condition else false_value
. Синтаксис немного непривычный, да и по разным причинам иногда приходится писать так, чтобы работало и на версии 2.4.
А вот сейчас, читая исходники плагина MasterTickets к траку, я увидел отличную замену тернарной операции: condition and true_value or false_value
. Как я сам не додумался до такой простой вещи?
Порядок операндов ?:
сохранён, да и логика вполне прозрачна.
eSyr обратил моё внимание вот на что: если true_value
вычислится в ложное значение (0, пустая строка, пустой список), то в итоге выражение вычислится в false_value
.
Так что это удобный хак, но не более.
Редакция от 12 февраля 2010
Тэги: python, trac
Написать комментарий