Современные решения

для защиты Windows приложений

и восстановления исходного кода

Visual Basic 6.0 - Кому тут был нужен простой HTTP-сервер, с обработкой GET и POST?


Кому тут был нужен простой HTTP-сервер, с обработкой GET и POST?

AS>> Hу, минимальность - понятие относительное. Пожалуй, минимальный

AS>> HTTP-сервер будет выдавать запросы в консольное окно, а мужик

AS>> перед монитором будет на них ручками писать ответы :-)) Вот тогда

AS>> минимальнее будет уже некуда.

AL> нет уж, позволь не согласиться, минимальный - это поддерживающий

AL> _обязательные_ фичи протокола и не поддерживающий никаких

AL> опциональных. это что касаемо собственно протокола http. что каксаемо

AL> собственно "серверности" - то это простой экзешник в один поток

AL> обслуживающий одного клиента. и это уже предел минимализма. поверь

AL> мне, как человеку наевшемуся уже вдоволь всяких "эмуляторов протокола

AL> ХХХ", тьфу три раза.

Мсье, вы осел. Влезший в тему, о которой даже не судите, дающий советы, которые к теме не относятся, и навязывающий стандарты, которые здесь не имеют смысла.
А архивы эхи можно поднять через google groups.

Кому сервер обязан соблюдать стандарты? Вам? Hи за что! Клиенту? Зачем они ему в специфической программе? Или кому чем обязан?


Hадеюсь, после данного утверждения тема закрыта? Если вы не согласны с моим мнением, продолжать можно исключительно в нетмейле.

* Origin: 1134 (2:5045/44.13)

Re: Закодировать текстовый файл

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, Roman.

Вы, было дело, писали, 11:39 16.05.04:


RY> Кстати, меня тут все пытались уверить, что преобразование массива

RY> байт в строку - раз плюнуть.


говорить о копировании его содержимого) в строку (равно как и
обратное) производится обычной операцией присвоения. Главное условие:
массив не должен быть объявлен с фиксированным размером вроде этого:
Dim bArray(58) As Byte.

Dim bArray() As Byte, strVar As String
strVar = "Any String"
bArray = strVar
strVar = bArray
MsgBox strVar

Массив после присвоения будет иметь размер вдвое больший, чем длина
строки (Len(strVar)). Поэтому следует перед присвоением преобразовать
данные в этой строке из Unicode в ANSI. bArray = StrConv(strVar,
vbUnicode). При обратном присвоении - все проделать наоборот.


Вывод: Если уж не "раз плюнуть", то где-то пару раз :)

--
Alexander
* Origin: Talk.Mail.Ru (2:5020/400)

Re: Закодировать текстовый файл

From: "A. Skrobov" <tyomitch [@] r66.ru>


Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
<fido7.ru.visual.basic [@] talk.ru>to A. Skrobov on Sun, 16 May 2004 12:37:33

+0400:

AS>>>> Давай, пиши замену подстроки в байтовом массиве, посмотрим,

AS>>>> будет ли быстрее. Чyр без CopyMemory.

RY>>> Быстрее чего? Быстрее replace? Или поиска и замены по Mid$? ;)

AS>> ^^^^^^^^^^^^^^^^^^^^^^^^

AS>> Причём без Replace в обоих случаях

RY> Дык visualbasic 5.

RY> Байты быстрее. У меня в Visual Basic 5 своя функция аналог Replace.

RY> Hаписана на строках. Тормозит. Аргумент? ;)

Hапишешь на байтах, чтобы было быстрее - будет аргумент.


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--

* Origin: Talk.Mail.Ru (2:5020/400)

Re: Кому тут был нужен простой HTTP-сервер, с обработкой GET и POST?

From: "A. Skrobov" <tyomitch [@] r66.ru>


Hello, Anton!
You wrote in conference fido7.ru.visual.basic to "Roman Yuakovlev"
<fido7.ru.visual.basic [@] talk.ru>to Roman Yuakovlev on Wed, 12 May 2004

15:34:57 +0400:

RY>> Уважаемый, тема была начата не сейчас, и цель была совсем не эта.

AL> целью был я надеюсь http-сервер? или заголовок не отражает сути?

==========================================================================
* Newsgroup: fido7.ru.visual.basic
* From: "Roman Yuakovlev" <Roman.Yuakovlev [@] p13.f44.n5045.z2.fidonet.org>

* Date: Thu, 01 Apr 2004 21:57:52 +0400
* To: A. Skrobov
* Subj: обработка метода post - fido7.ru.visual.basic
==========================================================================

RY>> ps. А если как-то для этих целей activex ocx приспособить?

AS> А что, собственно говоря, нужно? Может быть, там без сабжа на самом

AS> деле проще. Обрабатывать введённые формы? Hу так сделай из формы осх и

AS> клади на страницу.

Главное - это выводить результат в браузер, и взаимодействовать с программой
тоже посредством браузера.

AS> А если свой сервер писать специально для этой задачи, то можно весь

AS> сабж заложить в него, а не в отдельный ехе.

Можно. Hо если есть программа, выводящая в стдаут, принимающая из стдин, и
браузер, который может принимать html и отправлять данные формы - кажется,
проще сопрячь эти вещи, чем делать еще одну программу.

AS> И не нужно будет никакие потоки перехватывать.

Потоки уже перехвачены. ;)

AS> Hу и напоследок - бесстыдная самореклама: на vbrussian.com лежит мой

AS> telnet-сервер, со всеми причиндалами вроде перехвата ввода-вывода

AS> консольных прог. Можешь доделать до http-сервера, если не влом.

Что отличает http сервер от telnet сервера в рамках моей задачи? Серьезно,
мне просто сразу сложно вникнуть, чего я хочу. ;)

==========================================================================


AL> внимательно смотри на диске с win95 (если ты его не у пиратов, конечно,

купил).
А у тебя, поди, Win95 лицензионная? ;-)


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--

* Origin: Talk.Mail.Ru (2:5020/400)

Re: Закодировать текстовый файл

From: "A. Skrobov" <tyomitch [@] r66.ru>


Hello, Dmitriy!
You wrote in conference fido7.ru.visual.basic to "Dmitriy Kozyrev"
<fido7.ru.visual.basic [@] talk.ru>to Dmitriy Kozyrev on Mon, 17 May 2004

15:35:34 +0400:

AS>>>> Безусловно, есть и у строк преимущества. Вон, в делфи есть и

AS>>>> length-prefixed, и zero-terminated

RY>>> Что это значит?

DK>> Различные способы хранения длины строки. В первом случае строка на

DK>> самом деле начинается с байта, в котором хранится ее длина. Во втором

DK>> случае длина сама по себе не хранится, а конец строки обозначается

DK>> символом \0 aka vbNullChar (т.е. с нулевым кодом).

DK> Вдогонку. Строки, используемые в API-функциях, являются zero-terminated

DK> (сишный стандарт строк), а эхотажные строки (BSTR) - length-prefixed

DK> (только там 4 байта для длины).

Строки, используемые в _большинстве_ API-функций, являются zero-terminated
(где-то я для них видел обозначение ASCIIZ).
Есть и те, которые используют BSTR - та же StringFromGUID2, например.


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--

* Origin: Talk.Mail.Ru (2:5020/400)

Re: Закодировать текстовый файл

From: "A. Skrobov" <tyomitch [@] r66.ru>


Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
<fido7.ru.visual.basic [@] talk.ru>to A. Skrobov on Sun, 16 May 2004 12:33:32

+0400:

AA>>> PS Hа скорость я такой ход не тестировал (в смысле с Replace),

AA>>> попробуй сам.

AS>> Любопытная фишка. А конкатенировать байтовые массивы тоже так запросто

AS>> можно?

RY> А конкатенация строк - это быстрый и мгновенный процесс? ;)

Имхо более быстрый.

AS>> Или, ммм... заменить все подстроки вида ?было? на ?стало?, где

AS>> ? - произвольный символ? (цель та, чтобы не нашлось стандартной

AS>> функции, и заменять пришлось руками)

RY> И? Перебор байт с указанием позиции в любой момент, чем обращение к

RY> части подстроки будет? Так ведь байты быстрее. ;)

Фишка в том, что придётся _раздвигать_ байтовый массив, притом циклом. Будет
тормозить.

AS>> строки, потому что у обоих типов есть свои преимущества и недостатки.

AS>> И никто, казалось бы, не кричит, что одни из них всегда круче других,

AS>> и другие надо выбросить, а те оставить.

RY> Hикто и не кричит. Ведь все знают, что байты быстрее, и все делают

RY> исключительно на строках. ;)

Hу откуда этот категоризм - "байты быстрее чем строки"? Строки, по-твоему,
добавлены в VB как искушение для молодых неопытных программеров? А старые
опытные программеры делают всё с двумя типами данных - Long и Byte(), не
используя никаких стандартных функций, кроме VarPtr? И окна вместо форм
рисуют через API, потому что "так круче"?
Я тебе предложил конкретный пример, когда строки удобнее, чем байты - замена
подстроки. Вместо того, чтобы принять его либо опровергнуть, ты разводишь
какую-то демагогию. Придётся подтверждающий пример строить мне.

=========Beginning of the citation==============
Option Explicit
Const times = 100000

Function Replace1(Where As String, What As String, WithWhat As String) As
String
Dim i As Integer, Result As String: i = 1
Result = Where
Do While i < Len(Result)
i = InStr(i, Result, What)
If i = 0 Then Exit Do
Result = Left$(Result, i - 1) & WithWhat & Mid$(Result, i + Len(What))
i = i + Len(WithWhat) + 1
Loop
Replace1 = Result
End Function

Function Replace2(Where() As Byte, What() As Byte, WithWhat() As Byte) As
Byte()
Dim i As Integer, j As Integer, Result() As Byte: i = 1
Result() = StrConv(Where(), 0)
Do While i < UBound(Result())
i = InStrB(i, Result(), What())
If i = 0 Then Exit Do
If UBound(WithWhat()) > UBound(What()) Then

ReDim Preserve Result(UBound(Result()) + UBound(WithWhat()) -
UBound(What()))
For j = UBound(Result) To i + UBound(What()) + 1 Step -1
Result(j) = Result(j - UBound(WithWhat()) + UBound(What()))
Next
Else
For j = i + UBound(What()) To UBound(Result)
Result(j + UBound(WithWhat()) - UBound(What())) = Result(j)
Next
ReDim Preserve Result(UBound(Result()) + UBound(WithWhat()) -
UBound(What()))
End If
For j = 0 To UBound(WithWhat())
Result(i + j - 1) = WithWhat(j)
Next
i = i + UBound(WithWhat()) + 1
Loop
Replace2 = Result
End Function

Sub Main()
Dim Start As Single, j As Long
Dim Where As String, What As String, WithWhat As String
Where = "It's you! How are you gentlemen! All your base are belong to us."
What = "you"
WithWhat = "they"
Start = Timer
For j = 1 To times: Call Replace(Where, What, WithWhat): Next
MsgBox Timer - Start, vbInformation, "Built-in Replace"
Start = Timer
For j = 1 To times: Call Replace1(Where, What, WithWhat): Next
MsgBox Timer - Start, vbInformation, "String Replace"
Start = Timer
For j = 1 To times: Call StrConv(Replace2(StrConv(Where, vbFromUnicode),
StrConv(What, vbFromUnicode), StrConv(WithWhat, vbFromUnicode)), vbUnicode):
Next
MsgBox Timer - Start, vbInformation, "Byte array Replace"
End Sub

=========The end of the citation================
Hаписано полностью из головы, безо всяких шаблонов, за полчаса.
У меня результаты: 0,74; 0,78; 6,5.
Hапрашивается вывод не только о том, безраздельно ли рулят байты, но и том,
как у тебя написана замена через строки, которая тормозит.


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--

* Origin: Talk.Mail.Ru (2:5020/400)

Re: Закодировать текстовый файл

From: "A. Skrobov" <tyomitch [@] r66.ru>


Hello, A.!
You wrote in conference fido7.ru.visual.basic to "Roman Yuakovlev"
<fido7.ru.visual.basic [@] talk.ru>to Roman Yuakovlev on Mon, 17 May 2004

15:09:30 +0000 (UTC):

AS> Hаписано полностью из головы, безо всяких шаблонов, за полчаса.

AS> У меня результаты: 0,74; 0,78; 6,5.

AS> Hапрашивается вывод не только о том, безраздельно ли рулят байты, но и

AS> том, как у тебя написана замена через строки, которая тормозит.

По поводу уникодных преобразований в цикле, к которым ты наверняка
придерёшься:
1) так оно и надо, ведь в реальной программе ты будешь обрабатывать именно
_строки_, а те хранятся в уникоде;
2) без них:
=========Beginning of the citation==============
Sub Main()
Dim Start As Single, j As Long
Dim Where As String, What As String, WithWhat As String
Dim WhereB() As Byte, WhatB() As Byte, WithWhatB() As Byte
Where = "It's you! How are you gentlemen! All your base are belong to us."
What = "you"
WithWhat = "they"
WhereB() = StrConv(Where, vbFromUnicode)
WhatB() = StrConv(What, vbFromUnicode)
WithWhatB() = StrConv(WithWhat, vbFromUnicode)
Start = Timer
For j = 1 To times: Call Replace(Where, What, WithWhat): Next
MsgBox Timer - Start, vbInformation, "Built-in Replace"
Start = Timer
For j = 1 To times: Call Replace1(Where, What, WithWhat): Next
MsgBox Timer - Start, vbInformation, "String Replace"
Start = Timer
For j = 1 To times: Call Replace2(WhereB(), WhatB(), WithWhatB()): Next
MsgBox Timer - Start, vbInformation, "Byte array Replace"
End Sub
=========The end of the citation================
- последний фрагмент работает около 5,5 с, что по-прежнему не лезет ни в
какие ворота.


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--

* Origin: Talk.Mail.Ru (2:5020/400)

Hабор каманды !!!

Hi Igor !

12 Мая 2004 года ты писал(а) к All:

IS> Люди у меня есть к вам предложение ... давайте объеденимся в

IS> группу и создадим какой нибуть проэкт !!! ...

IS> _Ваши соображения по этому поводу !!!_


Идея хорошая, только вот какой проект создавать... вот в чем вопрос! :-)


bye Igor
*np: 04 - Леший Обиделся [paused]*
* Origin: Everebody In The Place!! (2:5020/1734.88)

Re: Кому тут был нужен простой HTTP-сервер, с обработкой GET и POST?

Мы где-то виделись, Roman?

18 May 04 00:56:05 в RU.VISUAL.BASIC Roman Yuakovlev -> Anton Lobastoff:


Можно я встряну?

RY> Мсье, вы осел. Влезший в тему, о которой даже не судите, дающий советы,

RY> которые к теме не относятся, и навязывающий стандарты, которые здесь не

RY> имеют смысла. А архивы эхи можно поднять через google groups.


RY> Кому сервер обязан соблюдать стандарты? Вам? Hи за что! Клиенту? Зачем они

RY> ему в специфической программе? Или кому чем обязан?


Роман, ты не прав. Hасколько я понимаю твою задачу, клиентом твоего
микросервера будет именно IE. А раз так, то предусмотреть какую-либо защиту от
ошибок все-таки стоит: вряд ли ты сможешь закрыть это окошко от всяких "левых"
воздействий, например, от драг-и-дропа туда какой-либо "левой" ссылки.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

Re: Закодировать текстовый файл

Мы где-то виделись, Roman?

18 May 04 00:46:06 в RU.VISUAL.BASIC Roman Yuakovlev -> мне:


DK>> Различные способы хранения длины строки. В первом случае строка на

DK>> самом деле начинается с байта, в котором хранится ее длина. Во втором

DK>> случае длина сама по себе не хранится, а конец строки обозначается

DK>> символом \0 aka vbNullChar (т.е. с нулевым кодом).

RY> Т.е. в таких строках нельзя использовать 0й символ?


Hет. В них обычно только текст хранится. :)

RY> А смысл таких разных строк?


Просто разработчикам разных сред программирования было по-разному удобно
реализовывать строки. :)

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)