Я получил сервис граватара, работающий над моим сайтом. Но я хотел бы знать, загрузил ли пользователь их картинку или нет. Существует ли способ знать это?
Я предлагаю вам рассмотреть возможность варианта.
Опциональный шаблон действует как обертка вокруг вашего возвращенного типа, и определяет два особых случая: опция. None () и опция .some (). Таким образом, вы всегда знаете ваш возвращенный тип (опция) и можете проверить, имеете ли у вас значение в возвращенном объекте параметра, используя такие методы, как опция. SuSsome () и опция .isnone ().
Таким образом, вы можете гарантировать, что у вас нет никаких неконкуренных нулей.
Конечно, все это происходит по стоимости дополнительной сложности кода.
Для получения дополнительной информации о типе опции см. В здесь (Scala Code, но тот же основной)
-121--3140603-При построении URL используйте параметр d = 404. Это приведет к тому, что Gravatar вернет ошибку 404, а не изображение, если пользователь не установил изображение.
Если вы используете элемент управления .NET, связанный с сайтом Gravitar, вам понадобится изменить перечисление Iconset (и, вероятно, вытащите код из элемента управления, поэтому вы можете получить по статусу напрямую).
In PHP:
function hasGravatar($email)
{
return (md5(file_get_contents(sprintf('http://www.gravatar.com/avatar/%s?default=identicon&size=32', md5($email)))) == '02dcccdb0707f1c5acc9a0369ac24dac') ? false : true;
}
.NET и MONO - отличные среды, со многими инструментами и отличными навыками базы людей, которые знают, как их использовать.
Я думаю, что у Mono есть возможность стать мобильной межплантальной средой разработки выбора, видя, когда они являются единственной альтернативой объектам на iPhone и должны быть портативными на Android, а .NET уже на Windows Mobile Отказ
Я действительно надеюсь увидеть твердую реализацию MONO на Android, с обертками для API Android API как с Monotouch, и будет готов заплатить за него, так как я не в состоянии сделать это сам.
-121--569470- Учитывая максимум N
n n n , вы хотите вернуть наименьшее число, которое следует на 1-20.
Давайте посмотрим на набор от 1 до 20. Первый Выкл., Он содержит ряд простых чисел, а именно:
2
3
5
7
11
13
17
19
так, потому что он должен быть разделен на 19, вы можете проверить только кратные 19, потому что 19 - простое число. После этого вы проверяете, можно ли разделить на тот и т. Д. Если номер можно успешно разделить всеми простыми номерами, он может быть разделен на число с 1 по 20.
float primenumbers[] = { 19, 17, 13, 11, 7, 5, 3, 2; };
float num = 20;
while (1)
{
bool dividable = true;
for (int i = 0; i < 8; i++)
{
if (num % primenumbers[i] != 0)
{
dividable = false;
break;
}
}
if (dividable) { break; }
num += 1;
}
std::cout << "The smallest number dividable by 1 through 20 is " << num << std::endl;
-121 3429517- Что я сделал:
После этого я сделал это для каждого запроса на гравитар:
Я также кэшировал изображение Gravatar в течение 24 часов, поэтому вам не нужно все время полагаться на Gravatar. Необязательно вы можете поставить первые 3 балла в функцию и позволить ему работать время от времени, чтобы убедиться, что Gravatar по-прежнему использует одно и то же изображение по умолчанию, которое у них нет, по крайней мере, за последние пару месяцев.
Я в настоящее время делаю что-то подобное. У меня есть настройка таблицы для профилей пользователей, а в этой таблице у меня есть один столбец под названием Avatar. Вот где будет храниться URL-адрес Gravatar. Следующий код - это то, что я использую для управления этим столбцом.
// first gather the email address that is going to be associated with this user as
// their gravatar.
// once you have gathered the email address send it to a private method that
// will return the correct url format.
protected void uxAssocateAvatar_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
string emailAddress = uxEmailAddress.Text;
try
{
Profile.Avatar = GetGravatarUrl(emailAddress);
Profile.Save();
Response.Redirect("Settings.aspx", true);
}
catch (Exception ex)
{
ProcessException(ex, Page);
}
}
}
// use this private method to hash the email address,
// and then create the url to the gravatar service.
private string GetGravatarUrl(string dataItem)
{
string email = dataItem;
string hash =
System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(email.Trim(), "MD5");
hash = hash.Trim().ToLower();
string gravatarUrl = string.Format(
"http://www.gravatar.com/avatar.php?gravatar_id={0}&rating=G&size=100",
hash);
return gravatarUrl;
}
// on the page where an avatar will be displayed,
// just drop in an asp.net image control with a default image.
<asp:Image ID="uxAvatar" runat="server" ImageUrl="~/images/genericProfile.jpg"
AlternateText="" CssClass="profileAvatar" BorderWidth="1px"/>
// and on page_load or something like that,
// check to see if the profile's avatar property is set
if (Profile.Avatar != null)
{
uxAvatar.ImageUrl = Profile.Avatar;
}
// by default the profile's avatar property will be null, and when a user decides
// that they no longer want an avatar, the can de-associate it by creating a null
// property which can be checked against
// to see if they have one or don't have one.
protected void uxRemoveAvatar_Click(object sender, EventArgs e)
{
Profile.Avatar = null;
Profile.Save();
Response.Redirect("Settings.aspx", true);
}
Это, кажется, очень хорошо работает для меня. У меня всегда есть показывать аватар по умолчанию, и когда пользователь на самом деле хочет иметь отображаемый пользовательский аватар, они связывают их электронную почту Gravatar (который я хэш и никогда не хранят в качестве адреса электронной почты), который создает URL-адрес, который я могу просто прийти в виде изображения Отказ Когда пользователь удаляет свою ссылку Gravatar, я не отудаю столбец базы данных, и ImageURL возвращается к моему изображению по умолчанию.
Удачи, и надеюсь, что это поможет вам.
в C #, на основе кода PHP, размещенного ранее (непроверенного исходного кода предварительного обеда):
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Net.WebClient;
public string GenerateMD5(string plaintext)
{
Byte[] _originalBytes;
Byte[] _encodedBytes;
MD5 _md5;
_md5 = new MD5CryptoServiceProvider();
_originalBytes = ASCIIEncoding.Default.GetBytes(plaintext);
_encodedBytes = _md5.ComputeHash(_originalBytes);
return BitConverter.ToString(_encodedBytes).ToLower();
}
public string file_get_contents(string url)
{
string sContents = string.Empty;
if (url.ToLower().IndexOf("http:") > -1) {
System.Net.WebClient wc = new System.Net.WebClient();
byte[] response = wc.DownloadData(url);
sContents = System.Text.Encoding.ASCII.GetString(response);
} else {
System.IO.StreamReader sr = new System.IO.StreamReader(url);
sContents = sr.ReadToEnd();
sr.Close();
}
return sContents;
}
public bool hasGravatar(string email)
{
string _mailMD5 = GenerateMD5(email);
string _url = String.Format("http://www.gravatar.com/avatar/{0}?default=identicon&size=32", _mailMD5);
string _fileMD5 = GenerateMD5(file_get_contents(_url));
return !(_fileMD5 == "02dcccdb0707f1c5acc9a0369ac24dac");
}