ארכיון חודשי: יוני 2008

יוני 2008 כנס SUGDC — זהו גלישת

נכחתי הראשון שלי אי פעם בכנס SharePoint אחרי סוף שבוע, זה היה פיצוץ.

חמישי אחר הצהריים, נסעתי וירג'יניה, מונחה על ידי שלי החדש שנרכש $50 הדבר plug-in של מכשיר GPS לטלפון שלי. ההתקן היה ללא רבב. לאחר 5 שעות הנהיגה, היה כוח לעשות סיבוב יפה על הטחנה לדרוך ואז, באופן מפתיע עוד יותר, היה כוח לנסוע אל הלובי הקוקטייל של הדובר מודעות. N00b הישיבות., it turned out that the cocktail hour was really a ruse to get speakers to show up and help stuff papers and swag into shoulder bags for conference attendees 🙂

היה קשה לישון כי אני מדברת דבר ראשון ביום שישי בבוקר. עצבנות, הרגשה מציקה שצריך להוסיף שקופית המצגת שלי, לחתולים המאוד בכוכב החיות השאיר אותי ער עד מאוחר. מאז שהלכתי לישון עד מאוחר, באופן טבעי קמתי מוקדם. עשיתי להוסיף שקופית אדריכלות טכני מפורט למדי. זה היה שווה את המאמץ. כי 25 דקות של Q&א היה מאוד מוזר בלי זה. היה לי מספיק מזל לקבל את החריץ הראשון במסלול טכני. Sahil מאליק במקור לדבר ביום שישי בבוקר, התכוונתי לדבר בשבת אבל הוא צריך להחליף פעמים. זה איפשר לי לעשות את המצגת שלי, ואז לשבת לאחור וליהנות הכול הולך קדימה יום שישי ושבת.

המצגת הלך בסדר. אני בהחלט יש מקום לשפר אותו. דיברתי על איך אנחנו יכולים לגשת ולהשתמש שירותי אינטרנט של זרימת עבודה של SharePoint Designer באמצעות פעולה מותאמת אישית. לאורך זמן, אני אקשור את המידע הזה לתוך סדרת שלי מעל EUSP.com עבור משתמשי קצה מנסה להפיק את מרב השימוש מחוץ והכלי הזה. . עברתי הדגמה ב ושקופיות שלי 35 דקות, לצערם שלי בזמנו. למרבה המזל, Q&A היה תוסס, ללא ספק סייעה העובדה שזה היה מוקדם בבוקר לפני ארוחת הצהריים. Q&A הוא החלק האהוב עליי כל מצגת.

היו הרבה נושאים מעניינים ואני מקווה לבלוג עליהן בפירוט רב יותר השבוע (הזמן יאפשר, כמו תמיד). עמית מ CMS Watch בתנאי ביקורת נמתחה אך מלא תקווה על העמדה של SharePoint בשוק. דיון אחר התמקד במחסור של משאבים SharePoint ואת הקושי מגייסים שיש למצוא את הכישרון טוב זה גם סביר"" בשוק זה מאוד חזק. איש השעונים CMS התייחס למאגר משאבי אנוש SharePoint כמו "גילדה." אני בעיקר מכירה את המונח הזה במונחים אייפון, הוא נתן לי קצת רגש, to be honest 🙂

גולת הכותרת של הכנס היה רק הפגישה ואת להתעדכן עם אנשים "שהכרתי" באינטרנט לזמן מה. הטוב ביותר היה יושב על הבר עם Isserman בקי (MossLover) עבור 3 או 4 שעות (וכל זה, לאחר שסיימתי לשתות הלילה). איני מקבל לעיתים קרובות לדבר על פארסקייפ או בבילון 5 עם תושבי העיר קנזס.

. בוב פוקס הייתה שם כרגיל, זה סופה של intros, צ'אטים ואנרגיה תזזיתי פשוט. הוא הזמין אותי לארוחת שבת עם סאהיל מאליק, זה היה נהדר.

שבת (היום 2), מייק לוטר גרר את עצמו לועידה לדבר על InfoPath, לאחר מכן הוא הצטרף בקי בסוף היום לעשות מעין Q כללי&הפעלה עבור 30 כדי 45 דקות התמקדו בעיקר InfoPath (מייק) ו- AJAX (בקי). . בקי לא הצליח לעבור את המצגת מלא/הרשמי שלה אבל אני בטוח שתהיה הזדמנות לראות את זה באחד הימים. . יש לי הרגשה שהיא "להכות את המעגל" הולך קדימה.

אני יכול להמשיך עוד ועוד. שתי נקודות אתמול — מטרת הכנס הכלכלי היה לגייס כסף עבור רשת ניסי הילדים והעלתה $5,000. זה היה מדהים. לבסוף, אני רוצה להודות בפומבי גארי בלאט, Gary ווהן, בוב פוקס בשביל להזהיר אותי ומאפשרת לי לדבר בכנס. בטח, של Gary שני היה צוות של אנשים התומכים וארגון, כל אחד מכם היה מדהים. היו לי ציפיות גבוהות לפני הלכתי וזה היה יותר טוב. ממה שציפיתי.

לשמור על ההתראה עבור הכנס מתוכנן ל- 7 בנובמבר הבא ו-8. מלבד כמה תוכן מעולה, זה נהדר שנפגשת עם כל אישיות באינטרנט האלה. אתה מכיר דרך בלוגים, טוויטר, פורומים, ועוד.

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי:

FBA ו- SQL Server: סיפור אהבה

עמיתי עובד על web part סביבה FBA. בין היתר, ה-web part מושך כמה נתונים מ- SQL server. התוכנית עבור פרויקט זה מכתיב DBA הגדרת רמת אבטחת נתונים ב- SQL (בניגוד הטבעת מזהה משתמש בשאילתת SQL או מסוימים גישה אחרים).

הבעיה היא כי שרת SQL שאינו יודע דבר על סביבתנו FBA אז זה לא יכולה לסמוך עלינו. פתרנו בעיה זו על-ידי, מחוסר מילה טובה יותר, באופן ידני של המודעה משתמש מתחזה כך אנחנו יכולים להתחבר SQL כך נתוני SQL ברמה עבודות אבטחה.

אף-על-פי FBA היא תכונה ASP.NET, אנחנו האנשים SharePoint האומה לימדו ממנועי החיפוש השונים זה אם אתה עליו מבוצעת שאילתה עבור FBA, אתה אומר שאתה רוצה לדעת כיצד להגדיר FBA ב- SharePoint. שלא הצלחתי למצוא למצוא כל מידע אודות הפעלת FBA מונחה יישום ASP.NET כדי לתקשר עם SQL בדרך שאנחנו צריכים.

במהלך מחקר זה, קראנו מחדש את המאמר הזה: ב- ASP.NET התחזות

עוד מחקר הוביל אותנו למאמר codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

זה עזר לנו לכתוב את הקוד שלנו, אשר כללתי מתחת. . זה לא הדבר הכי אלגנטי, אבל זה עבד. אני מקווה שתמצא את זה מועיל.

. הנה הקוד אשר עבדה בשבילנו:

מוגן btnSearchCarrier_Click חלל(אובייקט השולח, EventArgs e)
 {
 נסה
 {
 ImpersonateUser iU = חדש ImpersonateUser();
 // TODO: להחליף את האישורים iU.Impersonate("DomainName", "שם משתמש", "סיסמה");

//
 קוד
//

 iU.Undo();
 }
 לתפוס (חריגה ex)
 {

 }
 }

// באמצעות התחזות השיעור כאמור להלן.

הציבור מחלקה ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = נכון)]
 הציבור סטטי מחלקת מיסוי וחשבונאות בול LogonUser(
 מחרוזת lpszUsername,
 מחרוזת lpszDomain,
 מחרוזת lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 ref IntPtr phToken);

 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 פרטי מחלקת מיסוי וחשבונאות סטטי בול CloseHandle(ידית IntPtr);

 פרטי סטטי IntPtr tokenHandle = חדש IntPtr(0);
 פרטי סטטי WindowsImpersonationContext impersonatedUser;

 // אם את מקבלת את הקוד הזה לתוך קובץ DLL, הקפידו לדרוש זה הכל
 // רץ עם FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, שם = "FullTrust")]
 הציבור התחזה void(מחרוזת domainName, מחרוזת שם משתמש, מחרוזת סיסמה)
 {
 נסה
 {

 // השתמש בפונקציה LogonUser לא מנוהלים כדי לקבל את המשתמש token עבור
 // המשתמש שצוין, תחום, ואת הסיסמה.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // העברת פרמטר זה גורמת LogonUser ליצור אסימון ראשי.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // שלב -1 להתקשר LogonUser כדי לקבל נקודת אחיזה כדי אסימון גישה.
 בול returnValue = LogonUser(
 שם משתמש,
 domainName,
 סיסמה,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 ref tokenHandle); // tokenHandle - אסימון האבטחה החדש

 אם (false = = returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser השיחה נכשלה עם קוד השגיאה : " +
 ret);
 לזרוק System.ComponentModel חדש.Win32Exception(ret);
 }

 // שלב - 2
 WindowsIdentity newid ב = חדש WindowsIdentity(tokenHandle);
 // שלב -3
 impersonatedUser = newId.Impersonate();

 }
 לתפוס (חריגה ex)
 {
 Console.WriteLine("אירעה חריגה. " + . לשעבר.ההודעה);
 }
 }


 /// <סיכום>
 /// תחנות התחזות
 /// </סיכום>
 הציבור בטל void()
 {
 impersonatedUser.Undo();
 // חינם האסימונים.
 אם (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי:

הוספת לורה: SSRS אומר לי “rsAccessDenied”, אבל … באמת יש לי גישה

כמה שבועות, עבדתי עם עמיתי מפתח בפרויקט מעורבים SQL Server Reporting Services plug-in עבור מוס. הוא פיתח web part המספק מפוארת חזיתי הדו ח תקין (התכונה העיקרית מתבצעת בדיקת מידע חכם בפרמטר עם מספר ערכים לחיפוש אלף מאחוריו).

זה היה עובד נהדר בסביבת הפיתוח אלא בדיקות קבלה משתמש (UAT) סביבה, זה לא יעבוד. התחילה מאתר הבאגים, אנו רואים פרטי חריג כזה:

ההרשאות שהוענקו למשתמש 'UAT_domainmosssvc' אינן מספיקות לביצוע פעולה זו.(rsAccessDenied).

אם תבצע חיפוש חיה השגיאה לעיל, תוכלו למצוא שהוא די נפוץ. עומדים נפוצות. הסוג הגרוע ביותר של נפוצה כי יש לו שורש פוטנציאליים רבים שונים גורמת ומרגיש הפתרון המוצע של כולם "" מימין. אנחנו קרוב לוודאי. ניסה את כולן.

במקרה שלנו, הבעיה הייתה שלא היה לעשות גיבוי/שחזור של DEV כדי UAT. אי-שם הנתונים, משהו עדיין מתייחס "DEV_domain" (במקום מעודכן "UAT_Domain"). יצרנו אתר חדש, הוספת שה-web part, לפתור את הבעיה שלנו.

בתקווה זה ישמור מישהו שעה או שעתיים לאורך השורה.

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי:

תיקון מהיר: גישה לאתר SharePoint זורקת [HttpException (0x 80004005): לבקשה הסתיים.]

אחד מעמיתיי מפתח עבד על פרויקט השבוע ולא נתקלו בבעיה פסק זמן במהלך העבודה על בניית חלק אינטרנט מטורף. ה-web part שלו היה בסדר גמור, אבל "פתאום" אתר לא קשורים הפך באיטיות ולעיתים קרובות שהוקצב עם שגיאה זו:

[HttpException (0x 80004005): לבקשה הסתיים.]

אני מחובר וראיתי כי מספר אתרים אחרים היו ממש בסדר. . חשדתי שהיו מוסתרים web parts מסוימים בדף משתמש trusty ?תוכן = 1 בטכניקה של איתור באגים, למעשה מצאתי 11 ה-web parts בדף, רק שניים מהם היו גלויים. . אפילו טוב יותר (מנקודת מבט let's-hope-I-find-something-ugly-here-that-I-can-fix), שלושה סגור web parts אלה היה שם של "שגיאה".

מחקתי web parts אלה (שהוא עצמו לקח זמן רב באופן מפתיע) זה פתר את הבעיה. For today 🙂

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי:

אימון מהיר ב- class הוא מצויין

אני מתחיל היום 4 הצום הוא שותף אימונים בראשות את לארי קיי פה ב נידהם, MA.

הפעלה זו 5 ימים מתפרק שיעורים (3 ו 2 ימים בהתאמה) זכאי "מהר ESP: פיתוח יישומים חיפוש מותאם אישית עבור ברית לשותפות אני" "מהר ESP: פיתוח יישומים חיפוש מותאם אישית עבור הברית שותפים II".

זה שיעור סוג הטירונות אמיתי. החומר הוא עמוק (מאוד, עמוק מאוד). המדריך (לארי) בבירור יודע מה הוא עושה. אני מאוד ממליץ הכשרה זו אם אתה שוקל את זה.

</קצה>

SharePoint ומהר — חמאת בטנים של ריס של יישומים ארגוניים?

אני כבר סיימו את היום 2 אימון מהיר ב נידהם שטוף שמש, MA, אני מתפוצץ עם רעיונות (אילו כל אימון טוב המחלקות לעשות לי). היבט מסוים אחד מהר יש לי לחשוב. ורציתי לרשום אותו. בזמן שזה עדיין טרי ונורמלי "שואף" דחפו את זה מהראש שלי.

אנחנו SharePoint WSS 3.0 / מוס והמיישמים לעתים קרובות להתמודד עם בעיה קשה עם כל פרויקט SharePoint בגודל סביר: איך נגיע כל הנתונים שאינם מתויגים נטען לתוך SharePoint כך הכל מתאים בתוך שלנו ארכיטקטורת מידע מעוצב בצורה מושלמת?

לעתים קרובות מספיק, זה לא כזה בעיה קשה כי אנחנו היקף עצמנו מצרות: "אנחנו לא אכפת מכלום יותר 3 . חודשים." "אנחנו נטפל דברים כל כך ישנים עם חיפוש לפי מילות מפתח, הולך-קדימה שנבצע פעולה זו הדרך הנכונה…" ועוד.

אבל, מה קורה אם אנחנו לא יכולים. היקף עצמנו מצרות, אנחנו מסתכלים על 10 אלפים או 100 של אלפים (או אפילו מיליונים) סיימתי להיום — ההעמסה ו תיוג של וזו המשאלה אדוקים שלנו?

מהיר יכול להיות התשובה.

תהליך החיפוש של מהיר כולל הרבה חלקים נעים אבל תצוגה פשוטה אחת:

  • תהליך סורק מחפש תוכן.
  • הוא מוצא תוכן, הנפילה לתהליך מתווך שמנהל מאגר של המסמך מעבדים.
  • ברוקר תהליך הנפילה לאחד המעבדים המסמך.
  • המעבד המסמך מנתח את המסמך, דרך תהליך צינור, מנתח את bejeezus מתוך המסמך או מעביר לתהליך סוג בונה אינדקס.

על ספינת החלל מהיר, . יש לנו הרבה שליטה על המסמך עיבוד צינור. אנחנו יכול לערבב ומתאימים על 100 צינור רכיבים ו, הכי מעניין, אנחנו יכולים לכתוב את הרכיבים שלנו. . כמו שאמרתי, מהיר הוא ניתוח מסמכים בכל דרך, אבל ראשון ומכינה זה הרבה מידע שימושי על המסמכים הללו. מהר המטורפים האלה הם בבירור לא שפוי, כפייתי לגבי מסמך ניתוח כי אין להם כלים ו/או אסטרטגיות באמת לסווג מסמכים.

כל כך … באמצעות מהר בשילוב עם רכיב קו צינור מותאם אישית משלנו, אנחנו יכולים לתפוס את כל המידע הזה בהקשר מהיר. ואאכיל אותו לחזור מוס. אולי תצליח משהו כזה:

  • המסמך מוזן לתוך מהר מוס.
  • ניתוח של המסמך normal משוגע רק גרוע יותר מהר, חלוקה לקטגוריות יקרה.
  • רכיב קו צינור מותאמים אישית שלנו טיפות חלק מהמידע הזה בהקשר מחוץ למסד נתונים.
  • תהליך העיצוב שלנו קורא את המידע אודות הקשר, עושה כמה החלטות על איך להתאים את המסמך מוס בתוך IA שלנו ומסמן אותה באמצעות שירות אינטרנט ומודל האובייקטים.

בטח, תהליך אוטומטי לא כזה יכול להיות מושלם, אבל בזכות האובססיבי (ואנשים מהר ואולי insane-but-in-a-good-way), יכול להיות שיש לנו לחימה הסיכוי תהליך יעיל באמת טען המונית יותר מאשר למלא את מסד הנתונים SQL עם חבורה של מסמכים ניתנים לחיפוש בקושי אמיתיים.

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי: , ,

לומד על משתמשי קצה-www.EndUserSharePoint.com

מארק מילר. http://www.endusersharepoint.com בנתה, לפי הניסיון שלי, משתמש הקצה הכי מרוכז באתר SharePoint ב ' כדור. בחודש האחרון, הוא התגייס חלק הבלוגרים שתסכים premier ממוקדת סביב לתרום "העמוד הראשי" על בסיס קבוע, כולל אך לא מוגבל פול Culmsee, כריס מהר, ו דייזי Lunsford. . יש לו אחרים מרופדת ומוכנה לתרום גם את לוחות הזמנים שלהם מאפשרים.

קפצתי על ההזדמנות להשתתף ו פוסט הפתיחה שלי כאן. אני כותב סדרה על אופן השימוש SharePoint Designer כדי ליצור פתרונות זרימת עבודה עסקיים ממדרגה ראשונה. In keeping with the EUSP.com’s focus, את המאמרים הללו תמיד ישמור את משתמש הקצה ובמרכז.

אני באופן אישי נוטה לחלק את העולם SharePoint שלוש קבוצות רחבות: SharePoint יועצים, במשרה מלאה SharePoint צוות מפתחי ומשתמשי קצה. כאשר אני כותב, לעיתים קרובות אני שואל את עצמי, בקבוצות אלה אשר יהיו מעוניינים הנושא? בדרך כלל, בסופו של דבר אני כותב עבור שתי (טכני) קבוצות, בעיקר כי אני יועץ בעצמי; זה תמיד קל יותר אותנטי לכתוב על הדברים האלה שבה אתה המוכר ביותר ברמה האישית.

כאמור אני כבר לפני, הקהילה משתמש הקצה רחוקה, גדול יותר מזה הקהילה טכני. EUSP.com זה מעולה, אני ממליץ מכל הלב על כל שלוש קבוצות. המוקד לייזר של האתר הוא ללא ספק חשוב למשתמשי קצה. עם זאת, למפתחים ויועצים רק נהיה יותר טוב. המקצוע שלנו אם אנחנו יכולים להבין להגיב ביעילות צרכי משתמשי הקצה שאנו משרתים. I know I need all the help I can get 🙂 תבדוק את זה.

</קצה>

מנוי על הבלוג שלי.

הפנייה לשירותי אינטרנט ברית המועצות של WSS / מוס בסביבת FBA

היינו צריכים להפעיל את CreateSubscription"" שיטת בשירות האינטרנט ברית המועצות שמתארחת ב FBA מנוהל מוס הסביבה מתוך חלק אינטרנט מותאם אישית. אנחנו כל הזמן מקבל וריאציות של:

  • 401: לא מאושר
  • האובייקט זז

האובייקט"עבר" המסר היה המעניין ביותר כי זה היה אומר את זה האובייקט"" (השירות שלנו ברית המועצות) עברה"" ל login.aspx. זה בבירור אומר שעלינו אימות בבעיה כלשהי.

בסופו של דבר הבנתי שיש לי סימניה כתב בבלוג מאת רוברט גרט. לתאר כיצד להפעיל את שירות אינטרנט WSS/מוס למטרה כללית חי בתוך סביבה FBA. שימו לב: אין באפשרותי לקשר ישירות למאמר (כמו של 06/09/08) כי היא רוצה לאמת. הקישור שאני לספק מביא אותך "כל ההודעות" תצוגת יכול לאתר את המאמר ספציפיים על-ידי חיפוש "Accessing מוס לשירותי אינטרנט של באמצעות באימות מבוסס טפסים".

. הנה הקוד אשר עבדה בשבילנו:

ר' ReportingService2006 = null; 
// אימות אימות אימות = חדש אימות(); 
אימותכתובת Url = "http://URL/_vti_bin/Authentication.asmx";
אימותCookieContainer =
חדש CookieContainer();
LoginResult התוצאה = אימותכניסה("מזהה משתמש", "סיסמה");
אם (תוצאה.קוד שגיאה = = LoginErrorCode.NoError) 
{
// אין שגיאה, אז לקבל את העוגיות.
עוגיות CookieCollection = אימותCookieContainer.GetCookies(חדש אורי(אימותכתובת Url));
עוגיות authCookie = עוגיות[תוצאה.CookieName];
ר' =
חדש ReportingService2006();
ר'.כתובת Url =
"http://server/_vti_bin/ReportServer/ReportService2006.asmx";
ר'.CookieContainer =
חדש CookieContainer();
ר'.CookieContainer.Add(authCookie);
}
נסה
{
  ר'.CreateSubscription(דו ח, extSettings, desc, eventType, matchData, parameters1);
}
לתפוס (חריגה ex)
{
  Console.WriteLine(. לשעבר.Message.ToString());
}

לפרש דברים כדי לעבוד ככה:

  • ה-web part שלנו צריך לחייג שירות אימות ולומר, "היי, טוני, . זה אני!".
  • שירות לאימות משיב אומר, "היי, . אני מכיר אותך. מה שלום הילדים? הנה אסימון."
  • אנחנו קוראים את הטקס ברית המועצות ואומרים, "טוני שלח אותי, הנה האסימון."

</קצה>

מנוי על הבלוג שלי.

יש לך לבצע ניתוח חיפוש החודשי שלך?

. זה אימון טוב, בטח גם עבודה מומלצת, סקירת דוחות החיפוש שלך פעם בחודש ולחפש הזדמנויות להוסיף הצעות מומלצות, המנגינה באוצר המילים, אולי אפילו לחשוף קצת בינה עסקית אחרת מוסתר לניהול.

. זה כבר השלישית של החודש. Awastin. הזמן’ 🙂

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי:

חיפוש בפאה לסחור סיטר יותר

הייתה לי סיבה היום לשחק על עם חיפוש פאות codeplex פרוייקט היום.

זה קיים כבר זמן מה, אבל התלבטתי להוריד ולהשתמש זה מהסיבות הרגילות (בעיקר חוסר זמן), plus outright fear 🙂

אם אתם מחפשים לשפר את החיפוש שלך ולחקור אפשרויות חדשות, להוריד אותה ולהתקין אותה כאשר יש לך שעה של זמן פנוי. עקבתי אחרי ההוראות במדריך ההתקנה וזה לקח לי פחות מ 20 דקות שיהיה מותקן ופועל. הוא מספק דקות ערך אפס.

. זה נראה די קשה להרחיב. המחברים מספקים הדרכה מפורטת עבור תרחיש BDC מורכבים. אולי חסר זה, . אבל הלוואי שהם יספקו גם תרחיש פשוטים המערבים את אחד המאפיינים קיימים או אולי הוספת מאפיין מנוהל חדש אחד. אני יהיה לנסות ולכתוב את זה בעצמי בתקופה הבאה של זמן.

השורה התחתונה — תוך דקות, באפשרותך להתקין, להגדיר את זה, use it and add some pretty cool functionality to your vanilla MOSS search and be a hero 🙂

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי: