• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Lotus Analyzer V1.6

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Omh
по DIMмам я хочу придумать что-то ядовитое, но еще пока не продумал как грамотно это выплюнуть
поэтому когда обьявляеться переменная и сразу инициализируется вместо нормального (SET Var = New ...) то считаю уже неправильно
как минимум наверно заставлю все ДИМы обьявлять с самого верху а что больше еще не решил

Разброс шрифтов и их цветов просто ядовитейший.
так утилита то тоже вроде как не бальзам :)
хотя художник из меня еще тот, буду рад предложенной схеме цветов :)

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

Было бу неплохо иметь возможность копировать репорт в клипборд одним кликом (что-нить вроде uidoc.copy)
а смысл именно всё копировать, лично я копирую лишь ту строку, которую щас исправить нужно

При случайном нажатии кнопки "view all reports" твой текущий репорт пропадает бесследно (это я про анализ на стороне клиента)
это ж как так случайно тыцнуть то нужно? ;)
сдвинуть еще правее? ;)

Плюс если в форме/view/page анализируем action - shared, можно было бы это показать (хотя бы в скобочках).
с этим сложнее, на деле это совсем и не шаред, код явно присутствует на форме и у меня часто были ситуации, когда шаредовая кнопка разительно отличается он вставленной в форме - может дезайнер так глючит
 
O

Omh

минимум наверно заставлю все ДИМы обьявлять с самого верху
Если что, сильно против.
Почти всегда переменные объявляю по ходу действия:
т.е. не так:
<!--shcode--><pre><code class='vb'>Dim ws As New NotesUIWorkspace
Dim uiDoc As NotesUiDocument
Dim Doc As NotesDocument

Set uiDoc = ws.CurrentDocument
Set Doc = uiDoc.Document[/CODE]
, а так:
<!--shcode--><pre><code class='vb'>Dim ws As New NotesUIWorkspace

Dim uiDoc As NotesUiDocument
Set uiDoc = ws.CurrentDocument

Dim Doc As NotesDocument
Set Doc = uiDoc.Document[/CODE]

а смысл именно всё копировать
Это наверно личное, но я всю текстовую инфу ковыряю в notepad++
Ну это йствительно мелочь.

сдвинуть еще правее?
Не, я думал при пыцке на ту кнопку view с сохранёнными репортами открывать в новой вкладке, не закрывая текущую, что бы можно было всегда к ней вернуться.

код явно присутствует на форме
Это да и код "шаредного" экшена отличается от самого shared action пока не пересохранишь форму/view, но значёк, что это шаредный экшн хорошо было бы иметь.

Насчёт дизана, будет время постараюсь переделать первую страничку на то, как я это вижу (естественно, не претендуя на истину)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Почти всегда переменные объявляю по ходу действия:
однако при компиляции они ВСЕ обьявляются сразу
дебаггер - прямое подтверждение
а вот их инициализация и присвоение уже очень скольский вопрос
думаю тут стоит делать сразу так как это сделает компилятор и не потому, что я так хочу а потому как есть "нюансы"

один из которых:
1)
наверно многие заметили, что обьявление глобальных переменных и классов происходит нормально только в случае когда сначала описывается класс/тип а потом обьявляется переменная с этим классом/типом, если пробывать наоборот то иногда компиляция не происходит, еще интереснее когда в ходе выполнения кода выбивает ошибку на инвалид чего-то там

2)
при обьявлении переменных по ходу - компилятор теряет их из виду
простой пример есть код с обязательным Option declare но в какой-то момент можно начать не обьявлять переменные вообще и спокойно засейвить - решается только выходом из лотуса и очищением всех временных папок, тогда зайдя в код и чуть его поправив компилятор начинает ругаться на необьявленные переменные - возможно этот глюк дизайнера скоро и починят

3)
когда все переменные в функции обьявляешь в одну/две строки а не по ходу использования в 5-9 строк это смотрится компактнее и эстетичнее
 
O

Omh

Ну это конечно вопрос религии, но я никогда не объявляю переменные в одну строку.
И не очень люблю, когда первых полэкрана объявление переменных.

Анивэй, если будешь делать какие-то такие проверки, то сделай их активизируемыми по чекбоксу плз.
 
Y

Yakov

По-моему, нужно еще рубить использование оператора With. Потому что код, использующий With:
Код:
Dim doc As NotesDocument
With doc
.replaceItemValue "itemName", "itemValue"
End With
эквивалентен следующему:
Код:
Dim doc As NotesDocument
Dim tmpRef As Variant
Set tmpRef = doc
tmpRef.replaceItemValue "itemName", "itemValue"
То есть, здесь мы получаем недостатки использования переменных типа Variant, такие как невозможность проверки сигнатур методов на этапе компиляции. И ошибки (опечатки) вроде
Код:
With doc
.replaseItemValue "itemName", "itemValue"
End With
будут выявлены в момент исполнения кода.
И еще. Метод NotesDocument.replaceItemValue() - это функция, и поэтому в примерах выше показан неправильный синтаксис ее вызова. И если не использовать оператор With, придется писать явный вызов функции без использования ее результата:
Код:
Call doc.replaceItemValue("itemName", "itemValue")
 
N

nvyush

Осталось старое:
1) Ругается, что doc - лишний (contains unnecessary variables: doc)
<!--shcode--><pre><code class='LotusScript'>Dim doc As New NotesDocument(db)
Dim RTItem As New NotesRichTextItem(doc, "Body")
RTItem.AppendText "Some text"[/CODE]
2) В представлении ругается, что обработчик события OnSelect - лишний (unnecessary sub/fun: onselect)
3) Ругается: contains an of the same name variable: status
<!--shcode--><pre><code class='LotusScript'>Public Class NotesMessageQueue
...
Public Property Get Message As String
Dim status As Integer
...
End Property

Sub New(MQName As String, AutoClose As Integer)
Dim status As Integer
...
End Sub
...
End Class[/CODE]
По п. 1 можно переписать код, используя объявление переменной / присвоение значения
<!--shcode--><pre><code class='LotusScript'>Dim doc As NotesDocument
Set doc = db.CreateDocument
Dim RTItem As NotesRichTextItem
Set RTItem = doc.CreateRichTextItem("Body")
RTItem.AppendText "Some text"[/CODE]
Но это увеличивает данный фрагмент кода с трёх до пяти строк (на 67%). Кроме того, кмк, инициализация переменной при объявлении отрабатывает быстрее, чем последовательное объявление/присвоение. Но об этом лучше спросить у Yakov'a.
По п.2 мне не понятно, как обработчик события может быть лишним. (Данный обработчик появился в 8 версии)
По п.3 я согласен, что если глобальная и локальная переменные называются одинаково, то это скорее всего ошибка, но когда все локальные переменные методов классов должны иметь уникальные имена — это уже перебор.
 
H

hosm

По-моему, нужно еще рубить использование оператора With.
идея ничего, но поддерживаю вариант опциональности :)
И еще. Метод NotesDocument.replaceItemValue() - это функция, и поэтому в примерах выше показан неправильный синтаксис ее вызова.
в данном случае - неправильный с точки зрения единообразия кода или каких-то стандартов.

Но вообще-то, если делать глобальные проверки, то надо учесть, что есть небольшая разница в передаче параметров при вызове без скобок и передаче параметра со скобками без Call:
Syntax 1: Call subOrFunction [ ( [ argList ] ) ]
Syntax 2: subOrFunction [ argList ]
Syntax 3: subOrFunction ( argPassedByVal )
Syntax 4: (functions only) returnVal = function [ ( [ argList ] ) ]
When you omit the Call keyword, the following parenthesis rules apply:
For a sub or a function, do not use parentheses around the argument list (Syntax 2) unless you are passing a single argument by value to the sub or function (Syntax 3).
Вы считаете, что пользоваться вышеприведенным способом передачи параметров не есть гуд в принципе?
 
Y

Yakov

инициализация переменной при объявлении отрабатывает быстрее, чем последовательное объявление/присвоение.
Создание объекта при объявлении переменной - это так называемый синтаксический сахар. Оба варианта компилируются в идентичный (с разницей лишь в номере строки исходного кода) байт-код.

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

Вы считаете, что пользоваться вышеприведенным способом передачи параметров не есть гуд в принципе?
Нет, не считаю. Это вопросы соглашений (code conventions). В своем коде я предпочитаю использовать ключевое слово Call и ставить скобки. Если будет нужно передать параметр по значению, придется ставить "лишние" скобки.

Обсуждение LS перекочевало в соответствующую тему про Lotus Script, там же, чуть ниже, я показал немного магии несколько листингов дизассемблированного кода.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Сравнительный анализ по версиям на шаблоне "StdR6Mail" mail6.ntf (6.5.6 от 06.12.2006):
Версия Line codes Errors Correlation Time work
1.0 34285 532 1.5517% 99 sec
1.1 34331 793 2.3099% 102 sec
1.2 37258 891 2.3914% 117 sec
1.3 37258 943 2.5310% 119 sec
1.4 37258 1088 2.9202% 121 sec

Версия 1.4 - 25.12.2009
- исправлен подсчёт статистики когда анализ обрабатывается сервером
- добавлена проверка на правильное использование Doc items для UIDoc
- добавлена проверка переменных указанных как аргументы процедур/функций
- добавлена быстрая возможность отправить отработанный серверный анализ на повторное анализирование
- в описание добавлен сравнительный анализ по версиям
 
O

Omh

Смотрю 1.4:

ToxaRat, погорячился однако:
Код:
Sub Queryopendocument(Source As Notesuiview, Continue As Variant)
Сontinue = False
End Sub

Говорит
view: <VIEWNAME>: queryopendocument - contains unnecessary variables: source

Теоретически, оно конечно лишнее, но всё-таки ты от этой ошибки избавиться не сможешь.
Похоже, надо делить внутренние и самоопределённые ф-ии.
 
O

Omh

ToxaRat, идея!
Не хочешь добавить проверку на ф-ии/процедуры, которые не имеют errorhandler'a?
 
O

Omh

ToxaRat, будь добр, скажи, будут обновления?
Идея-то отличная, да и реализация, на мой взгляд, очень на уровне!
 
S

surfer79

Уважаемый автор!
Вы сделали хороший анализатор, за что вам спасибо!
Но вот говнить не надо было: зачем вы отсылаете отчет об анализе кода моего коммерческого приложения на ваш адрес?? Это возмутительно!


Дорогие коллеги, если вам важна не только эффективность вашего приложения, но и сохранение конфиденциальности, при использовании агента:
1. Установите место вызова "Без связи"
2. Анализируйте, все, что вам нужно.
3. После анализа откройте локальный mail.box и удалите все отчеты, которые добрый автор анализатора направил с свой адрес.
Злой пользователь - 05/25/2010 12:10:55 PM
 
N

nvyush

surfer79
Вообще-то автор честно предупреждает, о том что результаты (только результаты, но не сам код!) отсылаются на его адрес. Это так сказать условия лицензионного соглашения, хотите принимайте, хотите — нет. Приложение бесплатное, в своём роде уникальное, так что не понятно столь бурное возмущение этой его особенностью, кстати, легко обходимой.
ToxaRat
Продолжение следует?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
nvy
пасиб ;)
парень помешан на непонятно чем, боится спалиться, хотя не знаю, я например очень рад что ИБМ не боится опубликовать все свои ошибки и честно признаться всеми миру что они есть

да продолжение идет полным ходом, подключил уже анализ @-формул, теперь правлю логику(как свою так и анализатора ;))
плюс часть ошибок до сих пор не могу побороть - мало времени
но думаю в след. месяце точно опубликую
 
A

Akupaka

только результаты, но не сам код!
А есть этому подтверждение? Код авторского приложения открыт?

Возмущение весьма понятно. Не понятно, зачем юзать приложение, если условия не нравятся ))
Я вот не юзаю, и прекрасно себя чувствую ))


Тоха, продавай уже его Тимстудии ;)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Akupaka
А есть этому подтверждение? Код авторского приложения открыт?
тю, включи журналирование, настрой рулесы и т.д.
как перехватить письмо просто тьма решений и увидеть что там внутри, ко всему прочему копия приходит так же и тому кто на кнопку нажал

Тоха, продавай уже его Тимстудии
договоришься получить +10% от сделки, так что уговори их ;)
 
A

Akupaka

как перехватить письмо просто тьма решений и увидеть что там внутри
А вдруг ты не каждый раз шлешь мою секретную информацию к себе! )))
так что уговори их
У меня плохо с английским, да и не автор я. Потом будешь обвинять, что я тебя обманул в чем-то. Зачем мне это? ;)
 
N

nvyush

Мои эксперименты показывают, что байт-код в первом случае получается короче. Аналогичная картина для New NotesRichTextItem против doc.CreateRichTextItem. Так что использование New выгоднее. Правда он в COM не поддерживается, но для ЛС это не принципиально.
Посыпаю голову пеплом ;). Проверил Create против New для NotesDocument, NotesRichTextItem, NotesDateTime, во всех случаях получилось, что Create работает быстрее (на 5-20%). Справедливости ради стоит отметить, что первое исполнение всегда медленнее, отсюда и ошибка в link removed .
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!