Re[15]: Бейджи участников
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>
Так лучше, но все же было бы еще лучше если оттенок был бы ближе к оригиналу.
Есть логика намерений и логика обстоятельств,
последняя всегда сильнее .
Re[16]: Бейджи участников
Re[17]: Бейджи участников
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Релиз-кандидат
кра-со-та! И с цветом имхо угадал — оттенок остался оригинальным, но стал чуть светлее, позитивнее )
От:
Lloyd
Дата: 19.03.10 23:16
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>
Кстати, чем-то ключ напоминает. Может как-то это обыграть?
Сабж. Скрипт по-прежнему на
http://nemerle.org/Banners . Принимает два параметра:
t — текст. Поддерживаются большие и маленькие буквы кириллицы и латиницы, а также цифры и символы. По умолчанию: t=
DEVELOPER
g — гамма.
dark или
light . По умолчанию: g=
light .
Т.е.:
http://nemerle.org/Banners/?t=HACKER&g=light или просто
http://nemerle.org/Banners/?t=HACKER дадут:
в то время, как
http://nemerle.org/Banners/?t=HACKER&g=dark даст:
P.S: Как и обещал в КСВ, больше никакого PHP. Теперь бейджи генерит чистокровный Nemerle-код с неплохой родословной от самого IT
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
Здравствуйте, kochetkov.vladimir, Вы писали:
Кстати, а не стоит на темном банере сделать-таки желтую луну? Или пусть так остается?
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Кстати, а не стоит на темном банере сделать-таки желтую луну? Или пусть так остается?
Мне так как есть сейчас очень нравится.
Есть логика намерений и логика обстоятельств,
последняя всегда сильнее .
Здравствуйте, VladD2, Вы писали:
Ну ка, как там смотрится мой новый бэджик?
Есть логика намерений и логика обстоятельств,
последняя всегда сильнее .
Здравствуйте, VladD2, Вы писали:
VD>Ну ка, как там смотрится мой новый бэджик?
Великоват.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, 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>>
Здравствуйте, kochetkov.vladimir.
Выложи потом на сайте немерле сорцы всей графики, что рисовал, может кому пригодится.
От:
Shame
funtoo.org
Дата: 25.03.10 14:04
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Я чуть позже добавлю шаблоны еще для двух размеров в 1.5 меньше этого и в 1.5 больше (s=small|medium|large )
Хочу large >_<
الحقيقة:الشئ الوحيد الذي(لا)يصدقه الناس!ا الزواج : جمع.وطرح.ثم(ضرب)!ولكنه قبل ذلك(قسمة) المحامي:لسان.وحنجرة.وروب!يدافع عن مال موكله (أعزائي)!وهو لا يعرف أحد منّا!الطالب (الأول)على فصله!لولا وجود الأخرين
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Сабж. Скрипт по-прежнему на http://nemerle.org/Banners . Принимает два параметра:
А можно одним глазком взглянуть на сорс-код? Интересу ради
Здравствуйте, 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();
}
}
}
Здравствуйте, 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="*" %>
От:
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" ;
От:
Ziaw
Дата: 18.05.10 07:24
Оценка:
Здравствуйте, Jack128, Вы писали:
J>можно прояснить эту строчку?
J>вроде эквивалентно
J>J>def gammaFolder = if (Request.Params["g" ].ToLower() == "dark" ) "Dark" else "Light" ;
J>
Если параметра не передадут мы здесь получим NRE.
От:
Jack128
Дата: 18.05.10 07:41
Оценка:
Здравствуйте, Ziaw, Вы писали:
Z>Если параметра не передадут мы здесь получим NRE.
а. ну да.
Здравствуйте, 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" ;
Есть логика намерений и логика обстоятельств,
последняя всегда сильнее .
Здравствуйте, 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>>
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить