Recently we stumbled upon a task to set some properties of a personal mysite site collection of a user – we wanted to get precisly the user (owner) whose the site collection is, not the user who is browsing the sitecollection (current user) nor the user who is running a script. We found two ways of doing this.
DNS Binding problem with SSL, IIS Express and Cloud Service
The problem
I recently stumbled on a problem which took me about 2 hours to realize but easy to fix.
I created a Cloud Service in Visual Studio 2013 Update 2 with a MVC Role, used ISS Express and full Azure Storage Emulator for my project.
Steps began, when I tried to add Windows Azure Active Directory to authenticate my app through this service. One of this steps was adding https/ssl for my app. After setting “SSL Enabled” value to true in my MVC project, VS generated an SSL URL. I debugged the solution and realised that the URL doesn’t work with a generic error “Cannot display the webpage”.
Czytaj dalej DNS Binding problem with SSL, IIS Express and Cloud Service
SPBG – SharePoint 2013/Online Branding Guide
In this guide I will try to share my experience in branding projects in SharePoint 2013 and SharePoint Online. Basicly I would like to show You, how to start a branding project for the newest versions of Microsoft collaboration platform. This series will apear every week (or try they will) starting from 12.02.2014.
- Where to start? Knowledge, possiblities and DON’Ts.
- Project scope. Branding Publishing and teamsites. System masterpage problems…
- Design Manager. The new concept of branding.
- Everything has a Content Type.
- Composed Looks. The client chooses the colors
- Creating solution package – sandbox/server when/difference why what
- Features and event receivers.
- Modules – put files where they belong.
- Elements file – proper configuration for project files.
- Masterpages. HTML vs master when why how/difference
- Masterpages. DOs and DON’Ts.
- Layout pages – to lay out content on your site.
- Javascript/CSS/Images – the content to make your site alive.
- XSL styling. When the standard webpart is not enough.
- The tricky part – site collections and relative paths.
- Composed Looks Implementation. The client chooses the look.
- Deploying the solution, activation, troubleshooting.
Dołączanie SQLite do Aplikacji Windows 8
Baza danych w poważniejszych aplikacjach na Windows 8 to podstawa – niezależnie, czy budujemy małą aplikację do zapisywania obrazków czy dużą aplikacje działającą z Windows Azure, gdzie relacje między danymi to podstawa albo potrzebny nam Caching danych.
Ponieważ nie ma komponentów baz danych SQL CE, które można by dołączyć do naszych projektów w środowisku Windows Runtime, Microsoft wraz z ludźmi z SQLite przygotował nam alternatywę w postaci tego bardzo ciekawego i szybkiego systemu bazy danych. Napisany jest on w natywnym C++, skompilowany do środowiska WinRT i działa z każdą architekturą na którą programujemy. Ponieważ nie jest to zarządzany kod (Managed Code) to niestety musimy przygotowywać oddzielne paczki aplikacji – x86, x64 oraz ARM – na szczęście na tym nasz udział w kompilowaniu się kończy, ponieważ kompilator sam wybierze automatycznie wymaganą architekturę bazy danych (plik dll w wersjach x86, x64, ARM) i dołączy ją do paczki.
Instalacja paczki SQLite dla Windows Runtime
Pierwszą rzeczą, którą należy uczynić jest w ogóle ściągnięcie paczki z bazą danych. Można to zrobić z poziomu Visual Studio (we wszystkich edycjach). Z menu Tools (Narzędzia) wybieramy Extensions and Updates (Rozszerzenia i Aktualizacje), następnie wybieramy sekcję Online (po lewej stronie) i wpisujemy w wyszukiwarce w prawym górnym rogu “sqlite”. Wtedy ukaże się nam paczka: SQLite for Windows Runtime
Klikamy Download (Pobierz) i instalujemy ściągnięty plik. Po zainstalowaniu należy zrestartować Visual Studio o czym poinformuje program.
Używanie SQLite w projektach XAML/C# (VB)
Kiedy mamy już paczkę SQLite dla Windows Runtime, możemy jej użyć. W aplikacjach C#/VB należy poczynić parę kroków:
- Stwórz aplikację (np. pusta Aplikacja)
- Wywołaj opcję Add Reference (czyli dodaj referencje)
- Dodajemy Rozszerzenie (nie czyste dll) z kategorii Windows/Extensions SQLite for Windows Runtime wraz z C++ Runtime Package
Ponieważ biblioteka ta jest napisana w języku C++, najwygodniej jest ściągnąć tzw. wrapper, czyli zbiór klas/funkcji pomocniczych, które napisane są w C#/VB a wywołują funkcje C++. Najłatwiejszą biblioteką do wykorzystania w projektach jest sqlite-net jest ona skompilowana w języku C# i dostępna poprzez menager NuGet. Programiści VB niestety muszą sami skompilować tę bibliotekę i dodać ją do referencji projektu.
Aby pobrać do projektu bibliotekę sqlite-net:
- Przy włączonym projekcie, włączamy Package Manager Console (konsola menagera projektów) w Visual Studio
- Wpisujemy komendę: Install-Package sqlite-net
Po tej komendzie automatycznie powinny nam pojawić się 2 pliki: SQLiteAsync.cs oraz SQLite.cs.
Biblioteka ta pozwala na używanie składni jak w LINQ2SQL, gdzie encje w bazie danych można reprezentować za pomocą typów.
[csharp]
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
LoadData();
}
public void LoadData()
{
var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, “db.sqlite”);
using (var db = new SQLite.SQLiteConnection(dbPath))
{
db.CreateTable();
db.RunInTransaction(() =>
{
db.Insert(new Person() { FirstName = “Tim”, LastName = “Heuer” });
db.Insert(new Person() { FirstName = “Michał”, LastName = “Walczak” });
});
}
}
}
public class Person
{
[SQLite.AutoIncrement, SQLite.PrimaryKey]
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
[/csharp]
Teraz jedynie należy wybrać architekturę aplikacji (x86, x64, ARM) – nie można zostawić AnyCPU. Pamiętajcie, że przygotowując paczkę do certyfikacji zawsze ustawiajcie je na “Release” w przeciwnym wypadku aplikacja nie przejdzie certyfikacji.
Używanie SQLite w projektach XAML/C++
Deweloperzy piszący w C++ muszą zainstalować paczkę i dodać ją do referencji. W projektach C++ nie ma czegoś takiego jak menu “Dodaj referencję” – trzeba manualnie wybrać References (Referencje), wtedy dopiero przycisk Add Reference (Dodaj Referencję) pojawia się. Aby zacząć korzystać z SQLite należy dodać include w pliku gdzie wykorzystujemy bazę: #include <sqlite3.h>
Nie trzeba korzystać z wraperów, ponieważ cała baza napisana jest w C++ i odnosimy się jedynie do czystych funkcji C++.
Używanie SQLite w projektach HTML5/Javascript
Aby korzystać z paczki SQLite w projektach Javascript należy podążać takimi samymi krokami jak w przypadku XAML/C#. Należy dodać referencje do rozszerzenia SQLite oraz C++ runtime. Aby korzystać z tej biblioteki należy pobrać odpowiedni wrapper. Zalecanym wrapperem jest SQLite3-WinRT. Wystarczy ściągnąć paczkę i dodać pliki do swojego projektu. Przykład kodu:
[javascript]
var dbPath = Windows.Storage.ApplicationData.current.localFolder.path + ‘\\db.sqlite’;
SQLite3JS.openAsync(dbPath)
.then(function (db) {
return db.runAsync(‘CREATE TABLE Item (name TEXT, price REAL, id INT PRIMARY KEY)’);
})
.then(function (db) {
return db.runAsync(‘INSERT INTO Item (name, price, id) VALUES (?, ?, ?)’, [‘Mango’, 4.6, 123]);
})
.then(function (db) {
return db.eachAsync(‘SELECT * FROM Item’, function (row) {
console.log(‘Get a ‘ + row.name + ‘ for $’ + row.price);
});
})
.then(function (db) {
db.close();
});
[/javascript]
Podsumowanie
SQLite to bardzo prosta w obsłudze, lecz zaawansowana baza danych – napisana jest w C++, działa na plikach lokalnych. Mam nadzieję, że artykuł ten przetłumaczony na język Polski (oryginał Tim Heuer) przybliży wam instalację i używanie bazy. W przyszłości umieszczę przykłady projektów z insertami, deletami, zasileniem źródeł danych. Jeżeli zauważycie jakiś błąd, piszcie w komentarzach 🙂
Uwaga! Testowane wersje SQLite (wraz z 3.7.13) posiadają dosyć irytujący błąd. Ponieważ SQLite wykorzystuje do zapisu przestrzeń lokalną (Local Storage), to korzysta ze ścieżki bezpośredniej (C:/Users/…/KatalogZDanymiAplikacji ). Jeżeli wasza nazwa użytkownika zawiera polskie litery lub litery z rozszerzonej tablicy ASCII jest bardzo prawdopodobne, że SQLite nie będzie w stanie stworzyć pliku bazy danych, ponieważ nie obsługuje w ścieżkach takich znaków. Jedynym obejściem tymczasowym jest stworzenie w Windows 8 konta lokalnego nie zawierającego w nazwie polskich znaków
Artykuł przetłumaczony według licencji autora.
Źródło: http://timheuer.com/blog/archive/2012/08/07/updated-how-to-using-sqlite-from-windows-store-apps.aspx
Achievements w Visual Studio
Ciekawa wtyczka do visual studio 2010, śledzi nasze poczynania i w razie spełnienia kryteriów odblokowywuje achievementa, tworzy również profil na channel9, gdzie można oglądać osiągnięcia innych gracz…. erhm programistów
http://visualstudiogallery.msdn.microsoft.com/bc7a433b-b594-48d4-bba2-a2f24774d02f
Planning is Essential in Writing Multiplayer Network Code « game producer blog
Planning is Essential in Writing Multiplayer Network Code « game producer blog.
Świetny artkuł na temat tego jak pisać kod sieciowy z wielkim zasobem bardzo przydatnych linków
How To Connect to Hidden WIFI Networks on Windows Phone 7.5 Mango
How To Connect to Hidden WIFI Networks on Windows Phone 7.5 Mango
za pomocą How To Connect to Hidden WIFI Networks on Windows Phone 7.5 Mango > Article > MobilityMinded.
Silverlight for Windows Phone Toolkit In Depth e-Book | WindowsPhoneGeek
Darmowy ebook, dotyczący WP Toolkita
za pomocą Silverlight for Windows Phone Toolkit In Depth e-Book | WindowsPhoneGeek.
Hex editor, GIF Frame extractor
Gify są nadal dosyć popularne w sieci, przechodzą wręcz renesans, co innego tyczy się aplikacji z nimi współpracującymi.
Ostatnio próbowałem otworzyć i zmodyfikować jakiegoś animowanego gifa, niestety Photoshop CS 3 nie jest w stanie sobie poradzić z tak arcytrudnym zadaniem. Na sieci znajdują się przykłady wykorzystujące otwieranie gifów poprzez File->Import->VideoFrames to layers, niestety opcja ta wymaga pełnej instalacji pakietu QuickTime, za co dziękuję bardzo.
W poszukiwaniach natrafiłem na stronę dewelopera, który stworzył prosty programik do exportu klatek z gifa do pojedyńczych plików (png lub jpg), dodatkowo na tej samej stronie przyjemny edytor hexowy, oraz parę innych ciekawych aplikacji
Data Binding i StringFormat w Windows Phone 7
Tworząc aplikacje często spotykamy się z przypadkiem, kiedy chcemy stworzyć listę obiektów, które pobieramy z bazy danych. Często są to pojedyńcze listy, jak lista zakupów, lista kontaktów, lista państw itp. W WPF, korzystając z XAMLa możemy to zrobić poprzez mechanizm Data Binding, obszerny artykuł znajduje się na MSDNie Data Binding Overview
Co jeśli interesuje nas lista wieloelementowa, która zawierałaby wiele pól danych z jednego wiersza, oraz miała być ładnie sformatowana pod względem ustawienia elementów (coś a’la centrum SMS albo klient email) oraz formatu liczb? Do tego celu możemy użyć również mechanizmu Data Binding w celu połączenia danych, Grid w celu ustawienia danych, oraz StringFormat w celu ładnego przedstawienia.
Korzystamy z bazy danych umieszczonej w artykule Baza Danych w Windows Phone 7
W pliku MainPage.xaml.cs wystarczy, że podłączymy naszą bazę danych do kontekstu strony
[csharp]
public MainPage()
{
InitializeComponent();
// Set the data context of the listbox control to the sample data
this.DataContext = App.ViewModel;
}
[/csharp]
W ten sposób, cała strona podłączona jest już do źródła danych – ma tzw. kontekst, którego będzie mogła korzystać do pobierania, usuwania itp. danych w bazie.
Teraz przechodzimy do najważniejszego pliku – MainPage.xaml. Tworzymy w tej chwili szablon każdego elementu (każdego wiersza tabeli), który będzie formatowany zawsze w ten sam sposób. Należy go umieścić w specjalnej przestrzeni – phone:PhoneApplicationPage.Resources
[xaml]
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key=”EntriesListBoxItemTemplate”>
<Border
Background=”{StaticResource TransparentBrush}”
Padding=”20″>
<Grid HorizontalAlignment=”Stretch” Background=”{StaticResource TransparentBrush}”>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=”100″ />
<ColumnDefinition Width=”100″ />
<ColumnDefinition Width=”80″ />
<ColumnDefinition Width=”80″ />
<ColumnDefinition Width=”*” />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height=”60″ />
<RowDefinition Height=”60″ />
</Grid.RowDefinitions>
<Grid Grid.Column=”0″ Grid.ColumnSpan=”1″ Grid.Row=”0″ Grid.RowSpan=”2″ Background=”{StaticResource PhoneAccentBrush}” Width=”110″ Height=”110″>
<TextBlock
x:Name=”theRectangle”
Text=”{Binding ItemFuelMill, StringFormat=\{0:0.00 \} }”
Foreground=”White”
FontSize=”{StaticResource PhoneFontSizeExtraLarge}”
VerticalAlignment=”Center” HorizontalAlignment=”Right” Margin=”0,0,0,0″ />
</Grid>
<TextBlock
x:Name=”theTextBlock”
Text=”{Binding ItemDate, StringFormat=\{0: MMMM d\, yyyy\} }”
FontSize=”{StaticResource PhoneFontSizeLarge}”
Grid.Column=”1″ Grid.ColumnSpan=”4″
Grid.Row=”0″ Grid.RowSpan=”1″
VerticalAlignment=”Top” Margin=”0, 12, 0, 0″/>
<TextBlock
Text=”{Binding ItemDist, StringFormat=\{0:0.0 \}km }”
FontSize=”{StaticResource PhoneFontSizeSmall}”
Grid.Column=”1″ Grid.ColumnSpan=”1″
Grid.Row=”1″ Grid.RowSpan=”1″
VerticalAlignment=”Top” HorizontalAlignment=”Right” Margin=”0, 0, 0, 0″/>
<TextBlock
Text=”{Binding ItemRefuel, StringFormat=\{0:0.0 \}l }”
FontSize=”{StaticResource PhoneFontSizeSmall}”
Grid.Column=”2″ Grid.ColumnSpan=”1″
Grid.Row=”1″ Grid.RowSpan=”1″
VerticalAlignment=”Top” HorizontalAlignment=”Right” Margin=”0, 0, 0, 0″/>
<TextBlock
Text=”{Binding ItemFPrice, StringFormat=\{0:0.0 \}PLN }”
FontSize=”{StaticResource PhoneFontSizeSmall}”
Grid.Column=”3″ Grid.ColumnSpan=”1″
Grid.Row=”1″ Grid.RowSpan=”1″
VerticalAlignment=”Top” HorizontalAlignment=”Right” Margin=”0, 0, 0, 0″/>
</Grid>
</Border>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
[/xaml]
DataTemplate to kontener, który będzie nam przechowywał szablon “jedego wiesza z tabeli”, nazwaliśmy go EntriesListBoxItemTemplate. Kontrolka Grid służy nam do umiejscowienia wszystkich elementów, które mają znaleźć się na liście, textblock to kontrolka, która będzie nam wyświetlać tekst. Cała magia Data Bindingu i StringFormatu odbywa się tutaj:
[xaml]
Text=”{Binding ItemRefuel, StringFormat=\{0:0.0 \}l }”
[/xaml]
Ta linijka oznacza mniej więcej: kiedy będziesz przerabiał każdy wiesz, weź z wiersza wartość elementu ItemRefuel, oraz nadaj mu format {0:0.0}l – czyli jeśli będziemy mieć element o wartości 7.53, kontrolka wyświetli nam 7.5l (l tutaj po prostu oznaczają litry).
Bardzo ważne w tym przypadku są tzw. escape charactery, które powiedzą mechanizmowi, że nawiasy nie należą do Bindingu, lecz do właściwości StringFormat. Należy zaznaczyć, że operacja ta ma na celu tylko wyświetlać dane, a nie udostępniać do modyfikacji. Z tego powodu działa tu tryb OneWay – czyli “tylko pobieraj, nie wysyłaj do bazy niczego”, toteż możemy sobie pozwolić na takie modyfikacje.
Co do StringFormat działającego w trybie TwoWay, istnieje również alternatywa wspomniana w artykule z MSDN – stworzenie własnego konwertera – klasy, która będzie implementowała interfejs “IValueConverter”, przez to funkcję Convert (oraz ConvertBack, kiedy stosujemy Binding z opcją TwoWay). Bardzo dobry i obszerny przykład przedstawiam poniżej:
Data Binding and StringFormat in Silverlight « Matt Duffield.