Re[15]: Бейджи участников
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.10 17:24
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>


Так лучше, но все же было бы еще лучше если оттенок был бы ближе к оригиналу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Бейджи участников
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 19.03.10 22:11
Оценка: 174 (6)
Здравствуйте, VladD2, Вы писали:

VD>Так лучше, но все же было бы еще лучше если оттенок был бы ближе к оригиналу.


Релиз-кандидат



... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[17]: Бейджи участников
От: seregaa Ниоткуда http://blogtani.ru
Дата: 19.03.10 23:06
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Релиз-кандидат


кра-со-та! И с цветом имхо угадал — оттенок остался оригинальным, но стал чуть светлее, позитивнее )
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[2]: Бейджи участников
От: Lloyd Россия  
Дата: 19.03.10 23:16
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>


Кстати, чем-то ключ напоминает. Может как-то это обыграть?
Релиз
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 24.03.10 14:20
Оценка: 87 (1)
Сабж. Скрипт по-прежнему на http://nemerle.org/Banners . Принимает два параметра:

t — текст. Поддерживаются большие и маленькие буквы кириллицы и латиницы, а также цифры и символы. По умолчанию: t=DEVELOPER
g — гамма. dark или light. По умолчанию: g=light.

Т.е.:

http://nemerle.org/Banners/?t=HACKER&amp;g=light или просто http://nemerle.org/Banners/?t=HACKER дадут:



в то время, как http://nemerle.org/Banners/?t=HACKER&amp;g=dark даст:



P.S: Как и обещал в КСВ, больше никакого PHP. Теперь бейджи генерит чистокровный Nemerle-код с неплохой родословной от самого IT
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re: Релиз
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 24.03.10 14:49
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

Кстати, а не стоит на темном банере сделать-таки желтую луну? Или пусть так остается?
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[2]: Релиз
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.03.10 21:45
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Кстати, а не стоит на темном банере сделать-таки желтую луну? Или пусть так остается?


Мне так как есть сейчас очень нравится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Релиз
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.03.10 21:49
Оценка:
Здравствуйте, VladD2, Вы писали:

Ну ка, как там смотрится мой новый бэджик?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Релиз
От: IT Россия linq2db.com
Дата: 24.03.10 22:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну ка, как там смотрится мой новый бэджик?


Великоват.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Релиз
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 24.03.10 22:40
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, VladD2, Вы писали:


VD>>Ну ка, как там смотрится мой новый бэджик?


IT>Великоват.


Я чуть позже добавлю шаблоны еще для двух размеров в 1.5 меньше этого и в 1.5 больше (s=small|medium|large)

P.S: Могу еще сразу добавить автобан на RSDN'е тому, кто воткнет себе в подпись s=large
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re: Релиз
От: jenyavb  
Дата: 25.03.10 08:11
Оценка: +1
Здравствуйте, kochetkov.vladimir.

Выложи потом на сайте немерле сорцы всей графики, что рисовал, может кому пригодится.
Re[6]: Релиз
От: Shame Россия funtoo.org
Дата: 25.03.10 14:04
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Я чуть позже добавлю шаблоны еще для двух размеров в 1.5 меньше этого и в 1.5 больше (s=small|medium|large)


Хочу large >_<
الحقيقة:الشئ الوحيد الذي(لا)يصدقه الناس!ا الزواج : جمع.وطرح.ثم(ضرب)!ولكنه قبل ذلك(قسمة) المحامي:لسان.وحنجرة.وروب!يدافع عن مال موكله (أعزائي)!وهو لا يعرف أحد منّا!الطالب (الأول)على فصله!لولا وجود الأخرين
Re: Исходный код?
От: Mamut Швеция http://dmitriid.com
Дата: 17.05.10 07:42
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Сабж. Скрипт по-прежнему на http://nemerle.org/Banners . Принимает два параметра:


А можно одним глазком взглянуть на сорс-код? Интересу ради


dmitriid.comGitHubLinkedIn
Re[2]: Исходный код?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 17.05.10 07:52
Оценка: 36 (1)
Здравствуйте, Mamut, Вы писали:
M>Здравствуйте, kochetkov.vladimir, Вы писали:

KV>>Сабж. Скрипт по-прежнему на http://nemerle.org/Banners . Принимает два параметра:

M>А можно одним глазком взглянуть на сорс-код? Интересу ради

Ну только если одним, ибо код ужасен, т.к. это C#-way, а не Nemerle-way. И букву "Ш" прошляпил, ненароком.

Default.aspx:
<%@ Page validateRequest="false" Language="Nemerle" CodeBehind="Default.aspx.n" Inherits="Nemerle.Site.Banners.Default" contentType="image/png" EnableSessionState="False" enableViewState="False" %>


Default.aspx.n:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web.UI;
using System.Security.Cryptography;
using System.Text;

namespace Nemerle.Site.Banners
{
    public partial class Default : Page
    {
        protected Page_Load(_sender: object, _e: EventArgs) : void 
        {
            def appRoot = Server.MapPath(ResolveUrl("~/"));
            
            def text = 
                if (string.IsNullOrEmpty(Request.Params["t"])) 
                    "DEVELOPER" 
                else 
                    if (Request.Params["t"].Length > 64)
                        Request.Params["t"].Substring(0, 64);
                    else
                        Request.Params["t"];
            def gammaFolder = if (string.IsNullOrEmpty(Request.Params["g"])) "Light" else if (Request.Params["g"].ToLower() == "dark") "Dark" else "Light";

            def sha1Bytes = SHA1Managed().ComputeHash(UTF8Encoding().GetBytes($"$gammaFolder$text"));
            def stringBuilder = StringBuilder();
            for (mutable i = 0; i < sha1Bytes.Length; i++) _ = stringBuilder.Append(sha1Bytes[i].ToString("x2"));
            def sha1 = stringBuilder.ToString();
            
            when (!File.Exists($"$appRoot/Cache/$sha1"))
            {
                // glyphsText must be equal to Glyphs.png content
                def glyphsText = " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЩЧЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцщчьыъэюя`-=[]\\;',./~!@#$%^&*()_+{}|:\"<>?№";
                using (
                    def bmGlyphs            = Bitmap($"$appRoot/Images/$(gammaFolder)/Glyphs.png"),
                    def bmTitle             = Bitmap($"$appRoot/Images/$(gammaFolder)/Title.png"),
                    def bmBackgroundLeft    = Bitmap($"$appRoot/Images/$gammaFolder/Background_Left.png"),
                    def bmBackgroundMiddle  = Bitmap($"$appRoot/Images/$gammaFolder/Background_Middle.png"),
                    def bmBackgroundRight   = Bitmap($"$appRoot/Images/$gammaFolder/Background_Right.png"))
                {
                    def glyphWidth = bmGlyphs.Width / glyphsText.Length; 
                    def glyphHeight = bmGlyphs.Height;
                    mutable leftTextOffset = 74; 
                    def rightTextOffset = 11; 
                    def topTextOffset = 37;
                    def textWidth = text.Length * glyphWidth;
                    def backgroundAreaWidth = bmBackgroundLeft.Width - leftTextOffset + bmBackgroundRight.Width - rightTextOffset;
                    def bmMiddleWidth = if (backgroundAreaWidth >= textWidth) 
                    {
                        leftTextOffset += (backgroundAreaWidth - textWidth) / 2;
                        0;
                    } else {
                        textWidth - backgroundAreaWidth;
                    }
                    def titleLeftOffset = leftTextOffset + (textWidth - bmTitle.Width) / 2;
                    def titleTopOffset = 23;
                    def bannerWidth = bmBackgroundLeft.Width + bmMiddleWidth + bmBackgroundRight.Width;
                    def bannerHeight = (bmBackgroundLeft.Height + bmBackgroundMiddle.Height + bmBackgroundRight.Height) / 3;
                    
                    using (def bmBanner = Bitmap(bannerWidth, bannerHeight, PixelFormat.Format32bppPArgb))
                    {
                        bmBanner.SetResolution(bmGlyphs.HorizontalResolution, bmGlyphs.VerticalResolution);
                        using (def g = Graphics.FromImage(bmBanner))
                        {
                            g.DrawImageUnscaled(bmBackgroundLeft, 0, 0);
                            for (mutable i = bmBackgroundLeft.Width; i < bmBackgroundLeft.Width + bmMiddleWidth; i++) 
                                g.DrawImageUnscaled(bmBackgroundMiddle, i, 0);
                            g.DrawImageUnscaled(bmBackgroundRight, bmBackgroundLeft.Width + bmMiddleWidth, 0);
                            g.DrawImageUnscaled(bmTitle, titleLeftOffset, titleTopOffset);
                            for (mutable i = 0; i < text.Length; i++) 
                                g.DrawImage(bmGlyphs, leftTextOffset + i * glyphWidth, topTextOffset, Rectangle(glyphWidth * glyphsText.IndexOf(text[i]), 0, glyphWidth, glyphHeight), GraphicsUnit.Pixel);
                        }
                        using (fs = FileStream($"$appRoot/Cache/$sha1", FileMode.Create)) bmBanner.Save(fs,ImageFormat.Png);
                    }
                }
            }
            Response.WriteFile($"$appRoot/Cache/$sha1");
            Response.End();
        }
    }
}

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[3]: Исходный код?
От: Ziaw Россия  
Дата: 18.05.10 04:06
Оценка: 11 (1)
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Default.aspx:

KV>
KV><%@ Page validateRequest="false" Language="Nemerle" CodeBehind="Default.aspx.n" Inherits="Nemerle.Site.Banners.Default" contentType="image/png" EnableSessionState="False" enableViewState="False" %>
KV>


DDoS vulnerability detected


Request URL:http://nemerle.org/Banners/?t=MAINTAINER
Request Method:GET
Status Code:200 OK


Рекомендую добавить строчку:
<%@ OutputCache Duration="1000000" Location="Any" VaryByParam="*" %>
Re[3]: Исходный код?
От: Jack128  
Дата: 18.05.10 06:06
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>
KV>def gammaFolder = if (string.IsNullOrEmpty(Request.Params["g"])) "Light" else if (Request.Params["g"].ToLower() == "dark") "Dark" else "Light";
KV>


можно прояснить эту строчку?
вроде эквивалентно
def gammaFolder = if (Request.Params["g"].ToLower() == "dark") "Dark" else "Light";
Re[4]: Исходный код?
От: Ziaw Россия  
Дата: 18.05.10 07:24
Оценка:
Здравствуйте, Jack128, Вы писали:

J>можно прояснить эту строчку?

J>вроде эквивалентно
J>
J>def gammaFolder = if (Request.Params["g"].ToLower() == "dark") "Dark" else "Light";
J>


Если параметра не передадут мы здесь получим NRE.
Re[5]: Исходный код?
От: Jack128  
Дата: 18.05.10 07:41
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Если параметра не передадут мы здесь получим NRE.

а. ну да.
Re[5]: Исходный код?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.05.10 07:45
Оценка: 22 (1) +1
Здравствуйте, Ziaw, Вы писали:

J>>можно прояснить эту строчку?

J>>вроде эквивалентно
J>>
J>>def gammaFolder = if (Request.Params["g"].ToLower() == "dark") "Dark" else "Light";
J>>


Z>Если параметра не передадут мы здесь получим NRE.


Можно так:
def gammaFolder = if ((x ?? "").ToLower() == "dark") "Dark" else "Light";
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Исходный код?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 19.05.10 16:07
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>DDoS vulnerability detected

Z>
Z>Request URL:http://nemerle.org/Banners/?t=MAINTAINER
Z>Request Method:GET
Z>Status Code:200 OK
Z>

Z>Рекомендую добавить строчку:
Z><%@ OutputCache Duration="1000000" Location="Any" VaryByParam="*" %>

Nginx, IMHO все равно ляжет раньше (в нашей конфигурации), чем IIS, но все равно пасиб.
... << RSDN@Home 1.2.0 alpha 4 rev. 1468>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.