tobotras: (Default)
Оказывается, многие не видели. Программа считает число «пи». Считает вычислением отношения площади круга к диаметру, как положено. Площади своего круга к своему диаметру :-) Её поэтому можно перерисовать большего размера — это увеличит, соответственно, точность :)

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}
tobotras: (Default)
Быстро возьмём на работу быстрого и самонаводящегося программиста на Java. Контакты в первой записи.
tobotras: (Default)
Как в программе показать -version, прочитав его из project.clj?

project.clj:
(def my-version "9.99")
(defproject my-project my-version
  :manifest {"Implementation-Version" ~my-version}
   etc)


core.clj:
(defn implementation-version []
  ;; Кажем версию софтины. Пропертя работает в lein repl, а getPackage().getImplementationVersion()
  ;; работает в JAR
  (or (System/getProperty "my.version")
         ;; Как сюда не хардкодить класс? Я думал, *ns*, но нет
      (-> (eval 'my.package.core) .getPackage .getImplementationVersion)))

(defn -main [& args]
  (println "I am the project, version" (implementation-version)))
tobotras: (Default)
Оригинал взят у [livejournal.com profile] tonsky в Кодефест-2015
Лучшие слайды в моей жизни. Так меня еще никогда не перло. В соответствии с традицией, слайды сразу с полным текстом доклада. Будет ли видео — 50/50, от организаторов зависит.

Щелкайте:


tobotras: (Default)
Интересно, что это я такое сапгрейдил, что у меня всё сломалось нафиг? (в своих исходниках ничего не менял)
$ lein uberjar
Compiling jira-time-spent.core
java.lang.ClassNotFoundException: clojure.tools.logging.impl.Logger, compiling:(clojure/tools/logging/impl.clj:16:1)

И Leiningen начал говорить, что надо :aot main, а то в версии 3.0 это неявное поведение отломают.

(Leiningen как был 2.4.3, так и остался, вроде. Сапгрейдил до 2.5.0, не помогло. Clojure аж 1.6.0-какой-то-SNAPSHOT попробовал, не помогло. См. тж. http://dev.clojure.org/jira/browse/CLJ-1544. Что это было?)

Да, это во всех проектах теперь у меня такое…

Upd: починилось выкидыванием :eval-in-leiningen true. Недоумение осталось.
tobotras: (Default)




Сигнализирует успешные/неуспешные билды, успешные/неуспешные тесты и блокеры. Красотишша.
tobotras: (Default)
Люди, которые добровольно, без угрозы извращённым насилием, придумали такой вот синтаксис:

<xsl:for-each
select="/pig-rescue/animal[position() &gt;= $start and position() &lt;= $end]


(И эти &gt; там не от того, что я это вставляю в ЖЖ, а прямо вот так и надо программировать!)

Так вот, люди эти я даже прям вот и не знаю, кто.
tobotras: (Default)
Слушаю на Курсере курс про автоматы. Не то, чтобы это было зачем-то всерьёз надо, но — посмотреть и послушать живого Ульмана — это же бесценно.

Ух ты!

Sep. 9th, 2014 09:40 am
tobotras: (Default)
Before going to the three-day Groovy-sabbath, I was going through some old C/C++ code and came across one of the most brilliant ways to initialize a pointer with an"undefined" value, which would work on a platform where 0x0 is a valid address for data. The code reads:

T* pT = (T*)&pT;

I wonder if they still teach students about fundamentals of this sort. Or do they start with thread pools and dynamic languages, disregarding the basic physics of software development?


Я бы не допёр :)
tobotras: (Default)
У линукса есть несколько механизмов ограничить процесс в доступных процессорных ядрах. Как минимум, cgroup и taskset. Если процессу важно знать, сколько у него ядер (чтобы сконфигурировать thread pool или ещё зачем-нибудь), то наивный способ -- прочитать /proc/cpuinfo. Он неправильный. Менее наивный -- позвать sysconf(_SC_NPROCESSORS_ONLN). Он тоже неправильный. Правильный -- вот:
  long num_processor_configured = sysconf (_SC_NPROCESSORS_CONF); /* list the number of processors configured */
  long num_processor_available;
  cpu_set_t mask;

  if (sched_getaffinity(0, sizeof(cpu_set_t), &mask) == 0) {
	num_processor_available = CPU_COUNT(&mask);
  } else {
	num_processor_available = sysconf(_SC_NPROCESSORS_ONLN);
  }
tobotras: (Default)
А чем
`(1 2 ,(+ 1 2))
лучше, чем
(list 1 2 (+ 1 2))
?
tobotras: (Default)
Никто из меня читающих не знает, случайно, никого, кто хотел бы придти к нам и стать частью ядра небольшой, но дружной команды разработчиков Дозора? Для этого требуется уметь и любить программировать на Схеме.

Upd: Практика функционального программирования, статья Использование Scheme в разработке семейства продуктов «Дозор-Джет», Алексей Отт.
tobotras: (Default)
СЯУ, как в Java 7 выглядит multi-exception catch, а в Java 8 -- лямбда. Некрасиво.
tobotras: (Default)


Экс-коллегам -- зачот!
Программистов -- с праздничком!
tobotras: (Default)
Хозяйке на заметку.

VARNAME=`что-то, выдающее имя переменной`
eval VARVALUE=\$$VARNAME
tobotras: (Default)
Объясните мне, почему System.console().readLine() возвращает String, а readPassword() -- char[]?
tobotras: (Default)
Given the fact that there are so many bad job descriptions for developers in the world, I’m writing down what I’m looking for in hopes that this person (you?) is out there:

  • Everyone knows that when you take on a task whether it’s huge and scary or tiny and boring, you’re going to see it through to the best of your ability.

  • It’s obvious to everyone around you that you have fun with your work and with your co-workers.

  • You care about how your work and attitude affects those around you. I mean really care. If you hurt someone, it hurts you. Everything you do runs through this filter.

  • You understand that communication is the biggest responsibility of your job as a developer and the one you’re least likely to get right unless you focus on it.

  • You focus on shipping software that matters to your users and that matters to the company you’re building it for.

  • You’ve experimented with and survived many different types of development and project methodologies, which has left you with a healthy appreciation for what works from the so-called “agile” methodologies and those that came before (and after) them.

  • You have no time for ceremony. Maybe you even hate it, but “hate” is too dogmatic a term.

  • You are humble enough to bend to the will of the frameworks, technologies, constraints, and people you work with when doing so won’t have a materially negative impact. In other words, you can play by someone else’s rules when that’s the easiest and/or best thing to do.

  • You make pragmatic (often boring) technology choices at work and you play in your free time. You don’t build science projects just because you are smart enough to build them.

  • You are confident enough that you don’t have to prove to anyone what a great developer you are, and therefore…

  • You don’t mind being the one that looks bad when you deserve it. You make mistakes sometimes, because you’re human, but rather than dwell on them you choose to fix and then learn from them.

  • You love to teach and learn from your co-workers.

  • You are confident with a number of programming languages, operating systems, and architectures. You probably have one of each you prefer right now, but you’re neither dogmatic nor myopic in your focus on it.


From my perspective, these are the things that matter.

I don’t care if you’re the smartest person I’ve ever met. I don’t care if you know everything about the technologies I’m deploying. I don’t want a “rock star”. I definitely don’t want a ninja. I don’t care if you write books, contribute to Open Source software, or speak at conferences. I do those things, and I know how little they predict how well I do my job.


Chad Fowler, Who I Want to Hire. (Это не тот Fowler, если что.)

СЯУ

Jun. 2nd, 2013 06:32 pm
tobotras: (Default)
Ну, точнее, знал я давно, а сегодня вербализировал — зачем при наличии CORBA & co эти красноглазые™ придумали Protobufs, Thrift & Co: для «мягкой» несовместимости клиента и сервера. Ну, в основном для этого. Там, где корба требует пересборки клиента для работы с новой версией сервера (ну, если менялся IDL), эти не требуют ничего. Ну, если новая версия сервера озаботилась обратной совместимостью, понятно.

PS: интересно, говорю я тоже с «ну» через слово?..

Profile

tobotras: (Default)
tobotras

July 2017

S M T W T F S
      1
23456 7 8
9 101112131415
16 1718 19202122
23242526272829
3031     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 20th, 2017 12:27 pm
Powered by Dreamwidth Studios