1. Список говнокодов пользователя lucidfox

    Всего: 16

  2. Куча / Говнокод #8329

    +144

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    Короче, ушла я от вас.
    Не вписываюсь в коллектив, что уж поделаешь. Все плюсуют улюлюкающих троллей и минусуют мои претензии по поводу культуры общения.
    От администрации никаких конкретных действий не вижу. Видать, это здесь и есть норма. Что ж, найду сообщество покультурнее.
    Правда, скорее всего англоязычное. На русских варваров уже надежды никакой.
    Не думаю, что это тут кого-то к чему-то сподвигнет, менталитет не тот, а эффект толпы только убеждает их в правоте действий.
    Но в любом случае своё "фи" я выразила и теперь умываю руки.
    Пароля не будет, вход по OpenID. Можете банить, мне уже всё равно.
    Lure of Chaos, спасибо за хоть какую-то поддержку. Пусть не настолько, как хотелось бы, но хоть единственный за меня вступался.

    lucidfox, 27 Октября 2011

    Комментарии (144)
  3. Java / Говнокод #8302

    +78

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    public Date localTimeToUTC(final Date localTime) {
    	final DateFormat format = DateFormat.getDateTimeInstance();
    	format.setTimeZone(UTC);
    	
    	// This is a bit of a trick. Since Java assumes dates are in UTC,
    	// but localTime is not (blame the weird legacy database...),
    	// it's a semantically incorrect Date. Therefore we process it as
    	// if it's in UTC...
    	final String formatted = format.format(localTime);
    	
    	format.setTimeZone(localTimeZone);
    	
    	try {
    		return format.parse(formatted);
    	} catch (final ParseException e) {
    		throw new AssertionError(e); // cannot happen
    	}
    }

    И вновь издержки обратной совместимости. Китайские кулибины хранили DateTime в старой базе в локальном часовом поясе.

    lucidfox, 26 Октября 2011

    Комментарии (7)
  4. Java / Говнокод #8286

    +75

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    /**
     * Workaround ObjectInputStream for maintaining backward compatibility with serialization.
     * 
     * In the future, please, please, PLEASE assign each serializable class an explicit serialVersionUID.
     * 
     */
    public final class DecompressibleInputStream extends ObjectInputStream {
    	private static final Logger logger = Logger.getLogger(DecompressibleInputStream.class);
    
        public DecompressibleInputStream(InputStream in) throws IOException {
            super(in);
        }
    
        protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
            ObjectStreamClass resultClassDescriptor = super.readClassDescriptor();
            Class<?> localClass;
            
            try {
                localClass = Class.forName(resultClassDescriptor.getName()); 
            } catch (ClassNotFoundException e) {
                logger.error("No local class for " + resultClassDescriptor.getName(), e);
                return resultClassDescriptor;
            }
            
            ObjectStreamClass localClassDescriptor = ObjectStreamClass.lookup(localClass);
            
            if (localClassDescriptor != null) { // only if class implements serializable
                final long localSUID = localClassDescriptor.getSerialVersionUID();
                final long streamSUID = resultClassDescriptor.getSerialVersionUID();
                
                if (streamSUID != localSUID &&
                		(localClass == ByteArraySerial.class || localClass == Vector2D.class)) {
                	// Workaround: check for serialVersionUID mismatch with two specific classes
                    logger.error(String.format("Overriding serialized class version mismatch for %s: " +
                    		"local serialVersionUID = %s, stream serialVersionUID = %s",
                    		localClass.getName(), localSUID, streamSUID));
                    resultClassDescriptor = localClassDescriptor; // Use local class descriptor for deserialization
                }
            }
            
            return resultClassDescriptor;
        }
    }

    Продукт использует в качестве бинарного формата сохранённых файлов встроенную сериализацию. При этом ранние версии полагались на встроенный serialVersionUID.

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

    lucidfox, 24 Октября 2011

    Комментарии (4)
  5. Java / Говнокод #8169

    +67

    1. 1
    2. 2
    3. 3
    4. 4
    for (char c = '0'; c <= '9'; c++) {
    	// personally, I like java better than c or c++
    	RANDOM_PASSWORD_CHARS[i++] = c;
    }

    lucidfox, 12 Октября 2011

    Комментарии (10)
  6. VisualBasic / Говнокод #8157

    −97

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    Private Sub CommandButton1_Click() 'необходимо
        For q = 2 To 500
        For w = 25 To 34
        For e = 3 To 13
            If Лист1.Cells(q, 4) = "Затрачено [...]" Or Лист1.Cells(q, 4) = "Затрачено на [...]" Then
            If Лист1.Cells(q, 7) = Лист11.Cells(w, 1) Then
            If Лист1.Cells(q, 6) = Лист11.Cells(3, e) Then
                Лист11.Cells(w, e) = Лист11.Cells(w, e) + Лист1.Cells(q, 5)
                Rem Лист1.Cells(q, 11) = 151
            End If
            End If
            End If
        Next
        Next
        Next
    End Sub
    
    ...
    
    TextBox4.Value = CLng(cdop1 * (TextBox15.Value * Лист5.Cells(10, 11)) + cdop2 * (TextBox15.Value * Лист5.Cells(10, 11))) + CLng(TextBox53.Value)
    
    ...
    
    Лист1.Cells(a, 45) = TextBox32.Value ' отсрочка
    
    If IsDate(TextBox58.Value) And IsDate(TextBox62.Value) Then
    Лист1.Cells(a, 46) = CDate(TextBox62.Value) - CDate(TextBox58.Value) ' прошло дней
    End If
    Лист1.Cells(a, 47) = TextBox55.Value ' зарплата
    Лист1.Cells(a, 48) = TextBox63.Value ' штраф
    
    If CheckBox6.Value = True Then
    Лист1.Cells(a, 49) = 1 ' комплект
    Else
    Лист1.Cells(a, 49) = 0
    End If

    Ну и так далее.

    Беда, коль пироги начнёт печи сапожник, а макросы писать бухгалтер.

    lucidfox, 11 Октября 2011

    Комментарии (15)
  7. Java / Говнокод #7993

    +73

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    final QOrder qSub = new QOrder("qSub");
    final Predicate[] filters = getFilters(qSub, null, null);
    		
    if (filters.length > 0) {
    	// conditions.add(Arrays.asList(filters));   // Do not do this. 
    		
    	// The subquery is here so that MySQL doesn't use the wrong index for
    	// ORDER BY... LIMIT if we directly add the filter by custid/custdept
    	// to the list of filters, which will make the search very slow.
    	// Well, perhaps an ugly workaround, and we might want to adjust
    	// the custid/custdept index in the future... somehow.
    	conditions.add(q.id.in(QueryDsl.subFrom(qSub).where(filters).list(qSub.id)));
    }

    Обход косяков конкретной СУБД на уровне ORM. Абстракция, что и говорить.

    lucidfox, 27 Сентября 2011

    Комментарии (6)
  8. Куча / Говнокод #7972

    +133

    1. 1
    string file_label = file.local_basename.replace ("_", "__"); // Cute emoticons!

    http://bazaar.launchpad.net/~sikon/steadyflow/trunk/view/head:/Steadyflow/IndicatorController.vala

    lucidfox, 25 Сентября 2011

    Комментарии (5)
  9. Java / Говнокод #7954

    +85

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    nLen = m_aRealTexts[index].m_txtString.length();
    for (int iyhx = 0; iyhx < nLen; iyhx++) {
    	cLetter = m_aRealTexts[index].m_txtString.charAt(iyhx);
    	CTxtCharStyle pCharNode = new CTxtCharStyle(cLetter);
    	pCharNode.SetTxtFontFace(m_nFontFace);
    	m_aRealTexts[index].m_txtChars.add(pCharNode);
    }
    
    ...
    
    
    public void SetTxtFontFace(byte nType)
    {
    	String sLine, sTemp;
    	int nMark;
    	float xValue, yValue;		//笔画点位的临时坐标
    	byte bIsBigChar = 0;		//1表示ANSI字体UserArial_ansi.uft,2表示Unicode字体UserArial_unicode.uft,3表示宋体hztxt1.shx
    	m_cStroke.clear();			//清空笔画路径链表
    	
    	if(nType == 1)
    	{
    		if((int)m_cChar<0x7F || ((int)m_cChar>=0x2160&&(int)m_cChar<=0x2169))
    		{
    			//按Unicode编码顺序处理字符查找指定字库文件,避免读取不必要的字库文件
    			InputStream fInFile = this.getClass().getResourceAsStream("/TagResources/UserArial_ansi.uft");
    			
    			...
    			
    			fInFile.close();
    		}
    		else if((int)m_cChar>=0x007F && (int)m_cChar<0x2FFF)
    		{
    			//字符在UserArial_ansi.uft中未找到,看是否在UserArial_unicode.uft中
    			int nGetByte;
    			sLine = new String("");
    			sTemp = new String("");
    			//float xValue, yValue;
    			byte[] CharUnicode = new byte[2];			//一次读取两个字节,为一个字符
    			byte[] cBytes = new byte[2];
    			InputStream fInFile = this.getClass().getResourceAsStream("/TagResources/UserArial_unicode.uft");
    			while((nGetByte = fInFile.read(cBytes, 0, 2)) > 0)
    			{
    				...
    			}
    			fInFile.close();
    		}
    		else if((int)m_cChar>=0x3000)
    		{
    			//字符在西文字库UserArial.uft中未找到,是大字体,则在宋体文件hztxt1.shx中查找
    			m_cWidth = 112.0f;	//对于宋体,左下角点为坐标原点,包围盒长宽皆为127,调整量为(127-112)/2=5
    			m_cHeight = 112.0f;
    			byte nMoveDown = 5;
    			InputStream fInFile = this.getClass().getResourceAsStream("/TagResources/hztxt1.shx");
    			
    			...
    			
    			fInFile.close();
    		}
    		else if(bIsBigChar == 0)
    		{
    			//仍然没有找到字符字体,则按空格处理
    			m_cWidth = 12.0f;
    			m_cHeight = 16.0f;
    			m_cStroke.clear();
    		}
    	}
    	else if(nType == 2)
    	{
    		try
    		{
    			
    			InputStream fInFile = this.getClass().getResourceAsStream("/TagResources/hztxt1.shx");
    			
    			...
    			
    			fInFile.close();
    			
    		}
    		catch(IOException e)
    		{
    			//异常处理
    			e.printStackTrace();
    		}
    	}
    }

    Ещё один отжиг господ китайцев.

    Магические числа вместо энумов и закрытие файлов вне finally - это ещё полбеды. Больше всего умиляет, что при каждой отрисовке отдельно для каждой буквы файл шрифта открывается и сканируется по новой. Неудивительно, что отрисовка так тормозит. Буду переписывать это дело - загружать глифы из файла один раз и затем дёргать их из кэша.

    lucidfox, 23 Сентября 2011

    Комментарии (13)
  10. Java / Говнокод #7807

    +66

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Integer obj = (Integer)dump.get("size");
            if(obj == null) {
                return;
            }
            int size = obj;
            for(int i=0; i<size; i++) {

    Самое странное, что автор явно знает, что такое автобоксинг, но всё равно использовал его коряво.

    lucidfox, 08 Сентября 2011

    Комментарии (18)
  11. Java / Говнокод #7806

    +77

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    public abstract class Data {
    		// The tone of Commander Riker's voice makes me suspect that
    		// he is not serious about finding Ambassador T'Pel charming.
    		// My experience suggests that in fact he may mean the exact
    		// opposite of what he says. Irony is a form of expression
    		// I have not yet been able to master.

    lucidfox, 08 Сентября 2011

    Комментарии (31)