Category: it

Category was added automatically. Read all entries about "it".

Веселый носорог
  • yatur

Подарок от Microsoft (.NET Framework)

Приложение при определенных обстоятельствах умирает в муках, бросая из дебрей анализатора XAML NotImplementedException. К счатью, нам теперь дана возможность видеть исходные коды большой части .NET framework. К несчастью, в данном конкретном случае это мало помогает:

// Baml2006SchemaContext.cs, line 488
private XamlType ResolveBamlType(BamlType bamlType, Int16 typeId)
{
    Type type = ResolveBamlTypeToType(bamlType);
    if (type != null)
    {
         [calculate XType here...]
         return xType;
    }
  
    //
  
 
    throw new NotImplementedException();
}
Вот так вот по-челябински сурово. Не нашли, чего искали - значит, not implemented и баста. Длинные сообщения об ошибках - это для маменьких сынков. Пустой комментарий и две пустых строки после него - это не глюк форматирования, оно вот прямо так в коде. "Здесь могла быть ваша реклама". Самая большая засада в том, что к моменту издыхания информация о том, какой именно тип не найден затирается оптимизатором. Теперь я из-за этих добрых людей, вместо того, чтобы просто посмотреть в лог, должен будут писать небольшой профайлер, который будет отлавливать вызовы ResolveBamlType() и сообщать имя типа. O tempora, o mores.

UPD Спасибо все сочувствующим. Профалйер писать оказалось не надо. В Visual Studio нашлась очень полезная опция бряк поинта "When Hit...", которая позволяет выдать в окошко вывода сообщение, включающее значение переменной и даже выполнять макрос (впрочем, макросы в VS2012 убили, объявив нам что в сахаре потребности нет).

default
  • alexeiz

Кому сейчас легко?

void somefunc(bool val)
{
    assert(0 == val || 1 == val);
...

Пол дня пытался объяснить коллекам какой это говнокод. Выражение в ассерте всегда истинно! Иначе имеется неопределенное поведение. GCC возбухнул по этому поводу и правильно: "нефиг мной компилировать говнокод!" Тогда было решено засунуть этот код внутрь #ifndef __GNUC__.

Что делать? Как жить и работать в таких условиях?

PS: кстати, терпеть не могу индусские сравнения задом наперед.

?!!!

Java:

System.out.println( 1L << 64 );

пошёл читать спеки

upd Я чо хочу сказать. Конкретное место, где написано про округление найти легко. А вот какого лысого спек написан именно так? Гораздо более очевидным было бы поведение типа 1L << 64 == 0, т.к. не только я, но и мои коллеги, не раздумывая, дают именно такой ответ - не каждый же день с битами играешься.

ОК, я могу понять, что JVM спек написан, опираясь на "целевые архитектуры" (чтобы на них меньше работы было). Но это лишь делегирует вопрос от дизайнеров JVM к дизайнерам "целевых архитектур". В Intel Architecture описание SHL именно такое - т.е. округление операнда. Так вот, мой настоящий вопрос: ...какой ход мыслей оправдывает такое поведение SHL?

Я как-то верчу-верчу подходы к реализации битовых операций - чо-то не соображу, где бы это было полезно.

чё-то типа такого?:

// опустим вопрос эффективности для t==0, t==64, оставим вопрос консистентности

void shl( long [] x, int t ) {
  int off=t >> 6; 

  if( off < x.length ) {
    t &= 63; // это и вся экономия? но мне всё равно нужно округлять, чтобы SHR правильно работал
    long carry = x[x.length-1 - off] << t; // t==64 => если не округлять t до 0, то да, wtf
    for( int i = x.length-off-2; i >= 0; --i ){ // little-endian
      long v = x[i];
      x[i+off+1] = carry | (v >>> ( 64 - t )); // t==0 => округляй - не округляй t, а wtf
      carry = v << t; // t==64 => если не округлять t до 0, то да, wtf
    }
    x[off] = carry;
  }
  else off = x.length;
  for( int i=0; i < off; ++i ) x[i] = 0;
}



Остаётся вариант "Шарим электронику от ROL?"
default
  • alexeiz

здесь упяминули fortran?

Код на оном:

one = 5
two = 11
three = 42
. . .
eleven = 23 ! John said it should be so
. . .
thirtysix = 3
thirtysixhalf = 7 ! (целых чисел не хватило чуваку!)
thirtyseven = 13
. . .
fourtytwo = 19

Реальны код. Потом эти переменные разбросаны случайным образом по коду в несколько тысяч строк. И самый смак: парень был настолько уверен в своем коде, что с копи-пастил его с незначительными изменениями еще в пять файлов!
default

(no subject)

Недавно обнаружил в своем собственном Perl коде вот такое:

@words = split /,/, join(',', @words);

Долго думал, пока, наконец, не дошло, что за фигня.
Mememe
  • voituk

Тайпкастинг

Свежачок с форума phpclub.

Такой вот совсем нехитрый способ преобразовать обьект в строку:
$image = substr( " ".$xml->artist->image[2], 1);