Архив рубрики "программирование"
Итак, небольшой туториал на тему ASP .NET.
Там есть master-page. Вполне удобные штуки. Есть соблазн напихать туда всякого, например:
<script type="text/javascript" src="../js/jQuery.js"></script>
Кажется, круто — теперь у меня на всех страницах будет jQuery. Как бы не так. Фишка в том, что относительные пути будут считаться не от master-page, а от content page, которая использует этот мастер. И это большая жопа, на самом деле. Достаточно странице быть не на том же уровне в иерархии каталогов и у нас все скрипты отваливаются.
Замечу, что это касается только скриптов. В остальных случаях (картинки, цсс) работает волшебная тильда. «~» — это путь к головному каталогу приложения.
- Решение для тех, у кого сайт всегда в корне домена:
<script type="text/javascript" src="/js/jQuery.js"></script>
- Решение для нормальных людей:
public static class Extensions
{
public static void RegisterScript(this Control page, string scriptFileName)
{
RegisterScript(page, scriptFileName, 0);
}
public static void RegisterScript(this Control page, string scriptFileName, int index)
{
var tag = new HtmlGenericControl("script");
tag.Attributes.Add("type", "text/javascript");
tag.Attributes.Add("src", page.ResolveUrl(scriptFileName));
page.Page.Header.Controls.AddAt(index, tag);
}
}
Указание индекса нужно для разруливания зависимостей и вставки скриптов в самое начало элемента head.
Нашёл здесь
code coverage
Early one morning, a programmer asked the great master:
“I am ready to write some unit tests. What code coverage should I aim for?”
The great master replied:
“Don’t worry about coverage, just write some good tests.”
The programmer smiled, bowed, and left.
Later that day, a second programmer asked the same question.
The great master pointed at a pot of boiling water and said:
“How many grains of rice should put in that pot?”
The programmer, looking puzzled, replied:
“How can I possibly tell you? It depends on how many people you need to feed, how hungry they are, what other food you are serving, how much rice you have available, and so on.”
“Exactly,” said the great master.
The second programmer smiled, bowed, and left.
Toward the end of the day, a third programmer came and asked the same question about code coverage.
“Eighty percent and no less!” Replied the master in a stern voice, pounding his fist on the table.
The third programmer smiled, bowed, and left.
After this last reply, a young apprentice approached the great master:
“Great master, today I overheard you answer the same question about code coverage with three different answers. Why?”
The great master stood up from his chair:
“Come get some fresh tea with me and let’s talk about it.”
After they filled their cups with smoking hot green tea, the great master began to answer:
“The first programmer is new and just getting started with testing. Right now he has a lot of code and no tests. He has a long way to go; focusing on code coverage at this time would be depressing and quite useless. He’s better off just getting used to writing and running some tests. He can worry about coverage later.”
“The second programmer, on the other hand, is quite experience both at programming and testing. When I replied by asking her how many grains of rice I should put in a pot, I helped her realize that the amount of testing necessary depends on a number of factors, and she knows those factors better than I do – it’s her code after all. There is no single, simple, answer, and she’s smart enough to handle the truth and work with that.”
“I see,” said the young apprentice, “but if there is no single simple answer, then why did you answer the third programmer ‘Eighty percent and no less’?”
The great master laughed so hard and loud that his belly, evidence that he drank more than just green tea, flopped up and down.
“The third programmer wants only simple answers – even when there are no simple answers … and then does not follow them anyway.”
The young apprentice and the grizzled great master finished drinking their tea in contemplative silence.
hate
язык, в котором функции не могут возвращать значения и, по сути, являются процедурами, должен быть уничтожен.
Это я про abap — порождение немецкого гения.
opensource rocks!
Итак, есть у нас ERP — OpenErp (она же TinyErp). К ней есть мегапостроитель отчётов на базе OpenOffice org. Всё круто, в требованиях прописан требуемый офес: 2.3. Качаем, ставим, получаем мессагу «а где тут у тебя ОпенОфес 3.0? Не буду работать, пнх!»
Идём на сайт мегаподелки (опенофеса, т.е.). Видим, что последняя версия — 2.4.1. Да, 3.0 есть, но только релиз кандидат, поэтому его нет в репозиториях линуксов. Приплыли.
Окей, ищем альтернативные построители отчодов. Находим аж два.
- openreport.org — сайт тупо не открывается. Отлично.
- построитель для 2007 «мерзского» проприетарного офеса. Оно есть, качается, ставицо и падает с эксепшном на первом шаге построения отчода.
Это, блин, отжиг даже по сравнению с сапом. Там мы насчитали 9 (девять) официальных систем построения отчодов (не считая того, что можно коннектицо всякими отчотоклепалками от МС и Оракла) и все работают. Правда не так, как хотелось бы, но это — фича.
The probability of the original input list being in the exact order it’s in is 1/(n!). There is such a small likelihood of this that it’s clearly absurd to say that this happened by chance, so it must have been consciously put in that order by an intelligent Sorter. Therefore it’s safe to assume that it’s already optimally Sorted in some way that transcends our naive mortal understanding of «ascending order». Any attempt to change that order to conform to our own preconceptions would actually make it less sorted.
(c) не я.
sap games
нашёл игр, написанных на ABAP.
- minesweeper
- solitaire
- sokoban
- tetris
- battleships
- hangman
- some others :)
Часть скочал и запустил. Управление на f5-f8 неудобное.