1. проверка

    Date: 04/09/07     Keywords: no keywords

    Втф?

    string snumber1 = txtStampNumber1.Text.Trim();
    string snumber2 = txtStampNumber2.Text.Trim();

    if (!CheckStampRange(snumber1, snumber2))
    {
    //....
    }


    ////

    bool CheckStampRange(string snumber1, string snumber2)
    {
    //Далее соответственно в txtStampNumber1 в фунции не встречаеться :/

    if (txtStampNumber1.Text.Substring(0, 3) !=
    snumber2.Substring(0, 3))
    {}
    }

    Source: http://community.livejournal.com/code_wtf/79331.html

  2. Настоящих буйных мало

    Date: 04/06/07     Keywords: html, sql

    Мало, но есть. Давайте вспомним героев большого WTF, а не красноглазых похапистов, опять забывших про sql injection.
    Встречайте - Mork DB, худший формат файлов в истории IT. Мой браузер Firefox 1.5.0.11 хранит историю именно в нем (history.dat)

    http://www.jwz.org/hacks/mork.pl
    http://jwz.livejournal.com/312657.html

    Source: http://community.livejournal.com/code_wtf/78965.html

  3. :)))

    Date: 04/05/07     Keywords: no keywords

    private static String makeDigit(byte asciiByte) {
        return new String(new byte[] { asciiByte });
    }

    Source: http://community.livejournal.com/code_wtf/77797.html

  4. MS rox

    Date: 03/31/07     Keywords: no keywords

    На скрине я сравнил стандартные include-файлы из Visual Studio 6.0 и Visual Studio 8.0. Результат превзошёл мои ожидания... :)

    "Видать, в MS велели почистить все исходники от любых намёков на ругательства после того, как код win2000 попал с Сеть. =)"

    Оригинал

    Source: http://community.livejournal.com/code_wtf/77324.html

  5. Java EE приложение

    Date: 03/29/07     Keywords: java

    Недавно смотрел один большой кусок Java EE кода, в котором было много мелких приколов, которые затеняются двумя «гениальными» архитектурными решениями.

    В коде не было указаний на авторов, по этому я не знаю, в рамках какой культурной традиции это было сделано. Возможно, это родилось на стыке разных традиций, ибо шибко уж нетривиально.

    Приложение является Интернет магазином. И деньги снимаются и начисляются прямо в нем. На момент проверки кода, веб-интерфейс еще не был сделан.

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

    Следующее чем они озадачились это как связать AdminConsole и серверное приложение. По какой-то причине, они выбрали использовать локальные интерфейсы для EJB. Так что удаленно использовать их не получилось.

    И тут им пришла в голову «гениальная» идея. Они решили запускать AdminConsole прямо в контексте веб приложения. Есть административный сервлет, где в методе doGet есть такая строчка:

    …
    new AdminConsoleFrame(adminInterfaceWrapper);
    …
    
    Класс AdminConsoleFrame расширяет JFrame. Объект adminInterfaceWrapper врапит ссылки на EJB-ухи. В конструкторе AdminConsoleFrame после создания компонентов выполняется setVisible(true).

    Java EE сервер, в котором это запускалось, на Windows Server 2003 обычно работает как сервис. А в сервисах на Windows нельзя работать с сетью и показывать окошки одновременно. Так что авторы получили мягкий намек на то, что они делают что-то не то. Однако, намек был проигнорирован. В документации было сказано, что если хотите иметь AdminConsole, пускайте из командной строки и точка.

    Мне понадобилось несколько часов, чтобы просто поверить, что они действительно создают Swing-овое окошко из сервлета. Самое смешное, что я так и не смог вспомнить хотя бы один источник, где бы говорилось, что этого делать нельзя. Что новые потоки запускать нельзя, это было. А вот что бы говорилось, что Swing-овые окошки из сервлетов пускать нельзя, вот этого я не помню.

    Второй прикол связан с EJB. У меня вознкло такое чувство, что где-то они прочитали, что локальные EJB это хорошо, и что сессионные EJB это плохо. Соответственно, в приложении у них есть только сервлеты (включая AdminConsole) и entity EJB (с локальными интерфейсами).

    Entity EJB - вполне традиционные. Есть куча setter и getter методов. Какой-либо бизнес логики не наблюдается. Так же есть методы создания и поиска на home интерфейсах.

    Если не использовать Spring или что-то подобное, в такой ситуации обычно используется
    UserTransaction. Однако эти гении решили, что это не их путь. Они пометили все методы на EJB как «transaction required» и не стали «загромождать код» использованием UserTransaction.

    В результате, в коде, напрямую вызываемом из сервлетов и AdminConsole, есть куча мест вроде этого:
    …
    Account account =accounts.findByPrimaryKey(userid);
    Float balance = account.getBalance();
    if (balance == null) throw new BusinessLogicException();
    float newAmount = balance.floatValue() - price.floatValue();
    account.setBalance(new Float(newAmount));
    …
    Purchase purchase = purchases.create(itemid);
    purchase.setAccount(account);
    …
    
    Использование Float для хранения денег в финансовом приложении это отдельный WTF. Но основная проблема не в этом. Приведенный код работает в режиме, похожим на режим «autocommit» в базах данных. На каждое взаимодействие с EJB, создается отдельная транзакция. То есть, в приведенном коде будут выполнены пять транзакций (если все пойдет хорошо).

    В результате, получить базу в некорректном состоянии, это раз плюнуть. Например, деньги могут быть вычтены, а товар не добавлен. Я уже молчу про производительность.

    На данном примере хорошо видно, что знать спеки это одно, а практические знания, это совсем другое. Формально, спекам они почти не противоречат. Но по факту, код сплошной WTF.

    Source: http://community.livejournal.com/code_wtf/77025.html

  6. Вот, нашёл в датагриде

    Date: 03/27/07     Keywords: asp

    C#, о том как надо писать контролы на ASP.NET не знаем, похапе форева.

    #region Номер текущей страницы
    protected int _currentPageNumber = 1;
    protected bool firstReadCurrentPage = true;
    public virtual int CurrentPageNumber
    {
        get
        {
            if (firstReadCurrentPage)
            {
                try
                {
                    if (Page.Request.QueryString[ID + "CurrentPage"] != null)
                    {
                        if (Convert.ToInt32(Page.Request.QueryString[ID + "CurrentPage"]) > 0)
                            _currentPageNumber = Convert.ToInt32(Page.Request.QueryString[ID + "CurrentPage"]);
                    }
                }
                catch { }
            }
            firstReadCurrentPage = false;
    
            return this._currentPageNumber;
        }
        set { this._currentPageNumber = value; }
    }
    #endregion

    Source: http://community.livejournal.com/code_wtf/76115.html

  7. Не прикол с VS 2005

    Date: 03/24/07     Keywords: no keywords

    Кладем в файл вот такой код:

    #include bool f (GUID const &A, GUID const &B) { return IsEqualGUID (A, B);}

    Компилируем 64-разрядным кросс-компилятором (из x86_amd64) от VS 2005 (14.00.50727.762) с выдачей ассемблерного листинга:

    cl /c /FAs test.cpp

    Открываем ассемблерный файл, и видим там вот такую функцию:

    ?f@@YA_NAEBU_GUID@@0@Z PROC ; f

    Забавная фраза появляется только, если компилировать 64-разрядным компилятором

    Source: http://community.livejournal.com/code_wtf/75634.html

  8. Американские индусы

    Date: 03/22/07     Keywords: no keywords

    do
    {
    if(!iterator.hasNext())
    break;
    ...iterator.next();
    ...
    } while(true);

    Source: http://community.livejournal.com/code_wtf/74926.html

  9. чрезвычайно дружелюбный replacer

    Date: 03/22/07     Keywords: xml, java, google

    Есть такая контора - ThoughtWorks. И есть у неё такая библиотечка - XStream. Довольно широко используемая.

    И есть в ней такой замечательный кусок кода. Можете посчитать в нём количество ненужных аллокаций объектов.


    /**
         * Unescapes name re-enstating '$' and '_' when replacement strings are found
         * @param name the name of attribute or node
         * @return The String with unescaped name
         */
        public String unescapeName(String name) {
            StringBuffer result = new StringBuffer();
            int length = name.length();
            for(int i = 0; i < length; i++) {
                char c = name.charAt(i);
                if ( stringFoundAt(name, i, underscoreReplacement)) {
                    i += underscoreReplacement.length() - 1;
                    result.append('_');
                } else if ( stringFoundAt(name, i, dollarReplacement)) {
                    i += dollarReplacement.length() - 1;
                    result.append('$');
                } else {
                    result.append(c);
                }
            }
            return result.toString();
        }
    
        private boolean stringFoundAt(String name, int i, String replacement) {
            if ( name.length() >= i + replacement.length()
              && name.substring(i, i + replacement.length()).equals(replacement) ){
                return true;
            }
            return false;
        }


    http://www.google.com/codesearch?hl=en&q=+package:%22http://dist.codehaus.org/xstream/distributions/xstream-1.2.zip%22+xmlfriendlyreplacer+show:ITug5ohLr3E:OnvyQYwElLE:aFFngwu4ecM&sa=N&cd=1&ct=rc&cs_p=http://dist.codehaus.org/xstream/distributions/xstream-1.2.zip&cs_f=xstream-1.2/src/java/com/thoughtworks/xstream/io/xml/XmlFriendlyReplacer.java#a0

    Source: http://community.livejournal.com/code_wtf/74748.html

  10. py: Преобразование туда-обратно

    Date: 03/21/07     Keywords: no keywords

    Кусок кода из одного совместного проекта:

    
    def ip2long(ip):
        splittedaddr = ip.split('.')
        ipnum = 16777216*int(splittedaddr[0]) + 65536*int(splittedaddr[1]) + 256*int(splittedaddr[2]) + int(splittedaddr[3])
        return ipnum
    
    
    def long2ip(ipnum):
        w = int ( ipnum / 16777216 ) % 256
        x = int ( ipnum / 65536 ) % 256
        y = int ( ipnum / 256 ) % 256
        z = int ( ipnum ) % 256
        ip = str(w) + "." + str(x) + "."+ str(y) + "." + str(z)
        return ip
    
    P.S. Сам Питона не знаю, но думаю, что битовые операции в нем имеются.

    Source: http://community.livejournal.com/code_wtf/74034.html

  11. Разбираю исходники одного веб-проекта..

    Date: 03/20/07     Keywords: no keywords

           Set conn = Server.CreateObject("ADODB.Connection")                                         
           Set NewCust = Server.CreateObject("ADODB.RecordSet")                                       
                                                                                                      
           conn.Open "onenapilicontest"                                                               
                                                                                                      
           NewCust.Open "SELECT * FROM giveaway5 WHERE EMail = '" & Request.Form("email") & "'", conn 
       , adOpenKeyset , adLockOptimistic                                                              
    
    Code syntax highlighting by VIM captured with ScreenShot script

    Source: http://community.livejournal.com/code_wtf/73882.html

  12. Пример с MSDN: анекдот про чайник

    Date: 03/19/07     Keywords: security

    Когда читаешь код в статьях, обычно ожидаешь увидить вылизаный код. Однако бывают примеры когда не понимаешь, как код прошел редактора. Очень странный кусок кода я нашел в статье на MSDN Using Permutations in .NET for Improved Systems Security. Этот пример напомнил мне анекдот про чайник (вресия про програмистов).



    Пример из статьи:


    public Permutation(int n, int k)  
    {
      this.data = new int[n];
      this.order = this.data.Length;
    
      // Step #1 - Find factoradic of k
      int[] factoradic = new int[n];
             
      for (int j = 1; j <= n; ++j)
      {
        factoradic[n-j] = k % j;
        k /= j;
      }
          
      // Step #2 - Convert factoradic to permuatation
      int[] temp = new int[n];
    
      for (int i = 0; i < n; ++i)
      {
        temp[i] = ++factoradic[i];
      }
    
      this.data[n-1] = 1;  // right-most element is set to 1.
    
      for (int i = n-2; i >= 0; --i)
      {
        this.data[i] = temp[i];
        for (int j = i+1; j < n; ++j)
        {
          if (this.data[j] >= this.data[i])
            ++this.data[j];
        }
      }
    
      for (int i = 0; i < n; ++i)  // put in 0-based form
      {
        --this.data[i];
      }
    
    }  // Permutation(n,k)
    

    Очевидно, что добавление единицы и последующее вычитание являются избыточными, и код мог бы быть записан способом, указаным ниже. Так же, после инициализации temp, массивы temp и factoradic имеют одинаковые значения элементов. Так что, непонятно зачем temp создавался.


    public Permutation(int n, int k)  
    {
      this.data = new int[n];
      this.order = this.data.Length;
    
      // Step #1 - Find factoradic of k
      int[] factoradic = new int[n];
             
      for (int j = 1; j <= n; ++j)
      {
        factoradic[n-j] = k % j;
        k /= j;
      }
          
      // Step #2 - Convert factoradic to permuatation
      this.data[n-1] = 0;  // right-most element is set to 0.
    
      for (int i = n-2; i >= 0; --i)
      {
        this.data[i] = factoradic[i];
        for (int j = i+1; j < n; ++j)
        {
          if (this.data[j] >= this.data[i])
            ++this.data[j];
        }
      }
    
    }  // Permutation(n,k)
    

    Source: http://community.livejournal.com/code_wtf/73670.html

  13. c#-ное

    Date: 03/16/07     Keywords: no keywords

    Сегодня прислала подруга код с просьбой "посмотреть что не так".
    Открываю и первым делом натыкаюсь на конструкцию:

    while (Count < 3)
    {
        ...
        ...
        ...
    
        Count = ++Count;
    }

    Source: http://community.livejournal.com/code_wtf/73395.html

  14. C програмист пишет код на Java

    Date: 03/16/07     Keywords: no keywords

    Встретил в чужом коде следующий фрагмент:

    boolean isValidBigInteger(String value) {
    try {
    BigInteger test = new BigInteger(value);
    if (test != null)
    return true;
    } catch(Exception e) {
    }
    return false;
    }

    Судя по коду про OutOfMemoryError они еще не читали.

    Source: http://community.livejournal.com/code_wtf/73047.html

  15. нашел только что

    Date: 03/16/07     Keywords: no keywords

    Вот такие подряд стоящие строчки только что выкопал у нас в проэкте.

    txtDate.Text = DateTime.Now.ToString();
    try
    {
    DateTime.Parse(txtDate.Text, System.Globalization.DateTimeFormatInfo.CurrentInfo);
    }
    catch (Exception)
    {
    MessageBox.Show("Date is not in correct format", ......................

    Source: http://community.livejournal.com/code_wtf/72925.html

  16. Эти люди пишут книги...

    Date: 03/13/07     Keywords: programming

    Примеры найдены в Programming C# by Jesse Liberty (O'Reilly, 2003)

    public double Pow(double x, double y){
       double retVal = x;
       for (int i = 0;i < y-1;i++){
          retVal *= x;
       }
       return retVal;
    }

    private void Order_Click(object sender, System.EventArgs e){
        string msg;
        msg = "Thank you " + txtName.Text +". You chose " ;
        for (int i = 0;i

    (UPD: Во втором фрагменте - цикл по списку радиокнопок)

    Source: http://community.livejournal.com/code_wtf/71967.html

  17. M$ SQL Server suxxx

    Date: 03/12/07     Keywords: no keywords

    Как человеку, испорченному Ораклом, нижеописанная конструкция кажется мне извращенной.

    UPDATE #Temp
    SET NameOrdering=A.DocName
    FROM
     (SELECT FirstThreadID,MIN(RowNum) mrn
        FROM #Temp
      GROUP BY FirstThreadID) X
      JOIN (SELECT * FROM #Temp) A ON A.FirstThreadID=X.FirstThreadID and A.RowNum=X.mrn
      JOIN #Temp B ON B.FirstThreadID=A.FirstThreadID


    А если выделенный фрагмент заменить на #Temp, то сервер ругать будет:
    The table '#Temp' is ambiguous.

    Source: http://community.livejournal.com/code_wtf/71868.html

  18. 1C Мероприятие

    Date: 03/10/07     Keywords: no keywords

    Да уж, действительно. Программирование на 1С разрушает мозг. Посмотрите, что написал минуту назад ваш покорный слуга %)

    Процедура ЗаполнитьПричиныПовторногоОбращения()
        Для Каждого Строка ИЗ ПричиныПовторногоОбращения Цикл        
            // Вот так вот мы по имени значения перечисления обратились к элементу на форме...
            ЭлементыФормы[Строка.Причина.Метаданные().ЗначенияПеречисления.Получить(Перечисления.ПричиныПовторногоОбращения.Индекс(Строка.Причина)).Имя].Значение = Истина;
        КонецЦикла;    
    КонецПроцедуры

    Source: http://community.livejournal.com/code_wtf/71329.html

  19. ПМы - тоже люди... (C#)

    Date: 03/09/07     Keywords: no keywords

    Наткнулся на код, писаный моим Project-манагером в довольно серьезном софте:

    if ((pageNumber < 0) || (pageNumber >= m_pages.Count)) return;

    if (pageNumber != -1)
    {
    m_pages[pageNumber].OnDeactivate();
    m_pages[pageNumber].Hide();
    }

    m_pages[pageNumber].Show();
    m_pages[pageNumber].OnActivate();

    if (pageNumber == 0)
    backButton.Enabled = false;
    else
    backButton.Enabled = true;

    Source: http://community.livejournal.com/code_wtf/71046.html

  20. CodeIgniter Calendar Class

    Date: 03/02/07     Keywords: no keywords

    две цитаты оттуда:
    очень понравилось %)

    while ($day > 1)
    {
    $day -= 7;
    }

    и еще...про date() они не слышали ваще
    function get_month_name($month)
    function get_total_days($month, $year)
    

    Source: http://community.livejournal.com/code_wtf/70301.html

Previous page  ||  Next page


antivirus | apache | asp | blogging | browser | bugtracking | cms | crm | css | database | ebay | ecommerce | google | hosting | html | java | jsp | linux | microsoft | mysql | offshore | offshoring | oscommerce | php | postgresql | programming | rss | security | seo | shopping | software | spam | spyware | sql | technology | templates | tracker | virus | web | xml | yahoo | home