zmila: (3kub)
заўважыў, што на працоўным кампутары зараз усталяваныя 2 экліпсы juno (4.2), 2 kepler (4.3) - прычым у адным з іх 2 варкспейсы, і пазаўчора спампаваў яшчэ і luna (4.4, для 8й жабы) • а недзе ў архівах заваляўся здаецца 3.3, разам з жабай 1.4, бо той стары праект кампіляваўся і выконваўся ў нейкім вельмі даўнім атачэньні •
zmila: (lunlumulo)
кажуць, Java8 выйдзе летам 2013, а там ужо будуць
  • lambdas, filter-map-reduce над калекцыямі,
  • StringJoiner and String.join(...) are long, long overdue. They are so long overdue that the vast majority of Java developers likely have already written or have found utilities for joining strings
  • Objects.isNull(Object)
  • The new date/time API in Java 8 is contained in the java.time package
zmila: (bicikla neĝero)
dbjavaui (jsp)
create table T_WORK_ORDER {

  ORDER_ID number(10,0) not null,

  ORDER_NO varchar2(100) not null,

  ...
@Id @Column(name = "ORDER_ID")
public long getId() { return id; }

@Column(name = "ORDER_NO")
public String getWoNumber() { return woNumber; }
...
public List<WorkOrder> getWorkOrders() { ... }
<select id="ddlWorkorders" name="selectedWO">
  <c:forEach items="${workorders}" var="wo">
    <option value="${wo.id}">${wo.wonumber}</option>
  </c:forEach>
</select>


выдзеленыя тлустым не правяраюцца на этапе кампіляцыі, але ўнязапна падчас працы падаюць з эксцэпшэнам (часам бязглуздым) недзе ў фрэймворку •

а null ці Option[T] - гэта сапраўды дробязі (там або дыктатура і ўсіх абавязаць ужываць null object pattern або давесьці да аўтаматызма праверкі if ( x != null ) на кожным кроку)
zmila: (bicikla neĝero)
народ, может ли мне кто-нибудь показать статьи, посты про то что IDE - это круто, это правильно, а всякие недоредакторы типа Emacs - это для недоумков (которые не смогли освоить Eclipse) или нищебродов (которые не смогли купить IntelliJ) или для неудачников (которых заставляют сидеть в MS Visual Studio)?

я очень часто встречаю тексты обратного направления: "эмакс - наше всё, это как мотоцикл Минск, я на нём могу и в ларёк за пивом съездить, и к другу на дачу, а если захочу, то и по пустыне пройдёт и по тундре • а уж как его можно тюнить и затачивать под себя! можно повесить наклейку от Хонды, можно (на ходу) поменять местами заднее и переднее колёса, если немного напрячься, то можно поставить движок от БМВ • а эти ваши ИДЕ - это как трактор Белаз, на нём только в карьер, добывать руду по 8 часов в день • и вообще, они всё делают за вас, там всего две кнопки Старт и Стоп, и поэтому они отупляют, вы ничего не понимаете, как всё происходит • то ли дело, я на своём моцике - я слышу, как топливо течёт по шлангу, чувствую, как срабатывает искра, вижу какого цвета выхлоп, рукоятки газа и тормоза имеют по 30 положений и я могу их комбинировать как захочу • а если что-то пойдёт не так, я всегда могу затормозтиь ногой, если что-нибудь сломается, я всё могу починить в поле при помощи проволки и изоленты, да в крайнем случае поднял на руки и понёс"

то, что есть много шума от сторонников эмакса, заставляет меня подозревать, что его пользователи имеют какую-то проблему, ощущают какой-то комплекс, и стараются оправдаться •
или я просто не там тусуюсь (читаю в основном лисперов и жаб(оскрипт)истов), и не вижу, что есть куча призывов: "все переходите на ИДЕ", "эмакс не нужен", "если замечу, что кто-то пользуется Вимом - уволю", "пользуешься Ноутпадом/Саблимом/ТекстМэйтом - вон из профессии" ?
zmila: (Default)
ізноў пераехалі на лецішча •
цяперача на працу дабірацца так: 25 хвіль пешшу, 5 хвілінаў квіток і чакаць ліпістрычку, 30 хвілінаў ехаць, 20 хвілінаў ісьці да охвіса (у выніку: каля 6000 крокаў) •
на ровары на працу з лецішча заязжаў трохі хутчэй - недзе за гадзіну дзесяць •
zmila: (bicikla neĝero)
WebSphere MQ - за паўгады ў тэчку errors накідала 154275 файлаў!
як мне цяпер гэта ўсё пачысьціць?
zmila: (bicikla neĝero)
спампаваў я гэны ваш гіт - распакаваў, а гэта 210 МБ!
каманд-лайн уцілітка •
асноўны цяжар - тэчка libexec\git-core, дзе ляжаць 106 файлаў роўна па 1`281`536 байтаў кожны!

і дарма пампаваў, аказваецца git clone можна рабіць проста з ўэба праз пімпачку "Download as zip" •
zmila: (Default)
на восьмым паверсе зараз ужо вісіць ня толькі швэдская сьцяна, але і турнік - таму зараз можна будзе часьцей выпадкова сустракаць койкаво :)
сёмы паверх паўпафарбавалі ў мяртвяцкі сірэневенькі колер - калідор стаў выглядаць больш вузейшым, фу
а на нашым шостым нехта разьвіў думку, працягнуў лагічаскі рад:
zmila: (bicikla neĝero)
не (да канца) праглядзеў прэзэнтацыю Clojure: Towards The Essence Of Programming але прачытаў адну з рэакцыяў на яе з боку Скалы
згодны з аўтарам: скала амаль таксама як і клажура дазваляе пісаць больш сэнса, і меней займацца цэрэмоніямі - у параўнаньні з жавай •
былі некалькі думкаў пра дастаткі і недастоінствы абедзьвюх моваў - але толькі занатую прыгожую параўнаньню: скала гэта меч, універсальная зброя, ею можна і калоць і рубіць і рэзаць; клажура жэ - гэта як шпага, карыстальнік вымушанны быць больш вопытным і вытанчаным •
ну і скальная магчымасьць ужываць і мутабельныя і немутабельныя тыпы - гэта як закон аб дзьвюхмоўі ў РБ - калі можна і тое і гэтае, тады маем тое што маем ... 

але
вось зараз зноў мяне пераймае жаваўская немагчымасьць лёгка перерабіць функцыю (нават ланцуг функцый: ui - bean - dao), якая чытае з БД нейкі параметр у функцыю, якая вяртае два параметры •
даводзіцца або вяртаць масіў (і гудбай статычная праверка тыпаў) або ствараць новы клас - dto •
zmila: (bicikla neĝero)
CommonQueries.java:
    final static public String GET_ZZZ_QUERY =
      "select ZZZ_NO as ZZZ_NBR, ... from T_ZZZ where ...";


CommonConstants.java:
    final static public String ZZZ_NUMBER = "zzz_nbr";


CommonDAO.java:
   public String getZZZ( final int id ) {
    ...
    final PreparedStatement ps = connection.prepareStatement(CommonQueries.GET_ZZZ_QUERY);
    ps.setInt(1, id);
    final ResultSet rs = prepareStatement.executeQuery();
    if (rs.next()) {
      final ZzzDto zzz = new ZzzDto();
      zzz.setZzzName( rs.getString( CommonConstants.ZZZ_NUMBER ) );
      ...
      return zzz;


EditZzzForm.java:

   public void init() {
     ...
     final ZzzDto zzz = dao.getZZZ( dbId );
     this.setShortName( zzz.getZzzName() );
     ...


editZzz.jsp:
   <html:form>
     ...
     <td><bean:message key="zzz.short_name"/></td>
     <td><html:text name="editZzzForm" property="shortName" /></td>


commonResource.properties:
   zzz.short_name = Zzz:


усе супадзеньні з рэальнай працай - выпадковыя :)
zmila: (Default)
7мы паверх - дзяўчачы запаведнік • праходзіў зараз паўз ядальню: усе 5 столікаў занятыя, за кожным сядзяць па 3-4 паненкі •

cytaten

Jun. 16th, 2011 03:52 pm
zmila: (bicikla neĝero)
звычайна, калі праграмеру даюць заданьне "напісаць жавадок да кожнага метада", ён з ахвотаю бярэцца за гэтую творчую працу і выдае сотні апісаньняў кшталту:
/** Gets contact list.
* @return contact list.
*/
public List<Contact> getContactList() {


але знайшоўся красамоўны індус аўтар, які напісаў:
/** @desctiption This method takes references of different utility classes and use them to execute
* the functionality of this action class by calling all the other methods of this
* class and also forwards the request to appropriate class or page. It also throws
* the exception if any and generates appropriate error messages on the screen and
* browser
* ...

я з апісаньня зразумеў толькі, што гэты метад кудысьці фарвардзіць рэквест і калі нешта ня так, кідае эксцепшн і генерыць паведамленьне аб памылцы •

кароча, інструкцыя па ўжываньню: "уключыць, і яно робіць нешта, або загараецца нейкая лямпачка" •
zmila: (Default)
ms vs installed successfully - problem: ms vs installed successfully - problem

haskell is vise versa, failed with error - successfully: haskell failed with error - successfully

more )
zmila: (bicikla neĝero)
у нашым праекце ўжываецца бібліятэка Apache POI - каб ствараць аччоты ў фармаце мс-ёксель •

я зрабіў аптымізацыю генерацыі адчотаў - выдаліў/зьменшыў код, які будуе прамежкавую структуру • пры гэтым згубілася фарматаваньне лікаў і датаў • паглядзеў, як рабілася раней, скапіяваў • цяпер лікі фарматуюцца дакладна, але даты ў выніковым файле выглядаюць як лікі • некалькі гадзінаў шукаю, у чым розьніца паміж маім генератам і ранейшым • нарэшце знайшоў • клясычны пралёт выбару:
switch (dataType) {
  ...
  case DECIMAL:
    cell.setCellValue( formatAsDouble( value ) );
  break;
  case DATE:
    cell.setCellValue( formatAsDate( value ) );
  default:
    cell.setCellValue( new HSSFRichTextString( value ) );
}


то бок выпадкова даты былі перадапошнім варыянтам выбару, памылкова быў прапушчаны break пасьля гэтага варыянту, і спрацоўваў перадвызначаны выпадак, які запаўняў экселевую цэлю тэкстам, які ў дадзеным выпадку дат выглядаў як "10/10/2010" • памылка ў бібліятэцы была схаваная памылкай праграміста •
я ж у сваёй копіі па-вумнаму паставіў break пасьля кожнага варыянту, і пакутаваў, што не працуе •
zmila: (bicikla neĝero)
нашыя, месныя "праграмісьцішкі" навучыліся нарэшце юзаць for (final Element element : collection) {} • добра, але што ж рабіць, калі ўнутры цыкла патрэбны індэкс элемента? ровар вынаходзіць ня трэба, можна проста напісаць final int index = collection.indexOf(element); - вуаля! пэрфоманс падае ў 10 разоў калі колькасьць элементаў парадка 1000, а калі пераходзім на нармальныя irl колькасьці пад 10000 дык і гальмаваньне большае ў 2000 разоў •

іншы выпадак: недзе ў службовым, агульным кодзе ёсьць публічная статычная функцыя, якая прымае калекцыю айдзішак, генеруе па іх калекцыю назваў, і стварае адпаведную колькасьць пустых аб'ектаў з дадзенымі айдзі і назвай •
пішам нашу бізнэс лёгіку: атрымаўшы сьпіс айдзі, адфільтраваць па некім крытэры, і паклікаць тую, каб стварыць аб'екты • усё проста, цыкл па сьпісу айдзі, праверка, ці задавальняе айдзі крытэру, калі так, тады ствараем пустую калекцыю, дадаем гэты айдзі, выклікаем службовую функцыю (яна ж хоча калекцыю на ўваход!) •

наогул пасьля таго, як я трошкі папраграмаваў на ліспавіднай клажуры і пачытаўшы код, які пішуць калегі - думаю, наколькі ліспы больш высока-ўзроўневыя за жаву • і як шкада, што ў жабе ёсьць толькі гэтыя два ўніверсальны цыклы, у якіх просты беларускі праграмер, з незамутнёным рознай функцыянальшчынай мозґам, можа рабіць і апрацоўку ўсіх элементаў запар, і фільтрацыю, і згортку (ня кажучы про розныя пабочныя эфекты) •
zmila: (Default)
юзаў JProfiler каб аналізаваць, дзе гальмуе нашыя прогі (задэплоеныя на САП-аўскім серверы) •
а яшчэ ён здатны каб адкрываць і паказваць дампы памяці (hprof) - але толькі нізэнько-нізэнько, то бок на маёй ўорк-станцыі дамп у 460МБ адкрыць і паглядзець магчыма, а вось дамп ужо на 520МБ - jprofiler не вытрымлівае: грузіць-грузіць, а потым моўчкі вылятае (нават лог ня піша, што яму ня так) •

пашукаў у інэтах, прапануюць нейкі PerfAnal (нешта старое ад sun-а), HeapAnalyzer (ад IBM), і MAT (ад экліпса) •
спампаваў экліпсавую прыблуду, запусьціў - яна лёхка (і хуценька) адкрывае гэтыя дампы, паказвае розныя статыстыкі (і мае яшчэ процьму пімпачак, якія я яшчэ не спрабаваў тыцкаць) •

кароча, файная прожка
zmila: (Default)
пунцікі, якія пазьбавілі мяне некалькіх нэрўных клетак/каморак/вузаў

у эксэля ёсьць старонкі якія ня проста схаваныя, а вельмі схаваныя excel status="veryHidden"

у іё метад "дадаць сына" не працуе з бацькам тыпа сцэнар: document.createElement("script").appendChild( ... ) • добра, што магчыма проста ўставіць тэкст document.createElement("script").text = "..." •
zmila: (Default)
паляпшаў хуткасьць будаваньня адчотаў у адной з нашых праграмаў, сутыкнуўся з тым, што вельмі цяжка адшукаць дзе і калі ўжываецца пэўны клас, ну фігня нейкая, звычайны pojo • жменя гетэраў-сэтэраў, кожны торгаецца з процьмы месцаў • і запаўняецца кожны з такіх аб'ектаў цягам некалькіх метадаў, па-частах • кароча, і чорт і баба, і жук і жаба •
павыдаляў нахер усе сэтэры, пакінуў адзін канструктар дзе ўсё ініцыялізуецца, ўсе члены класа зрабіў final • знайшоў дзе чырвонае - не кампіліцца, перарэфактарыў • цяпер усё проста і чотка: усё ствараецца ў адным месцы • і можна прасачыць, чаму падчас будаваньня адчота з 4000 цэлямі пэўная функцыя завецца 4.5 мільёна разоў •
заптымізаваў час: было каля 1 хвіліны, зараз 10-13 сякундаў •

сёньня калегі аптымізавалі метады захоўваньня і вычытваньня, таксама скардзіліся, што шмат часу выдаткоўваецца на кланаваньне, "робім поўную копію DOM-а, бо пакінуць тую структуру - небясьпечна, невядома, дзе і калі і хто можа яе зьмяніць і ўсё паламаць" • казалі, што было б добра, каб наш DOM мог аддаваць пэўныя свае часткі як немадыфікуемыя калекцыі • я жартую: трэба пераходзіць на Scala (пра Clojure не згадваю, бо ня ведаюць, хаця і Скалу таксама ня чулі), дзе яўна дэкляруюцца зьменныя і нязьменныя аб'екты • яны мне: "а чым Жаба горш? тут таксама ёсьць UnmodifiableCollections" - я кажу, "пашукай, колькі раз у нашых 6227 жава-файлах ужываецца хоць адна з іх?" нуль цэлых, нуль дробных • і не таму, што ў жаве іх няма, не таму, што іх складана ўжываць, а проста таму, што ня ўмеюць і ня хочуць

а нядаўна калегі сутыкнуліся з праблемай: гібернэйт перад кожным insert-ам робіць дадатковы запыт, каб дастаць з oracle чарговы id з пасьлядоўнасьці (sequence) • аракловыя пасьлядоўнасьці гарантавана выдаюць унікальныя нумары, гібэрнэйт таксама па-за падазрэньнем • але неяк часам здараецца так, што ў базу лезуць запісы з аднолькавым id • недзе ў нашым кодзе адно й тое значэньне ўжываецца некалькі разоў • як знайсьці дзе і калі? я параіў: адшукайце на ўзроўні работы з БД усе зьменныя, якія не пазначаны як final, гэта будуць кандыдаты • калегі сьмяюцца • сьмейцеся, вам шукаць, а я пакуль займуся "Internet Explorer determines that a script is long-running by the total amount of statements the JScript engine has executed. By default, the value is 5 million statements" • трэба ўсё, што робіцца на кліенце, выконвалася часткамі ня больш чым 5 мільёнаў аперацый (а потым setTimeout і ў наступную частку) •
zmila: (Default)
/* class Row { ... public List<Cell> cells; ... */

for (final Row row : rows) {
	for (final Cell cell : row.cells) {
		final int cellIndex = row.cells.indexOf(cell);
		if (cellIndex == 0) {
			continue;// the first cell in row is heading cell so start calc from the second
		}
... 



этот indexOf меня убил • но за комент - плюсик в карму, да •
в другом месте этот же афтар использовал contains() для аналогичного определения, принадлежит ли ячейка матрицы первому столбцу • конечно, в тестовых прогонах на матрицах 30*5 ничего не заметно, но в боевых условиях, когда имеем пару тысяч на десяток-два ячеек ...
zmila: (Default)
    public void setDifferentCurrenciesDetected(final boolean differentCurrenciesDetected) {

        this.differentCurrenciesDetected = differentCurrenciesDetected;
    }

Profile

zmila: (Default)
zmi la

December 2016

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 21st, 2017 06:31 am
Powered by Dreamwidth Studios