1. C# / Говнокод #4174

    +129

    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
    private const int _multiple_cols = 0x0000060D;  //0001000001101 - (Multiple view)
    private const int _single_cols = 0x000007F1;	//0001111110001 - (Single view)
    
    private void SetGridColumnVisibility()
    {
    	int bits = _view_type == NotificationContactViewType.Multiple ? _multiple_cols : _single_cols;
    	DataControlFieldCollection cols = gvContacts.Columns;
    	DataControlField col;
    	for (int i = 0; i < cols.Count; i++)
    	{
    		col = cols[i];
    		int bit = (int)Math.Pow(2, i);
    		col.Visible = ((bits & bit) == bit);
    	}
    }

    Интересный способ установки видимости колонкам в гриде :)

    Запостил: olldman, 05 Сентября 2010

    Комментарии (27) RSS

    • мм... свежачок
      Ответить
    • OMG. Работа с битами, оптимизация наверно, ага. И тут на тебе:
      int bit = (int)Math.Pow(2, i);
      Я нечто похожее делал примерно так:
      private const string _multiple_cols = "+-++-----+---";
      ...
      for (int i = 0; i < cols.Count; i++) 
        cols[i].Visible = _multiple_cols[i] == '+';
      Ответить
      • четкое ощущение, что и ваш код - говно. Вот не могу представить себе такой хардкодинг видимости столбцов представления
        Ответить
        • Инфа о клиентах: ид, ФИО, адрес, телефон... (около 15 полей). Контекстное меню на DBGrid'e такого вот содержания:
          Фамилия, телефон            // -+--+------------
          ФИО, адрес                  // -+++-++++++------
          Ид, ФИО, телефон, адрес     // +++++++++++------
          Все поля                    // +++++++++++++++++
          Планировалась ручная настройка интерфейса, но не понадобилось, захардкодил и забыл.
          Ответить
      • >>. Работа с битами, оптимизация наверно, ага
        меня всегда очень трогают такого рода оптимизации в приложениях на asp.net. Там, где на один заход выполняются сотни вызовов методов и в куче создаются дестяки объектов -- оптимизацию надо начинать именно с того, что бы хранить много данных в одном инте и масками потом его разглядывать.

        >>Math.Pow(2, i);
        афтар не проходил сдвиги.

        >>Я нечто похожее делал примерно так:
        а по человечески никак там? bool[] ? Неужели ASP.NET настолько топорен?
        Ответить
        • >>Я нечто похожее делал примерно так:
          >а по человечески никак там? bool[] ? Неужели ASP.NET настолько топорен?

          наверное можно и так. я в одном (единственном которое писал на Qt) приложении делал списками имен столбцов. потому что по тому как там народ таких огородов нагородил с дизойн патторнами подругому было ни как. и имена столбцов читались из hard-coded XMLа. говнище еще то, да и из-за размеров тех огородов на говнокод ни за что не поместиться.

          самый прикол было видеть как P4 @ 3GHz под 100% загрузки валил когда юзеры у столбцов размер менял.
          Ответить
        • > bool[] ?
          То есть по вашему, запись вида
          bool[] _multiple_cols = {true, true, false, true, ...};
          менее говниста? Да, с bool[] всё по правилам, но ИМХО не так удобно. Писалось на Delphi, но не суть важно.

          С остальным согласен.
          Ответить
          • в данном случае достаточно двух байт, а там (как товарищ Анонимус заметил) можно и сдвигами поработать..
            Ответить
            • > достаточно двух байт
              Для массива? Нет.

              А товарищ Анонимус всё-таки заметил нечто другое. Перечитайте.
              Ответить
              • достаточно двух байт в данном случае: - в примере #4174 и в Вашем примере (private const string _multiple_cols = "+-++-----+---";)

                Товарища Анонимуса поддерживаю "хранить много данных в одном инте и масками потом его разглядывать."
                или сдвигами
                Ответить
                • И всё это
                  > Там, где на один заход выполняются сотни вызовов методов и в куче создаются дестяки объектов
                  Сарказм же.

                  Да, в 2 байта влезет, но с потерями читаемости кода и лёгкости модификации. ИМХО не стоит.
                  Ответить
                  • порой читаемости лучше уступить место быстродействию..
                    а лёгкость модификации должна присутствовать совершенно в другом месте программы.
                    --
                    и вообще, удивительно, почему стало сейчас модным НЕ использовать двоичные данные. Ведь в них можно хранить уйму информации, занимают они минимум места, и обрабатываются быстро.
                    (в противовес строкам, массивам ...и тп)
                    Ответить
                    • Сделайте веб приложение на ASP.NET, возьмите dotTrace, и померьте скорость.
                      Результаты Вас удивят)
                      Ответить
                      • Ну вот... а я, наивный, предполагал что восемь бит это всегда лучше чем восемь байт, и что операции обработки регистров выполняются быстрее чем операции работы с памятью ...
                        Ответить
                        • >>что восемь бит это всегда лучше чем восемь байт
                          особенно если у вас рядом пара десятков объектов на килобайт каждый

                          >> и что операции обработки регистров выполняются быстрее чем операции работы с памятью
                          в CLR нет регистров. Это чисто стековая машина.
                          Как она выполнится на процессоре -- нам знать не дано
                          Ответить
                          • > особенно если у вас рядом пара десятков объектов на килобайт каждый

                            имелась ввиду обработка информации о настройках (типа on/off), а не информация как данные
                            Ответить
                            • тоесть Вы жалеете место на хранилище клиента?

                              Вы знаете, что в дотнетах принято хранить конфиги в XML?
                              А XML насктолько избыточен, что смешно там что-то экономить.

                              А уж если в нем русские комментарии (а xml в утфе обычно) то совсем весело
                              Ответить
                              • вот и пошло-поехало...
                                с тех пор как кто-то придумал хранить настройки в текстовых файлах. Конечно, это очень удобно и поэтому стало популярным.
                                --
                                обработка таких настроек требует значительных ресурсов
                                поэтому и говорю
                                Ответить
                                • Здесь пример некритичной к скорости/памяти задачи.

                                  А "пошло-поехало" ещё раньше, с появлением высокоуровневых языков.
                                  Ответить
                                • >>с тех пор как кто-то придумал хранить настройки в текстовых файлах
                                  хм) Это придумали в 60х. По крайней мере в 71м году, в юниксе именно так и было.

                                  А еще на эту тему никсоиды смеются над виндузятниками.

                                  Потому что если у вас что-то сломалось в конфигах никсов, и никсы не грузятся -- вы грузитесь с диска, прикручиваете свой винт, и делаете "vi КОНФИГ_ФАЙЛ". И все.

                                  А еще его можно забекапить на флешку методом cp. А еще можно включить VCS, и узнать кто и что и когда поменял в конфигах системы, и даже откатиться назад.

                                  Если у вас испортился один байт в тестовом файле -- вы поправите его руками.

                                  Если у вас что-то сломалось в винде, то вам надо грузится с
                                  какого-нить платоного решения типа ERD, подключать реестр, и пытаться его править.
                                  Никакой истории реестра нет. Забекапить его практически нереально. (вернее нереально восстановить метотдом xcopy).
                                  И если там запортился один байт -- то будет registry corrupted, и руками это не поправить.

                                  В общем текстовые конфиги рулят.

                                  Если ОЧЕНЬ принципиална скорость -- можно компилировать в hash db (как часто делают в никсах, сендмейле итд)
                                  Ответить
                                  • Но с появлением "конфигов в txt" стал расти большой минус.

                                    Системы стандартов значительно отстают от разработчиков синтаксиса этих самых конфигов.
                                    ---
                                    Конфиги.txt были бы идеальным решением если б сочетали в себе общемировой стандарт с возможностью максимальной минимизации кода.
                                    ---
                                    Ответить
                                    • для этого есть сериалзация/десериализация. Например JAXB для джавы, когда Вы (грубо говоря) пишете "name="boo"" и у Вас появляется класс с методом getName(), возвращающим boo
                                      Ответить
                                      • разработчик может обозвать это как угодно
                                        name="boo";
                                        title="boo";
                                        index="boo";
                                        marker="boo";
                                        pointer="boo";
                                        ...
                                        (ps. я не знаком с jaxb)
                                        и разве jaxb это всё сериализует именно в getName()?
                                        для того, чтобы другой разработчик понял о каком именно "названии" идёт речь.
                                        "boo"=getName() в различных проектах может быть чем угодно, начиная от сообщения пользователю, до названия объекта, и тд.
                                        Метр (например) - это стандартная величина, что такое метр все знают, и применяют это понятие именно в правильном контексте.
                                        Любой инженер поймёт, если указано 3 метра, значит речь идёт о протяжённости чего-то.
                                        Или если написать "Плотность=1кг/куб. дм"
                                        ясное дело что тут имеется ввиду физическое свойство объекта - плотность.
                                        В программировании же всё расплывчато. В программировании словом плотность можно обозвать любое свойство.
                                        ( я сейчас абстрактно выражаюсь, заместо плотности может быть что угодно )
                                        --
                                        через много лет после окончания учёбы до меня наконец дошло, что стандартизация и метрология не такая уж и плохая вещь
                                        --
                                        Цитата из Revolution OS: "...одним из многочисленных аспектов open source, является то, что в самом проекте лучше всего разбирается сам разработчик этого проекта..."
                                        Ответить
          • >>менее говниста?
            да.

            bool[] {true, false, true} менее говнисто чем String boo = "+-+".
            Ответить
    • ух ты, упаковка данных в двоичную форму...

      нуну, так и до стеганографии недалеко )
      Ответить
    • За Pow задницу бы отрубил однозначно.
      Ответить
    • ах, лол, битмап и pow(2, n) рядом, прелестно
      Ответить

    Добавить комментарий