Saturday, June 30, 2007

Пару линок

Все мы любопытные, задаем правильные вопросы, получаем правильные ответы... Наткнулась сегодня на Answers.com — отличная буржуйская интернет-энциклопедия, где можно задать вопрос и получить ответ из какой-либо статьи. Почти Википедия, только еще с пользователем общается=)
И еще один сайтик, тот же вектор, только направление в другую сторону, уже русский (буржуйский такой тоже видела, но не помню+))) — Vorum.ru (видимо калька с немецкого "warum" — "почему"), неплохой аккуратненький вебдванольный, прости господи, вебсервис, абсолютно не раскрученный в рунете. Имхо зря=)

Tuesday, May 29, 2007

Getting real

Прочитала "Getting real" от 37signals, компании, создавшей RoR. Очень хорошая книжка про то, как хорошо оставаться маленьким и бедным и при этом писать хорошие программы. Про то, как их писать, с чего начинать и на что обращать внимание. Как сказал товарищ Phoebus, прочищает мозги, и при этом книжка короткая, ясная, в ней нет ничего лишнего. Getting real — это целая мини-философия, такая я бы сказала нехарактерная для запада и западной ментальности, но тем не менее появившаяся у них, и я за них рада=) В общем, читать (по-русски).

Wednesday, May 9, 2007

Укрощаем JTable

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

Итак, у меня есть таблица 9 на 9, ячейки квадратные и белые.

Мне нужно: выделить блоки 3 на 3 (верхний левый, правый, один центральный и два нижних по углам) каким-то образом. Я выбрала серый цвет.

Далее есть у меня объект JTable myJTable, чтобы разукрасить его как надо, надо повесить на колонки, из которых состоит таблица, рендерер для ячеек. По умолчанию у них стоит DefaultTableCellRenderer, поэтому чтобы получить свою разновидность, надо создать свой класс, наследующий от DefaultTableCellRenderer.

//вешаем рендерер

for (int j = 0; j < DIM2; j++) {
myJTable.getColumnModel().getColumn(j).setCellRenderer(
new YourTableCellRenderer());
}

int DIM = 3;
class YourTableCellRenderer extends DefaultTableCellRenderer {
//этот метод возвращает компонент -- рендерер для нашей ячейки, только уже модифицированный
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
Component c = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
c.setFont(new Font("Tahoma", Font.PLAIN, 30));
c.setForeground(Color.black);

//выделение блоков серым цветом
if (((row / DIM) * DIM + (column / DIM)) % 2 == 0) {
c.setBackground(Color.LIGHT_GRAY);
} else
c.setBackground(Color.white);
return c;
} }

Красота=) Таким же образом в этом методе можно ввести проверку какого-либо условия, и уже по нему делать с ячейкой что угодно.

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

Monday, April 23, 2007

В продолжение

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

Еще я не поняла, как здесь ставить метки. Тут есть куча возможностей для вставки тегов, но как добиться родной записи "labels"?+))

 

Blogger Tags:

Оффлайновые клиенты для блогов

Решила я, значит, заняться "кросспостингом", ибо некоторые мои посты, идущие в дайри.ру, можно было бы постить и в ЖЖ, или даже сюда, или наоборот, отсюда туда, и т.д. В поисках клиента который поддерживает и дайри, и ЖЖ, и Блоггер, я наткнулась на Windows Live Writer. Из-под него я сейчас и пишу.

Он умный, загрузил сам какие-то настройки, открыл мне любезно окошечко, пиши, мол. Ну что ж, попробуем...=)

 

Tuesday, March 13, 2007

Lost in translation.

Что бы там ни говорили насчет того, что на родном языке учиться легче, все-таки многие детали при переводе теряются настолько, что на английском если прочитать — будет понятно, а на русском — точно что-то упустишь. И то ли это трудности перевода, то ли невнимательность переводчиков...
Скоро начну смешивать в мыслях русские и английские понятия, особенно если это касается программирования. Больно английские хороши=) И потом, нативные названия дают хорошее интуитивное представление о возможном объекте или действии, даже если не знаешь, чего это такое.
А еще потихоньку проникаюсь истинным духом ООП. Молодец был тот, кто эту парадигму придумал. Просто слов нет, насколько молодец (и большой оригинал местами=)))...

Нитяное.

Читаю про потоки, никак не могу себя заставить согласовывать поток в мужском роде: для меня это она, Thread. То ли потому, что ее поведение не гарантировано после применения большинства методов (ох уж эти фемели...), то ли просто потому, что слово "поток" слишком заезженное (всяк может быть: и поток ввода-вывода, и поток выполнения), хоть по смыслу и подходит.
Можно было бы перевести Thread поромантичнее, как "нить" (да хоть бы и оставили инглишизм, "тред", и никто бы не путался), но поток-то конечно звучит солиднее.
А про себя пусть все равно будет она. Как-то приятнее=)

MalePerson IS-A FemaleThings?

Хорошая штука в Java — перечисления, особенно для хранения констант. Потому что когда пихаешь константы в интерфейс, а потом прилепливаешь к классу, может получиться бред с точки зрения того, что слово "implements" равносильно отношению "is-a":
interface FemaleThings { int MAX = 256; int MIN = -258 }

class MalePerson implements FemaleThings {
void doSth() {
}
}

Примерчик не особо наглядный, но в том же свинговском API такие вещи встречаются очень часто.

Sunday, March 11, 2007

Радость

Уф. Полдня возилась с судоками, в результате прикрутила прелоадер и сделала (алла-алла!!!) границы в таблице. Но какой ценой! Ужас. Нельзя так извращаться (вместо одной таблицы сделала 9, фиктивных), но по-другому у меня не получилось, да и времени заняло гораздо меньше, нежели когда я пыталась разобраться в устройстве JTable.
Вот. Ну, зато теперь красота=)) Осталось, в общем-то всего-ничего: сделать генерацию и доделать алгоритм под решение. Уф. Это с точки зрения алгоритма. А с точки зрения интерфейса еще пахать и пахать. Эх.
Итак, выводы: 1. Средствами JTable границы жирные в блоках сделать можно, но сложно. Смотрела пример, не впечатлило.
2. Можно было бы добавить прозрачную панельку с рисованными линиями сверху над таблицей, используя JLayeredPane. Это у меня тоже не получилось. Таблица из-под низа никак не хотела выглядывать. К тому же стала сомневаться, что если бы я добавила прозрачную панель с границами, работал бы выбор значений в клетках с помощью выпадающего списка.
3. Если время, затраченное на написание несравнимо меньше времени, затраченного на копание в документации, то лучше и не копаться (слишком долго=)). Мдям.

Thursday, March 8, 2007

Fast forward

  • Сегодня знакомилась с перлом. Матка боска, ну и синтаксис, ну и "гибкость", сдуреть можно. Ruby понятнее=)))
  • Позавчера поставила IntelliJIdea — абалденная штука=)))
  • В универе грузят по полной. Мы будем учить VHDL.
  • Судоку потиху продвигаются. Сегодня искала ошибки и пыталась сделать так, чтобы моя солв еще и генерировала какую-нибудь заполненную сетку. Не получилось. Все из-за того, что неправильно работает мой брутфорс. Т.е. работает, но не делает шаг назад. Буду думать.
  • Еще про судоку. Интересным оказалось сведение алгоритма поиска решения к раскраске графа, вершины которого -- пустые клетки, и 2 вершины соединены ребром, если находятся в одном ряду или столбце или блоке 3х3. В связи с этим окунулась в книжки по графам. С ума сойти, сколько же там всякой теории и интересных теорем. А потому подумалось: есть ли специальное ПО для работы с графами? Или, еще лучше, класс, реализующий граф на Java/С++? Причем желательно было бы все-таки чтобы не любительский подход был к этому. Т.е. чтобы класс входил в SDK. Также надо будет поискать ПО для отрисовки графов (это я кажется видела у Алены С++).
  • Надо что-то думать с сертификацией. Т.е. начинать нормально готовиться. Учитывая, что в универе грузят, это сложно. Но возможно.
  • Sunday, February 25, 2007

    Страдания по JTable

    Делаю сейчас курсовую, игра "Судоку", на Java. В Свинге я ни в зуб ногой, а потому для меня стало проблемой, как сделать жирные границы у блоков клеток 3х3. "И чего я только не пробовала...", но, конечно, все оказалось не так просто. Свинговский класс JTable оказался неудобоваримым хотя бы потому, что он состоит не из агрегированных ячеек (ну это если бы я делала, проще всего, в лоб+)), а из колонок (уж не знаю, почему не из строк). То есть в принципе все просто: хочешь границы или фон поменять, делай свой TableCellRenderer, но опять же, я не могу получить каждую  третью ячейку, потому что я вообще не могу получить ячейку, чтобы в ней сделать границу с одной стороны. Покопалась в инете, нашла примеры, как делать с блоком. Как я поняла, границы рисуются просто сверху над таблицей. Да, вот кстати, с чем я еще не разобралась, так это как рисовать поверху. Можно было бы сделать тогда совсем просто: рассчитать, где должны быть границы и нарисовать сверху. Это проще хотя бы потому, что ресайзить окошко совсем не обязательно, т.е. размер можно зафиксировать и оставить так. Моя проблема в том, что я не знаю, как добавить прозрачную pane на уже имеющуюся pane с судоку. Ушла думать.

    Thursday, January 4, 2007

    О себе любимой и не только

    Зовут меня в миру Татьяной, учусь в Белорусском
    госуниверситете, на механико-математическом факультете.
    В университете мы учим С++, полтора года, и полгода я учу Jav'y на
    спецкурсе. Этим практически ограничиваются мои знания в области
    языков программирования, если не считать моих робких попыток
    познакомиться с ActionScript'ом и Javascript'ом и научиться делать
    что-нибудь полезное на HTML+CSS+)

    Вчера знакомилась с Ruby и Ruby on Rails, осталось очень 
    приятное впечатление как от самого языка, так и от фреймворка.
    Первое, что, конечно, бросается в глаза — необычный синтаксис (да-да,
    это не Java=)). Программы получаются коротенькие, без ущерба для их смысла.
    Я так поняла, что именно этим и гордятся больше всего энтузиасты от Ruby.
    Меньше кода, никаких точек с запятыми=)) Приятно сделана система для
    начала работы с Ruby (связка ri/fxri+irb), приятным оказалось и то, что
    мой любимый текстовый редактор Notepad++ умеет красиво подсвечивать
    рубиновый код=) Кроме него можно использовать специальные IDE для
    Ruby, мне ближе всего оказался вариант установки плагина
    к Eclipse под названием RDT.
    На официальном сайте Ruby можно найти неплохие тьюториалы для начала,
    самая большая книжка Programming Ruby входит в установочный пакет,
    есть англоязычная вики, есть очень любопытная Why's (Poignant) Guide to
    Ruby
    — книжица, умело маскирующаяся под несерьезную=)
    Русские энтузиасты уже перевели несколько интересных статей, хорошая
    статья о Ruby с большим количеством ссылок есть в Википедии,
    в том числе там же можно найти неплохой Викиучебник, хоть и
    неполный, но дающий начальное представление о порядке вещей.
    В ЖЖ есть русское комьюнити, в группах Google — сообщество,
    посвященное Ruby on Rails
    .
    Начала писать, и поняла, что тема более глубокая, чем я могу
    вместить в один пост, а посему to be continued=)

    Tuesday, January 2, 2007

    О темплейтах.

    Хорошие тут темплейты, ничего не скажешь, выбор есть, 
    на разный вкус и цвет. 
    Отсмотрела все в зеленых тонах, и остановилась на этом 
    варианте. Вообще странные тут шаблоны, даже очень. 
    Предыдущий пост не хочет подстраиваться под шаблон 
    и ровно становиться в строки так, как требуют границы. 
    В опере=), в explorer'e все замечательно, но там не
    прельщает такой здоровенный корявый шрифт.
    Подумываю перейти на шаблон Simple. Все в строки 
    влазит, и грузиться должен быстрее=) 

    Welcoming myself=)

    В диком восторге от сервиса, предоставляемого Блоггером, гораздо удобнее и понятнее, чем в ЖЖ, и намного (бедное слово "намного", тут даже "намнооооооого" будет мало=)) функциональнее, чем на Diary.ru, где я веду дневник уже более трех лет. Такая забота о пользователях не только порождает желание писать, но еще и писать аккуратно, хорошо и по делу.
    Еще больше порадовало то, что мой никнейм оказался не занят. Хотя в том же Гугле я не успела зарегистрировать свой обычный ник.
    =)