пятница, 24 июня 2011 г.

JavaScript. Случайная фраза из списка

Итак, у нас есть список наших любимых фраз, цитат, анекдотов или чего-то там ещё. Нужно выбрать наугад одну из этих фраз и показать у себя на сайте или в бложике, чтобы тем самым порадовать себя и позабавить посетителей. Для бложика перейдите в «Дизайн», добавьте новый гаджет «HTML/JavaScript» и скопируйте туда следующий код:

<div id="myphrase">
</div>
<script type="text/javascript">
var div = document.getElementById("myphrase");
var lst = new Array();
lst.push("Моя любимая фраза номер один.");
lst.push("Моя любимая фраза номер два."); 
lst.push("Моя любимая фраза номер три."); 
lst.push("..."); 
lst.push("Моя любимая фраза номер стопицот."); 
div.innerHTML = lst[Math.floor(Math.random() * lst.length)];
</script>

Пример работы этого скрипта можно видеть справа (под ссылкой на мой профиль). Фраза меняется при каждом обновлении страницы. Учтите только, что если в вашем списке мало фраз, то одна и та же фраза может радовать ваш взор несколько раз подряд. А чем фраз больше, тем, соответственно, меньше вероятность выбора одной и той же.

Первая строка кода — это блок div, в котором будет помещаться выбранная фраза. При желании можно поработать со стилем этого блока, задав, к примеру, цвет текста или шрифт. В таком случае первая строка примет какой-то такой вид:

<div id="myphrase" style="color: green; font-size: small; font-style: italic;">
</div>

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

При помощи строк lst.push("какой-то текст"); мы добавляем наши фразы. Строчек этих можно добавить сколько угодно, но не забывайте про точку с запятой в конце каждой строки. Кстати, в тексте фраз можно использовать теги HTML.

понедельник, 13 июня 2011 г.

VB.Net. Пересылка данных по локальной сети

Итак, в качестве примера пересылки данных по локальной сети сделаем простейший чат. В нашем случае будем пересылать текст в кодировке Юникод, но в общем случае это может быть любая последовательность байт. Пересылку организуем при помощи классов UdpClient и Socket из пространства имён System.Net.Sockets.

Отправляем данные мы при помощи функции SendTo(b, ep) экземпляра класса Socket, где b — массив байт (наши данные), а ep — конечная точка (экземпляр класса System.Net.IPEndPoint, для инициализации которого нужно знать IP-адрес и порт адресата).

При загрузке формы запускается таймер, в обработчике события Tick которого мы опрашиваем порт нашей машины, на который должны поступить ответные данные, и получаем их при помощи функции Receive(ep) экземпляра класса UdpClient.

IP-адрес 127.0.0.1 — это так называемая петля. Т.е. данные, отправленные на этот адрес, возвращаются нам.

Полный код формы приведён ниже:

Public Class Form1

    Private lport As Integer
    Private udpc As Net.Sockets.UdpClient
    Private soc As Net.Sockets.Socket
    Private sent As Boolean = False

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        lport = 9999
        udpc = New Net.Sockets.UdpClient(lport)
        soc = New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Dgram, Net.Sockets.ProtocolType.Udp)
        If ComboBox1.Items.Count > 0 Then ComboBox1.SelectedIndex = 0
        TextBox2.Select()
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If udpc.Available > 0 Then
            Dim ep As New Net.IPEndPoint(Net.IPAddress.Any, lport)
            Dim b = udpc.Receive(ep)
            Dim txt = System.Text.Encoding.Unicode.GetString(b)
            TextBox1.Text &= String.Format("{0:HH:mm:ss} from [{1}]:{3}{2}{3}----------------------------{3}", Now, ep.ToString, txt, ControlChars.NewLine)
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox2.Text.Length > 0 AndAlso ComboBox1.Text.Length > 0 Then
            Dim b = System.Text.Encoding.Unicode.GetBytes(TextBox2.Text)
            Dim ipadr = Net.IPAddress.Parse("127.0.0.1")
            Net.IPAddress.TryParse(ComboBox1.Text, ipadr)
            Dim ep As New Net.IPEndPoint(ipadr, lport)
            soc.SendTo(b, ep)
            TextBox1.Text &= String.Format("{0:HH:mm:ss} Me (to [{1}]):{3}{2}{3}----------------------------{3}", Now, ep.ToString, TextBox2.Text, ControlChars.NewLine)
            TextBox2.Text = ""
            TextBox2.Select()
            If Not ComboBox1.Items.Contains(ComboBox1.Text) Then ComboBox1.Items.Add(ComboBox1.Text)
        End If
    End Sub

    Private Sub TextBox2_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
        If e.Control AndAlso e.KeyCode = Keys.Enter Then
            Button1_Click(Nothing, Nothing)
            sent = True
        End If
    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        If sent Then
            TextBox2.Text = ""
            sent = False
        End If
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        TextBox1.SelectionStart = TextBox1.Text.Length - 1
        TextBox1.SelectionLength = 1
        TextBox1.ScrollToCaret()
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Timer1.Stop()
        udpc.Close()
        soc.Close()
    End Sub
End Class

Архив с проектом Visual Studio:

NetTest.zip (105 КБ)

VB.Net. Как объявить массив

Одной строкой объявить и инициализировать массив можно так:

Dim arr = New ТипЭлементовМассива() {значение0, значение1, значение2 и т.д.}

Где это можно использовать? Ну, например, при задании первичного ключа для таблицы, который должен быть массивом колонок этой таблицы:

Dim dt As New DataTable
dt.Columns.Add("id", GetType(Integer))
dt.Columns.Add("name", GetType(String))
dt.Columns.Add("description", GetType(String))
dt.PrimaryKey = New DataColumn() {dt.Columns("id")}

понедельник, 6 июня 2011 г.

Инту 1.0 — Проверь свою интуицию (C#)

Инту 1.0 — это маленькое приложение для проверки интуиции. Ваша задача — угадать символ, скрытый за знаком вопроса. Старайтесь долго не раздумывать, просто гляньте на кнопки и нажмите на первую попавшуюся. Постарайтесь почувствовать, какой из символов, изображённых на кнопках, появится в следующую секунду вместо вопросительного знака. Чтобы приступить к следующему опыту, нажмите ещё раз любую кнопку или щелкните по полю с символом. Чем больше опытов вы сделаете, тем точнее будет результат. Программа запоминает текущий результат перед закрытием. Чтобы обнулить результаты, нажмите на строку «Результат».

ОС: Windows
Требования: Microsoft .NET Framework 3.5
Лицензия: Freeware
Язык: Русский
Версия: 1.0


Intu.zip(31 КБ)Исполняемый файл
IntuProj.zip(227 КБ)Проект с исходниками для Visual Studio 2008

понедельник, 18 апреля 2011 г.

Сказ про Путяту

Стало быть, жил у себя в усадьбе знатный боярин Мстислав Всеволодович, хорошо жил да горя не знал. И была у боярина дочь Велена, красавица да умница каких поискать. И вышло так, что гостил у Мстислава княжий гридень Путята, могучий воин не ведавший страха, одолевший в жестокой сече три сотни печенегов (сам-то я не видал — люди сказывали). Но так мила и пригожа была Велена, что стоило Путяте увидать ее, позабыл он обо всем на свете, так и застыл с разинутым ртом, аки истукан, слова путного вымолвить не мог. Уж и не ведаю, что Велена в нем отыскала, а приглянулся и ей славный Путята. Порешили они, стало быть, свадебку по осени сыграть, а чего ж тут думать долго.

И вот возвращался как-то Путята после княжьего поручения с верными другами своими в усадьбу Мстислава, дабы испросить у того отеческого благословения. Велена же знала о том и не могла на месте усидеть. Так спешила она возлюбленного вновь увидать, что решила на встреч ему идти. Батюшка, понятное дело, против был, да уступил девичьим слезам, отпустил-таки с верными охранителями.

Уж и не ведаю как, да только прознал о том хитрый и коварный, но благородный и отважный предводитель лесных разбойников Морахес, давно точивший зуб на Мстислава. Недоброе замыслил: продать прекрасную Велену суровым урманам, приплывшим из-за северного моря. Собрал он верных лихих людей своих числом не менее дюжины, а также и увальня Давилу, наводившего страх на все окрестные селения, и учинил засаду на поляне лесной, по которой Велена пройти должна была.

Храбрые воины были в охране Велены, да только повыскакивали лихие люди впереди из кустов, поспрыгивали позади с деревьев, и начали охранителей подло побивать. До последнего защищали Велену верные воины, да не сдюжили супротив Давилы-увальня да Морахеса коварного — все полегли. Схватил Морахес несчастную Велену, недобро ухмыляясь, белы рученьки веревкой стал скручивать, а разбойнички тем временем с павших защитников обувку да броню стаскивать принялись, оружие да кошели отбирать.

Но не успели злодеи довершить свое черное дело — ступил на поляну славный Путята с другами своими хоробрыми. Увидал он, что лихие люди учинили, и ярость обуяла его. В безумии выхватил он меч и бросился на разбойничков, а други Путятины лишь немного от него отстали. Звон оружия, треск щитов, крики и проклятия раздавались со всех сторон. Путята прорубал дорогу к Велене не видя ничего вокруг. И не раз спасали его верные товарищи от лютой смерти. Насилу управились воины с могучим Давилой — повалили его наземь, стали ногами поколачивать. Коварный Морахес тем временем ловко рубил неприкрытые спины.

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

Тут и немногие выжившие други верные, Давилой оглушенные, очнулись. А Путята с белых рученек девичьих веревки разбойничьи снял, оземь их грянул да милую свою обнял. Жили с тех пор они долго и счастливо! И свадебку скоро справили. Я сам на той свадьбе был, мед-пиво пил!..

Го вверх!