Техническая поддержка :

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

для защиты Windows программ

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

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Кому тут был нужен простой 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

Привет, 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"

Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
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"

Hello, Anton!
You wrote in conference fido7.ru.visual.basic to "Roman Yuakovlev"
to Roman Yuakovlev on Wed, 12 May 2004
15:34:57 +0400:

RY>> Уважаемый, тема была начата не сейчас, и цель была совсем не эта.
AL> целью был я надеюсь http-сервер? или заголовок не отражает сути?
==========================================================================
* Newsgroup: fido7.ru.visual.basic
* From: "Roman Yuakovlev"
* 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"

Hello, Dmitriy!
You wrote in conference fido7.ru.visual.basic to "Dmitriy Kozyrev"
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"

Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
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"

Hello, A.!
You wrote in conference fido7.ru.visual.basic to "Roman Yuakovlev"
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)



Назад Содержание Вперед




Главная     Программы     Статьи     Разное     Форум     Контакты