- 1
- 2
- 3
if (stage < 4 || stage > 4) {
loadWizard();
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+97
if (stage < 4 || stage > 4) {
loadWizard();
}
ситуации или-или (с)
+90
if (name != null ? !name.equals(module.name) : module.name != null) return false;
return true;
+75
public static Cursor getListGroupCursor(Activity activity,
ShopListItem list, boolean marked) {
long state = marked ? Cells.PURCHAZED_STATE : Cells.WANT_TO_BUY_STATE;
String where;
String[] arg;
if (list.isAutoList()) {
where = Cells.STATE + " = ?";
arg = new String[] { Long.toString(state) };
} else {
where = Cells.LIST_ID + " = ? AND " + Cells.STATE + " = ?";
arg = new String[] { Long.toString(list.getId()),
Long.toString(state) };
}
Cursor c = activity.managedQuery(Cells.CONTENT_URI,
new String[] { Cells.CATEGORY_ID }, where, arg,
Cells.DISTINCT_SORT_ORDER);
ArrayList<Long> ids = new ArrayList<Long>();
while (c != null && c.moveToNext()) {
ids.add(new Long(c.getLong(c.getColumnIndex(Cells.CATEGORY_ID))));
}
if (c != null) {
c.close();
}
int count = ids.size();
String whereGroup = null;
String[] argGroup = null;
if (count > 0) {
whereGroup = "";
argGroup = new String[count];
for (int i = 0; i < count; i++) {
if (i < count - 1) {
whereGroup += (Categories._ID + "= ? OR ");
} else {
whereGroup += (Categories._ID + "= ?");
}
argGroup[i] = Long.toString(ids.get(i));
// Log.i(tag, "getListGroupCursor "+argGroup[i]);
}
} else {
whereGroup = Categories._ID + "= -1";
}
Cursor groupCursor = activity.managedQuery(Categories.CONTENT_URI,
null, whereGroup, argGroup, Categories.DEFAULT_SORT_ORDER);
return groupCursor;
}
Работа с ContentProvider в android. Выборка категорий, id которых присутствуют в результатах первой выборки (по признаку)
+75
class AboutProgram extends Frame{
AboutProgram(String s){
super(s);
setBounds(50,50,420,420);
setVisible(true);
setLayout(null);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
dispose();
}
});
}
@Override
public void paint(Graphics g){
g.setFont(new Font("Times New Roman",Font.BOLD,30));
g.setColor(new Color(200,10,100));
g.drawString("Java-сапёр\n",150,50);
g.setColor(Color.blue);
g.setFont(new Font("Serif", Font.ITALIC | Font.BOLD, 15));
g.drawString("Автор \t div#[email protected]\n",20,100);
g.drawString("Период написания demo version \t 29.10.2005 - 04.11.2005",20,120);
g.drawString("Правила игры \n ",20,140);
g.drawString("Вы должны пометить все мины флажками \n ",40,160);
g.drawString("Флажок ставится правой кнопкой мыши\n ",40,180);
g.drawString("Открыть отдельное поле можно левой кнопкой мыши\n ",40,200);
g.drawString("Если поле пустое, то открываются все\n ",40,220);
g.drawString("соседние поля, в которых нет мин\n ",40,240);
g.drawString("Цифра в отдельном поле означает, что\n ",40,260);
g.drawString("в соседних клетках соответствующее число мин\n ",40,280);
g.drawString("Игра заканчивается, если\n ",20,300);
g.drawString("1) Все мины помечены флажками\n ",40,320);
g.drawString("2) Вы наткнулись на мину!\n ",40,340);
g.setColor(Color.red);
g.drawString("Помните!\n ",20,360);
g.setColor(Color.blue);
g.drawString("Сапёр ошибается только один раз!\n ",40,380);
}
}
Ну и о программе "избитого" сапера.
+76
class Scribble extends Component implements ActionListener {
protected Frame f;
protected int w,h;
public Scribble(Frame f, int w, int h){
this.f = f;
this.w = w;
this.h = h;
}
@Override
public Dimension getPreferredSize(){
return new Dimension(w,h);
}
public void actionPerformed(ActionEvent event){
String s = event.getActionCommand();
if(s.equals("Красный"))
Miner.currColor = Color.red;
else if(s.equals("Зелёный"))
Miner.currColor = Color.green;
else if(s.equals("Синий"))
Miner.currColor = Color.blue;
else if(s.equals("Серый"))
Miner.currColor = Color.gray;
}
}
C меню выбора цвета полный провал
dwinner - заслуженное звание java-быдло 2005!
+76
public void Mina(int x, int y){
Dimension d = this.getSize();
int dx = d.width/(MC+2);
int dy = d.height/(MR+2);
Graphics g = getGraphics();
Graphics2D gr = (Graphics2D)g;
GradientPaint gp = new GradientPaint(x, y, Color.white, x+dx, y+dy, Color.black, true);
gr.setPaint(gp);
gr.fill(new Ellipse2D.Double(x,y,dx,dy));
g.setColor(Color.black);
g.drawLine(x-1,y-1,x-1,y+dy);
g.drawLine(x-1,y-1,x+dx,y-1);
g.drawLine(x-1+dx,y-1,x-1+dx,y+dy);
g.drawLine(x-1,y-1+dy,x-1+dx,y-1+dy);
g.setColor(Miner.currColor);
}
Создаем рисунок программно! Градиентный шарик для Java - быстро ли?!
+78
public Miner(String s) {
super(s);
MenuBar mb = new MenuBar();
setMenuBar(mb);
Menu mFile = new Menu("Файл");
Menu mHelp = new Menu("Справка");
mb.add(mFile);
mb.setHelpMenu(mHelp);
MenuItem create = new MenuItem("Новая игра",new MenuShortcut(KeyEvent.VK_N));
Menu mColor = new Menu("Цвет");
MenuItem mGreen = new MenuItem("Зелёный");
MenuItem mRed = new MenuItem("Красный");
MenuItem mBlue = new MenuItem("Синий");
MenuItem mGray = new MenuItem("Серый");
mColor.add(mGreen);
mColor.add(mRed);
mColor.add(mBlue);
mColor.addSeparator();
mColor.add(mGray);
Menu mHard = new Menu("Сложность");
MenuItem mDummy = new MenuItem("Новичок");
MenuItem mUser = new MenuItem("Среднячок");
MenuItem mHaker = new MenuItem("Проффи");
mHard.add(mDummy);
mHard.add(mUser);
mHard.add(mHaker);
MenuItem mSound = new MenuItem("Звук");
mSound.setEnabled(false);
MenuItem exit = new MenuItem("Выход",new MenuShortcut(KeyEvent.VK_X));
mFile.add(create);
mFile.add(mColor);
mFile.add(mHard);
mFile.add(mSound);
mFile.addSeparator();
mFile.add(exit);
Scribble scr = new Scribble(this,480,480);
mGreen.addActionListener(scr);
mRed.addActionListener(scr);
mBlue.addActionListener(scr);
mGray.addActionListener(scr);
add(scr);
Difficult diff = new Difficult(this,480,480);
mDummy.addActionListener(diff);
mUser.addActionListener(diff);
mHaker.addActionListener(diff);
add(diff);
create.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
status = 0;
repaint();
RandomArray();
}
});
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
MenuItem mInfo = new MenuItem("О программе",new MenuShortcut(KeyEvent.VK_H));
mHelp.add(mInfo);
mInfo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new AboutProgram("О программе");
}
});
setBounds(0,0,480,480); // setSize(480,480);
setVisible(true);
setLayout(null);
addMouseListener(this);
addWindowListener(new WinClose());
}
Всё, что можно и что нельзя я запихнул в конструктор
+145
public String readMessage(String subject) throws Exception {
String messageString = null;
try {
for (final Message message : Arrays.asList(this.inbox.getMessages())) {
if (subject.equals(message.getSubject())) {
messageString = "To: " + Arrays.asList(message.getAllRecipients()) + "n" + "From: " + Arrays.asList(message.getFrom()) + "n" + "Sent: "
+ message.getSentDate() + "n" + "Subject: " + message.getSubject() + "n" + "Text: " + message.getContent();
break;
}
}
} catch (final MessagingException me) {
throw new Exception("Error reading Inbox", me);
} catch (final IOException e) {/* Not using streams, only plain text */
}
return messageString;
}
тестовый javamail клиент(отправка тест-письма,поиск его и удаление). В методе ищем письмо с нужной темой, возвращаем текстовое представление.
говно, кроме очевидных ляпов, в том, что мы лазием по всем сообщениям, сверяя тему, а получение письма занимает около секунды. Надо ли говорить, что в современном ящике писем тысячи...
для сравнения:
если заменить в 4 строчке конструкцию
Arrays.asList(this.inbox.getMessages())
на new SubjectTerm(subject)
, то время выполнения сокращается с (неизвестно,точно более времени чаепития) до пары секунд = )
+74
@Name("solr")
@AutoCreate
public class SolrClient {
@Create
public void init() {
try {
server = startRemoteSolr();
} catch (Exception e) {
log.error(e, e);
}
}
public SolrServer startRemoteSolr() throws MalformedURLException, SolrServerException {
CommonsHttpSolrServer solr = new CommonsHttpSolrServer("http://localhost:8983/solr");
solr.setRequestWriter(new BinaryRequestWriter());
return solr;
}
}
Seam. Перевод для непричастного: на старте сайта вызывается метод startRemoteSolr(). Solr - это поисковый движок. Если он не запустится, на сайте не будет работать поиск. И если на запуске Solr будет ошибка, то в лог она попадёт просто как exception + stack trace.
Что не так в коде? Очевидно, его писали люди, не задумываясь об эксплуатации, что свойственно новичкам. А ведь устранение проблем в рабочем сайте - это приоритет номер один. Сама разработка сайта, сидя в удобном кресле с кашкой кофе - где-то сильно ниже.
Так вот, что не так?
1. При выводе ошибок надо писать - что это за ошибка. В данном случае: "Запуск поисковика неудался, ПОИСК НА САЙТЕ РАБОТАТЬ НЕ БУДЕТ." И уже потом - stack trace.
2. Если некая ошибка связана с ресурсами - сетевыми, или на файловой системе, в логе надо также описывать этот ресурс. Т.е. "Не удалось запустить клиент поисковика по адресу http://localhost:8983/solr". Что бы из логов сразу было видно, что порт указан правильно или нет, хост и тд.
Но выпускникам ВМК МГУ такие вещи неведомы, они слишком крутые что бы опускаться до таких мелочей. Чайники, хуле.
+145
private boolean save(Writer writer, int indent) {
StringBuffer nlb = new StringBuffer("\n");
for (int i = 0; i < indent; i++) {
nlb.append("\t");
}
String nl = nlb.toString();
Writer s = writer;
try {
if (this.isRoot()) {
s.append("<?xml version=\"1.0\" encoding=\"");
s.append(Charset.defaultCharset().displayName());
s.append("\"?>");
}
s.append(nl);
s.append("<");
s.append(RegNode.EL_NODE);
s.append(" ");
s.append(RegNode.ATT_NAME);
s.append("=\"");
s.append(this.getName());
s.append("\">");
if (this.getData() != null) {
s.append(nl);
s.append("\t<");
s.append(RegNode.EL_DATA);
s.append(" ");
s.append(RegNode.ATT_TYPE);
s.append("=\"");
s.append(RegNode.getTypeFor(this.getData()));
s.append("\" ");
s.append(RegNode.ATT_ENCODE);
s.append("=\"");
s.append(this.getMethod());
s.append("\">");
s.append(nl);
s.append("\t\t");
s.append(RegNode.encodeData(this.getData(), this.getMethod()));
s.append(nl);
s.append("\t</");
s.append(RegNode.EL_DATA);
s.append(">");
}
for (RegNode child : this.getChildren()) {
s.append("\t");
child.save(s, indent + 1);
}
s.append(nl);
s.append("</");
s.append(RegNode.EL_NODE);
s.append(">");
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
не нужен нам ни DOM, ни SAX, ни JAXB!
из класса, пытающегося реализовать себе "Windows Registry"-подобное древовидное хранилище.
каюсь, лисапед тоже мой = )