Archive for the ‘Программизм’ Category

Ещё способ переключения раскладки капслоком

Когда-то давно я писал о том, как прекрасно переключать раскладку капслоком и презентовал спецсофтину, написанную [info]Диким, служащую этой благородной цели.

Недавно я перешёл на Windows 7 и задался вопросом, работает ли та софтина под этой операционной системой.  Естественно, ставить было софтину влом, поэтому вначале я спросил у [info]ДикМакса же работает ли прилага под семёркой. Естественно, ответа я не получил (нечего было спрашивать такой вопрос у линуксоида). Но! Дикий мне посоветовал мегатулзу под названием lswitch. Проверил — работает (под семёркой в том числе), и даже во многих аспектах прекрасней чем Capslock Keyboard Switcher, который я использовал до этого. Качаем здесь.

Спасибо Максу ещё раз, за то что совратил меня на капслочество. Это восхитительно.

Вдогонку про идею

Та проблема в IntelliJ IDEA, о которой я писал месяц назад, оказывается была пофикшена практически через день. JetBrains, малаццы.

Луч любви в сторону VS2010

Ситуация такая. Есть сишарповый проект (интересный проект, если вы понимаете о чём я). В файловой системе в исходниках этого проекта есть пустая папка. В csproj-файле её нету. Задача — добавить эту папку в проект.

В контекстном меню пункт Add -> Existing item не позволяет добавлять папки, только файлы. Пункт Add -> New folder, естественно, не даёт создать папку с нужным именем, потому что она уже есть.

НЕНАВИСТЬ.

Про один эксепшн

Речь пойдёт о джаве и двух чудесных IDE — eclipse и IntelliJ IDEA. Тестировалось всё в самых последних на момент написания статьи версиях этих программ под windows xp и какой-то там убунтой (десятой, чтоли).

Внимание, загадка! Что означает это сообщение об ошибке, выдаваемое идеей при попытке запуска программы (программа простенькая, четыре строчки):

Exception in thread "main" java.lang.NullPointerException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

Ответ — дальше. Читаем дальше

MsTest: CollectionAssert и HashSet

Печально, но дотнетовский System.Collections.Generic.HashSet<T> не имплементит System.Collections.ICollection. Из-за этого МС-овский же Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEquivalent() безбожно не компилирутеся.

var hashSet = new HashSet();
CollectionAssert.AreEquivalent(new string[]{}, hashSet);

Error 125 The best overloaded method match for 'Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEquivalent(System.Collections.ICollection, System.Collections.ICollection)' has some invalid arguments.

Вот такая хрень компилируется, но, что неудивительно, падает при попытке привести хэшсет к ICollection. Это ещё печальнее:

var hashSet = new HashSet();
CollectionAssert.AreEquivalent(new string[]{}, (ICollection)hashSet);

System.InvalidCastException: Unable to cast object of type 'System.Collections.Generic.HashSet`1[System.String]' to type 'System.Collections.ICollection'.
Вот такая ерунда работает ок, но выглядит как костыль (собственно, им и является):

var hashSet = new HashSet();
CollectionAssert.AreEquivalent(new string[]{}, new List<string>(hashSet));

Приходится писать свой хелпер.

Мир несовершенен, друзья. Любите его, чините его, и он будет лучше.

Хочется странного

Недавно захотелось, чтобы в командную строку чёрного властелина тотального командира или же просто любую другую командную строку можно было вбить, например, такое:

c:\>g как готовить черепах

и в браузере открывалась соответствующая страница гуглопоиска. Такая вот бесполезная фича.

Сделать это очень просто. Правильно, однако, сделать — гораздо сложнее, но овчинка выделки не стоит. В общем, создаём где-нить в PATHe (кстати, про PATH) скрипт g.cmd c примерно таким содержанием:

start "C:\Program Files\Opera\opera.exe" "http://www.google.com/search?q=%*"

Вот и готово. Понятно, что у Анонимуса путь к своему браузеру может отличаться. В расовых линуксах можно вообще писать просто firefox, например, без полного пути. Есть также косяк с тем, что запросы с кавычками работать не будут. Фиксить его нецелесообразно, впрочем, поэтому сойдёт и так.

GCJ 2009 R1 Advancers

По традиции публикую неофициальный список беларусов, участвующих в очередном раунде Google Code Jam. Полужирным выделены товарищи, прошедшие в R2. Читаем дальше

Google Code Jam 2009 Qualification Round

Только что принял участие в сабже. Результаты будут завтра. Задачки несложные. Кто хочет — можно присоединяться, потому что регистрация открыта будет ещё почти сутки.

UPD: Прошёл квал, решив все задачки. Первый раунд — на следующих выходных.

Товарищ [info]Антон подсказал остроумное решение первой задачи (Alien Language). Вкратце напомню её суть.

Дан набор слов языка и несколько шаблонов вида типа такого: abc(xy)d(gf). Буквы в скобках означают, что на месте этих скобок может быть любая из этих букв. То есть, шаблону выше удовлетворяют следующие слова: abcxdg, abcydg, abcxdf и abcydf. Необходимо найти для каждого из заданных шаблонов, сколько слов из словаря им соответствуют.

Задача при заданных там ограничениях решается в лоб. Самый крутой способ (который я узнал от Антона) — это преобразовать шаблон в регексп, заменив круглые скобки на квадратные :) Тогда задача решается буквально в пару строчек на руби путем проверки каждого слова словаря на соотвествие этому регекспу. Любуйтесь короче:

  l, d, n = gets.split(' ').map { |w| w.to_i }
  dictionary = Array.new(d) { |i| gets.chomp }
 
  1.upto(n) do |test_no|
    pattern = gets.chomp.gsub('(', '[').gsub(')', ']')
    regex = Regexp.new(pattern)
    count = dictionary.select { |word| regex =~ word }.size
    puts "Case ##{test_no}: #{count}"
  end

Duck Typing

Читая унылый хабр, наткнулся на забавный перевод термина Duck Typing — утипизация. А чё, остроумно.

Duck Typing

Тупой вопрос про буфер обмена

Можно ли в винде, например, скопать в буфер обмена пустую стоку? Чтобы при вставке вместо выделенного текста именно она невозбранно и вставлялась? А в этих ваших линуксах и прочих системах?

Если да, то как? Если нет, то почему?

« Older Entries
Офисная мебель: шкафы-купе и тумбы, диваны, кресла - мягкая мебель Одесса от производителя детские кроватки купить автомобиль