• Лекториум записал почти тысячу лекций за год

      Дорогой Хабр!



      У нас для тебя небольшой подарок. Мы тут работали-работали и вот чего сделали.
      Сняли и опубликовали почти тысячу лекций по IT и математике.

      UPD2 Помогите, пожалуйста, оперативно решить вопрос насчёт организации торрентов на php.

      Читать дальше →
    • Бинарная совместимость в примерах и не только

      • Tutorial
      Возможно, многие из вас задавались вопросами вроде «А что будет, если кто-то подложит к моему приложению неправильную версию библиотеки?». Вопрос хороший, а ответ на него и некоторые другие вы найдёте в этом топике. Для затравки задачка: пусть есть два интерфейса и класс, реализующий один из них:

      public interface A {
          //...
      }
      
      public interface B {
          //...
      }
      
      public class C implements A {
          //...
      }
      

      А также класс, в котором есть метод foo, перегруженный для A и B. Этот метод вызывают от экземпляра класса C:

      public class CompatibilityChecker {
      
          public String foo(A a) {
              return "A";
          }
      
          public String foo(B b) {
              return "B";
          }
      
          public static void main(String[] args) {
              CompatibilityChecker checker = new CompatibilityChecker();
              System.out.println(checker.foo(new C()));
          }
      }
      

      Вполне очевидно, что выведется «A». Не менее очевидно, что если сказать, что C implements A, B, то получится ошибка компиляции (тем, кому последнее не очевидно, могу порекомендовать почитать про то, как происходит выбор методов. Например, в стандарте в разделе 15.12.2 или в более просто описывающих местах).
      Но вот что произойдёт, если мы перекомпилируем только C.java, а потом запустим CompatibilityChecker из уже имеющегося класс-файла, является уже более сложным вопросом. Заинтересованы? Прошу под кат!
      Читать дальше →
    • Предвзятость выжившего

      • Translation
      Читаете ли вы бизнес-блоги, в которых автор раз за разом описывает свои неудачи?
      Нет, потому что вы хотите перенять успешный опыт, а не узнать о полученном опыте от парня, который сам еще не преуспел.

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

      Приведу несколько историй, которые помогут понять серьезность этой проблемы.

      Следы от пуль


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

      Желая увеличить вероятность возвращения экипажей домой, британские инженеры изучали расположение следов от пуль. Инженеры считали, что в тех местах, где больше всего попаданий, нужно дополнительно бронировать корпус самолета. Разумеется, была найдена закономерность: много следов располагалось на крыльях, хвосте и в районе хвостового пулемета. На кабине пилота и топливных баках следов было мало.

      Логично заключить, что нужно добавить брони в тех местах, где больше всего следов. Но это неверно.
      Читать дальше →