Introduction
In this blog post, we are going to see the classic Frogger game ported to Windows Phone 7. The game was created by Ionian University professor K. Anagnostou and his students (you can read more on prof. Anagnostou’s blog post here). He also gave me the kind permission to port his source code from PC to Windows Phone 7, and he also suggested that I could use an accelerometer to control the frog’s movement. Since I do not currently have a device, I decided to use the accelerometer and the corresponding library described in my previous blog post "Emulating accelerometer in Windows Phone 7".
Porting the project to Windows Phone 7
Not much to say here. I created a new Windows Phone 7 project, added the files from the original project and … snap! It worked like a charm! Windows Phone 7’s XNA project default orientation is Landscape, which is perfect for the game concept. The only thing I had to do is get rid of the gamepad related code and add the accelerometer one.
Using the accelerometer library
First of all, I had to create a WCF service reference from the XNA project to the Windows application. Unfortunately, while Windows Phone developer tools are in Beta, adding a service reference from inside Visual Studio 2010 does not work as expected, so I had to use a workaround that you can see in a great DarkGenesis post here (I am highly confident that this will be fixed when tools go RTM in a couple of weeks). However, when I implemented that and used the library in the game, I had to face an interesting problem regarding the frog’s movement. If you hold the accelerometer in a way (e.g. towards the X axis), the frog will go up continuously. So, I had to implement a strategy in which during the time between two updates from the accelerometer coming from WCF service (remember that the accelerometer library sends updates every 200 milliseconds) the player has to bring the accelerometer to the “near zero” position (all X,Y and Z values are close to zero). This was implemented using two instances of the same enumeration.
1: public enum ToMoveFrog
2: {
3: Nowhere,
4: Up,
5: Down,
6: Left,
7: Right
8: }
As you can understand, this enumeration helps to keep track of the direction the player has moved the accelerometer, thus the direction he wants the frog to move. I’m keeping track of the current selected direction and the previous one. Here is the code that is executed when an update from the accelerometer is received
1: void client_GetReportCompleted(object sender, GetReportCompletedEventArgs e)
2: {
3: float X = e.Result.AxisX_G;
4: float Y = e.Result.AxisY_G;
5: if (X > 0.5 && frogMovementPrevious == ToMoveFrog.Nowhere )
6: {
7: frogMovement = ToMoveFrog.Up;
8: }
9: else if (X < -0.5 && frogMovementPrevious == ToMoveFrog.Nowhere)
10: {
11: frogMovement = ToMoveFrog.Down;
12: }
13: else if (Y > 0.5 && frogMovementPrevious == ToMoveFrog.Nowhere)
14: {
15: frogMovement = ToMoveFrog.Left;
16: }
17: else if (Y < -0.5 && frogMovementPrevious == ToMoveFrog.Nowhere)
18: {
19: frogMovement = ToMoveFrog.Right;
20: }
21: else
22: {
23: frogMovementPrevious = ToMoveFrog.Nowhere;
24: }
25:
26: }
The method gets the values for the X and Y axis and then compares them to the thresholds (0.5 and –0.5), to decide on the fromMovement (instance of the ToMoveFrog enumeration). Moreover, the person performs a check on the fromMovementPrevious value (also an instance of ToMoveFrog) to check if the player has brought the accelerometer to the “near zero” position. Moreover, the code to update the frog’s position in the updateFromPosition is pretty straightforward
1: if (frogMovement == ToMoveFrog.Up)
2: {
3: frogRectangle.Y -= frogRectangle.Height;
4: frogState = FrogState.OnRoad;
5: frogMovementPrevious = ToMoveFrog.Up;
6: }
7: else if (frogMovement == ToMoveFrog.Down)
8: {
9: frogRectangle.Y += frogRectangle.Height;
10: frogMovementPrevious = ToMoveFrog.Down;
11: }
12: else if (frogMovement == ToMoveFrog.Left)
13: {
14: frogRectangle.X -= frogRectangle.Width;
15: frogMovementPrevious = ToMoveFrog.Left;
16: }
17: else if (frogMovement == ToMoveFrog.Right)
18: {
19: frogRectangle.X += frogRectangle.Width;
20: frogMovementPrevious = ToMoveFrog.Right;
21: }
22:
23: frogMovement = ToMoveFrog.Nowhere;
Finally, a photo of the running game on the emulator using the accelerometer

As always, source code is free! (it includes the Accelerometer library) here: http://cid-10e568adbb498dc8.office.live.com/self.aspx/Windows%20Phone%20Source%20Code/FroggerWP7.zip
Introduction
The Windows Phone 7 emulator that gets installed when you download and install the developer tools does not have any way to access an accelerometer. Although you can add a reference to Microsoft.Devices.Sensors, you will not get any values during application execution. Since I have a Freescale badge that comes with an accelerometer sensor (among others) that works with the Sensor and Location platform in Windows 7, I decided to create a small Windows application that could ‘send’ accelerometer values to the emulator.
The Windows application that connects to the accelerometer (AccelerometerWCF solution)
In the Windows application, first thing I had to do was add a reference to the Microsoft.WindowsAPICodePack.Sensors.dll contained in the Windows API Code Pack for Windows 7 (a beautiful library that lets you access all Windows 7 goodness from managed code). This way I was able to hook to the accelerometer, and receive data reports at regular intervals. Let’s see some code on how.
1: ServiceHost svc;
2: Accelerometer3D acc;
3: public MainWindow()
4: {
5: InitializeComponent();
6: this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
7: }
8:
9: void MainWindow_Loaded(object sender, RoutedEventArgs e)
10: {
11: SensorList<Accelerometer3D> sl = SensorManager.GetSensorsByTypeId<Accelerometer3D>();
12: acc = sl[0];
13: acc.AutoUpdateDataReport = true;
14: acc.DataReportChanged +=new DataReportChangedEventHandler(acc_DataReportChanged);
15: svc = new ServiceHost(typeof(Accelerometer3DService), new Uri("http://localhost:10000/Accelerometer3DService/"));
16: svc.Open();
17: }
18:
19: void acc_DataReportChanged(Sensor sender, EventArgs e)
20: {
21: Accelerometer3D acc = sender as Accelerometer3D;
22: Report.Accelerometer3D = new CustomAccelerometer3DReport()
23: {
24: AxisX_G = acc.CurrentAcceleration[AccelerationAxis.X],
25: AxisY_G = acc.CurrentAcceleration[AccelerationAxis.Y],
26: AxisZ_G = acc.CurrentAcceleration[AccelerationAxis.Z]
27: };
28: }
At the beginning, we declare an Accelerometer object. On MainWindow_Loaded we get the accelerometer sensor list (accelerometers that are attached to the current computer), and we assign the accelerometer object to the first element in the list, since we know that we have only one accelerometer attached to the computer. Then, we set the AutoUpdateDataReport to true, so the accelerometer sends a data report regularly, and then we hook to the DataReportChanged event (forget all the “svc” related lines for now).
In the event handler, we get a reference to the sender, and then set the X,Y and Z values to a static class (Report) variable of type CustomAccelerometer3DReport which will be reported to the emulator. Unsurprisingly, the class definition is the following
1: [DataContract]
2: public class CustomAccelerometer3DReport
3: {
4: [DataMember]
5: public float AxisX_G { get; set; }
6: [DataMember]
7: public float AxisY_G { get; set; }
8: [DataMember]
9: public float AxisZ_G { get; set; }
10: }
So, the question is, how to report the data to the emulator? The only way to “connect” this to the emulator is using web services, and the preferred option for that is WCF, since in this way we can use “Add Service Reference” in the Windows Phone project to create proxy objects for the service.
In the first code segment, you can see that we are creating a new ServiceHost object. This ServiceHost object is then initialized with a reference to the type of the service’s implementation and a communication Uri. As we can see in the app.config, the service is configured to use basicHttpBinding, since this is supported by Silverlight in Windows Phone 7. Implementation of the service is rather simple, too.
1: [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
2: public class Accelerometer3DService : IAccelerometer3DService
3: {
4: public CustomAccelerometer3DReport GetReport()
5: {
6: return Report.Accelerometer3D;
7: }
8: }
The most important thing to notice here is that the service is instantiated as a Singleton, so that only one instance of a service object is active, at a given point in time. The GetReport method returns a copy of the Report.Accelerometed3D property, an object that contains the X,Y and Z values. We’re ready!
The Windows Phone 7 Silverlight application (AccelerometerTest solution)
I created a very simple Windows Phone 7 Silverlight application that basically has 3 textboxes, which get updated at a regular time interval with the accelerometer’s values. I also used “Add Service Reference” to create the proxy objects to have the Windows Phone 7 application properly communicate with the Windows application hosting the service. Because I cannot “add an event” to the web service, I decided to create a timer (using the StoryBoard object), which gets updated every 200 milliseconds. At each update, it updates the 3 textblocks on the screen with the X, Y and Z values coming from the accelerometer. Full source code, so you can reuse it in your projects:
1: Accelerometer3DServiceClient client;
2: Storyboard timer;
3:
4: // Constructor
5: public MainPage()
6: {
7: InitializeComponent();
8: this.Loaded += new RoutedEventHandler(MainPage_Loaded);
9: }
10:
11: void MainPage_Loaded(object sender, RoutedEventArgs e)
12: {
13: client = new Accelerometer3DServiceClient();
14: client.GetReportCompleted += new EventHandler<GetReportCompletedEventArgs>(client_GetReportCompleted);
15:
16: timer = new Storyboard();
17: timer.Duration = TimeSpan.FromMilliseconds(200);
18:
19: timer.Completed += new EventHandler(timer_Completed);
20: timer.Begin();
21: }
22:
23: void client_GetReportCompleted(object sender, GetReportCompletedEventArgs e)
24: {
25: textBlock1.Text = e.Result.AxisX_G.ToString();
26: textBlock2.Text = e.Result.AxisY_G.ToString();
27: textBlock3.Text = e.Result.AxisZ_G.ToString();
28: }
29:
30: void timer_Completed(object sender, EventArgs e)
31: {
32: client.GetReportAsync();
33: timer.Begin();
34: }
Some important things to notice: First of all, I decided to use StoryBoard over DispatcherTimer for various reasons, some of them you can check here. I set the StoryBoard to a 200 milliseconds interval, and I “Begin” it again each time it “Completes”. Moreover, each time the Completed event is fired, I download (asynchronously) the accelerometer values from the web service, which then are shown to the three textblocks on the User Interface. Finally, for the sake of the argument, check a screenshot of the applications and the accelerometer running:

Download full source code here: http://cid-10e568adbb498dc8.office.live.com/self.aspx/Windows%20Phone%20Source%20Code/EmulatingAccelerometerWP7.zip
Introduction
Continuing my adventure in XNA after porting Arkanoid for Windows Phone 7, I’ve been busy during the last days in an attempt to re-create the famous Windows Mobile 6.x game called “Bubble Breaker” for Windows Phone 7. This is a great game to spend your time, and I find it highly addictive. I had two choices to implement it; either Silverlight or XNA. I chose XNA for this example, but I promise to also create a Silverlight version! If you don’t want to read more and want to get your hands dirty playing with the source code, check here: http://cid-10e568adbb498dc8.office.live.com/self.aspx/Windows%20Phone%20Source%20Code/BubbleBreakerWP7.zip
Game Description
The game is rather simple. There are some balls on screen, using different colors. User can touch one ball, and if one or more of its ‘neighbours’ (vertically or horizontally, *not* diagonally) are the same color, they get ‘selected’. The process is repeated, recursively, for the selected balls (having, of course, the same color) until there are no neighboring balls with the same color as the originally selected. The selected balls all get a new (in our example, white) color, and the user can re-select them, to make them disappear. If there are blank positions vertically or horizontally, the game moves the remaining balls either down or right (imagine having a ‘gravity’ system pulling objects both from the bottom and from the right side). Score is easily calculated by the formula
score = score + (number of ellipses removed) * (number of ellipses removed – 1)
which is the same formula used in the original Windows Mobile game. If there are no more ellipses that can be selected for removal (i.e. there are no ‘neighboring’ ellipses carrying the same color), the game is over. User can also reset the game by touching the bottom of the game area.
Screenshot:

Diving into the code
First of all, the game itself is played only on portrait mode. This is enforced by adding the following two lines to the constructor
1: graphics.PreferredBackBufferHeight = 800;
2: graphics.PreferredBackBufferWidth = 480;
The game uses a two dimensional board to display the ellipses. It also uses some class variables to hold important information for our game. Here is the code for the InitializeGame method, that initializes the game and is called by the Initialize XNA method (when the XNA framework loads the game), and when the user wants to reset the game.
1: private void InitializeGame()
2: { 3: AreEllipsesSelected = false;
4: IsGameOver = false;
5: score = 0;
6: ellipses = new Ellipse[EllipsesColumns, EllipsesRows];
7: for (int column = 0; column < EllipsesColumns; column++)
8: { 9: for (int row = 0; row < EllipsesRows; row++)
10: { 11: Ellipse el = new Ellipse(this.Content.Load<Texture2D>("ellipse"), GetRandomEllipseColor()); 12: el.Location = new Vector2(column * EllipseWidth, row * EllipseHeight);
13: ellipses[column, row] = el;
14: }
15: }
16: }
The code for the ellipse class is rather simple, too.
1: class Ellipse
2: { 3: public Texture2D Texture {get;set;} 4: public Color EllipseColor { get; set; } 5: public Vector2 Location { get; set; } 6: public Color OriginalEllipseColor { get; private set; } 7:
8:
9:
10: public Ellipse(Texture2D texture, Color color)
11: { 12: this.Texture = texture;
13: Location = Vector2.Zero;
14: OriginalEllipseColor = EllipseColor = color;
15: }
16:
17: public void Update()
18: { } 19:
20:
21: public void Draw(SpriteBatch spriteBatch, Rectangle bounds)
22: { 23: spriteBatch.Draw(Texture, Location, EllipseColor);
24: }
25:
26:
27: public static List<Color> AvailableColors { get; private set; } 28: static Ellipse()
29: { 30: AvailableColors = new List<Color>();
31: AvailableColors.Add(Color.Blue);
32: AvailableColors.Add(Color.Purple);
33: AvailableColors.Add(Color.Green);
34: AvailableColors.Add(Color.Yellow);
35: AvailableColors.Add(Color.Red);
36:
37: }
38: }
Each ellipse gets a reference to the same Texture object loaded at the beginning of the game, and has two members carrying information about its color. The OriginalEllipseColor variable is used to hold a 'backup’ of the ellipse’s original color, since if it is selected and not chosen for removal, it should return to its original color. The Draw method just draws the ellipse on the screen, and the AvailableColors static field is used to list the available colors for the ellipses, with each ellipse getting assigned a randomly selected color at the beginning of the game.
The Update method in the main code file first calls a method to get touch input, called HandledTouchInput. In this method, we first check to see if the user has touched the bottom 50 pixels of the screen, so as to reset the game
1: //check if the user wants to reset the game
2: if (touchLocation.Position.Y > 750)
3: { 4: InitializeGame();
5: return;
6: }
Then, we parse the point that the user touched into a respective ellipse
1: int column = (int)(touchLocation.Position.X / EllipseWidth);
2: int row = (int)(touchLocation.Position.Y / EllipseHeight);
3:
4: //out of ellipses bounds
5: if (column >= EllipsesColumns || row >= EllipsesRows) return;
6:
7: Ellipse selectedEllipse = ellipses[column, row];
Then, we have two choices, depending on whether there are selected ellipses or not. If there are no ellipses selected, then we have to check the ‘neighboring’ ones (to the one chosen by the user) for the same color. We create a SelectedEllipses list to hold a reference to the selected ellipses, and we also check if the total ellipses about to be selected are fewer than our threshold, which is held in the minEllipsesToRemove static variable). We also call the MarkEllipses method, which has the task to mask the ‘neighboring’ ellipses with the same color as the one selected by the user.
1: if (!AreEllipsesSelected)//user selects an ellipse
2: { 3: if (selectedEllipse != null)
4: { 5: SelectedEllipses = new List<Ellipse>();
6: MarkEllipses(selectedEllipse, column, row, selectedEllipse.EllipseColor);
7: if (SelectedEllipses.Count < minEllipsesToRemove) //not enough selected ellipses
8: { 9: //reset the selected
10: foreach (Ellipse el in SelectedEllipses)
11: el.EllipseColor = el.OriginalEllipseColor;
12:
13: return;
14: }
15: AreEllipsesSelected = true;
16: selectedSoundEffect.Play();
17: }
18: }
The MarkEllipses method is recursively called 4 times (maximum) for each ellipse it scans, it order to check left, right, top and bottom.
1: private void MarkEllipses(Ellipse ellipse, int column, int row, Color colorToCompare)
2: { 3: if (ellipse != null)
4: { 5: if (ellipse.EllipseColor == colorToCompare)
6: { 7: ellipse.EllipseColor = selectedEllipseColor;
8: SelectedEllipses.Add(ellipse);
9:
10: //check left
11: if (column != 0)
12: MarkEllipses(ellipses[column - 1, row], column - 1, row, colorToCompare);
13: if (row != 0) //check top
14: MarkEllipses(ellipses[column, row - 1], column, row - 1, colorToCompare);
15: if (row != EllipsesRows - 1) //check bottom
16: MarkEllipses(ellipses[column, row + 1], column, row + 1, colorToCompare);
17: if (column != EllipsesColumns - 1) //check top
18: MarkEllipses(ellipses[column + 1, row], column + 1, row, colorToCompare);
19: }
20: else
21: return;
22: }
23: }
However, if ellipses are selected, and the ellipse that just got touched is contained in the SelectedElllipses list, we first make them disappear, calculate the new score and then reallocate the remaining ellipses. This gets performed in the ReallocateEllipses method. If the ellpse that just got touched is not contained in the SelectedEllipses list, we just revert the selected ellipses to their original color.
1: else if (AreEllipsesSelected) //ellipses are already selected
2: { 3: if (SelectedEllipses.Contains(selectedEllipse) && SelectedEllipses.Count >= minEllipsesToRemove)//let's disappear them!
4: { 5: foreach (Ellipse el in SelectedEllipses)
6: { 7: ellipses[(int)(el.Location.X / EllipseWidth), (int)(el.Location.Y / EllipseHeight)] = null;
8: }
9:
10: score += SelectedEllipses.Count * (SelectedEllipses.Count - 1);
11:
12: //let's deorganize the rest of the ellipses
13: ReallocateEllipses();
14: deletedSoundEffect.Play();
15: }
16: else
17: { 18: foreach (Ellipse el in SelectedEllipses)
19: { 20: el.EllipseColor = el.OriginalEllipseColor;
21: }
22: }
23: AreEllipsesSelected = false;
24: }
In the ReallocateEllipses method, clears the rows of any ‘blank’ spaces and the columns of any empty ones (tries to collapse the ellipses both vertically – bottom – and horizontally – right). Disclaimer: Yeah, I am pretty sure that the algorithm can become much faster (e.g. scan only rows and columns containing info from the SelectedEllipses list) but I’d rather leave it to you as an exercise!
1: private void ReallocateEllipses()
2: { 3: //first, let's clear the empty spaces in the rows
4: for (int column = 0; column < EllipsesColumns; column++)
5: for (int row = EllipsesRows - 1; row >= 0; row--)
6: { 7: //
8: for (int l = 1; l <= row; l++)
9: { 10: if (ellipses[column, l] == null && ellipses[column, l - 1] != null)
11: { 12: ellipses[column, l] = ellipses[column, l - 1];
13: ellipses[column, l - 1] = null;
14: ellipses[column, l].Location += new Vector2(0, EllipseHeight);
15: }
16: }
17:
18: }
19:
20: //now, we'll check for empty columns
21: for (int column = EllipsesColumns - 1; column >= 0; column--)
22: { 23: for (int row = 1; row <= column; row++)
24: { 25: //we'll check the bottom element
26: //if it's null, then the whole row is null
27: if (ellipses[row, EllipsesRows - 1] == null && ellipses[row - 1, EllipsesRows - 1] != null)
28: { 29: //copy entire column...
30: for (int k = 0; k < EllipsesRows; k++)
31: { 32: if (ellipses[row - 1, k] == null) continue;
33: ellipses[row, k] = ellipses[row - 1, k];
34: ellipses[row - 1, k] = null;
35: ellipses[row, k].Location += new Vector2(EllipseWidth, 0);
36: }
37: }
38: }
39: }
40: }
The CheckIsGameOver method checks if there are any ‘neighboring’ ellipses with the same color
1: private bool CheckIsGameOver()
2: { 3: //if there are any ellipses selected, there's no point in checking as it's definitely not game over
4: if (AreEllipsesSelected) return false;
5:
6: for (int column = 0; column < EllipsesColumns - 1; column++)
7: { 8: for (int row = 0; row < EllipsesRows - 1; row++)
9: { 10: //we are comparing each ellipse with the ones located below and right from it
11: if (ellipses[column, row] == null) continue;
12:
13:
14: if (ellipses[column, row].EllipseColor == ellipses[column, row + 1].EllipseColor)
15: return false;
16:
17: if (ellipses[column + 1, row] == null) continue;
18:
19: if (ellipses[column, row].EllipseColor == ellipses[column + 1, row].EllipseColor)
20: return false;
21: }
22: }
23:
24: return true;
25:
26: }
Draw just delegates to the Draw method of each Ellipse instance, and DrawScore draws the score using the arial font (and the game over message if IsGameOver has returned true).
1: protected override void Draw(GameTime gameTime)
2: { 3: //get a black background
4: GraphicsDevice.Clear(Color.Black);
5:
6: spriteBatch.Begin();
7:
8: //draw all the ellipses
9: foreach (Ellipse e in ellipses)
10: { 11: if (e != null)
12: e.Draw(spriteBatch, graphics.GraphicsDevice.Viewport.Bounds);
13: }
14:
15:
16: DrawScore(spriteBatch);
17:
18: spriteBatch.End();
19: base.Draw(gameTime);
20: }
21:
22: private void DrawScore(SpriteBatch spriteBatch)
23: { 24: Vector2 textLocation = new Vector2(10, 750);
25:
26: spriteBatch.DrawString(font, string.Format(messageScore, score), textLocation, Color.White);
27:
28: if (IsGameOver)
29: { 30: Vector2 msgSize = font.MeasureString(messageScore);
31: spriteBatch.DrawString(font, string.Format(messageGameOver, score), new Vector2(textLocation.X + msgSize.X + 10, textLocation.Y), Color.White);
32: }
33: }
You can download the source code for free by visiting my skydrive folder: http://cid-10e568adbb498dc8.office.live.com/self.aspx/Windows%20Phone%20Source%20Code/BubbleBreakerWP7.zip
Stay tuned for more Windows Phone 7 tutorials!
Prof. Kostas Anagnostou from Ionian University has created an excellent 6 part tutorial covering the creation of the classic Arkanoid game for the PC using XNA framework. Here are the links for the tutorial
You can also find the complete tutorial packaged in a pdf document in StudentGuru e-learning page. All the tutorials are written in Greek but you can certainly use a translation platform such as Microsoft Translator to read them.
Given his kind permission, I decided to port the game to Windows Phone 7. I have to admit that porting was rather easy, given the fact that XNA framework has minor differences comparing PC/XBOX engine to Windows Phone. Initially, something that one has to pay attention to is the screen sizes. In Windows, the screen size (resolution) is the one the user has chosen. In Windows Phone 7, it’s 800 x 480. You can see it in the code Visual Studio creates for you
|
// Pre-autoscale settings. graphics.PreferredBackBufferWidth = 480; graphics.PreferredBackBufferHeight = 800; |
The other thing I had to change in order for this to work in Windows Phone 7 was the player input. In the PC, you have the keyboard. In Windows Phone 7, you have a touch screen. One can easily “query” the touch screen for input using this simple line of code
|
TouchCollection tc = TouchPanel.GetState(); |
In this way, you get a collection of TouchLocation objects, with each one representing the point where the user touched the screen. So, we can query this collection and get information about each and every one point that the user touched the screen (hint: Windows Phone 7 devices will have capacitive 4-point multitouch screens).
We are using the following code inside the UpdateWorld method (which gets called by the Update XNA method) to determine the paddle’s movement and placement
|
paddleSpeed = 10; TouchCollection tc = TouchPanel.GetState(); if (tc.Count != 0) { TouchLocation tl = tc[0];
int distance = (int)tl.Position.X - (int)(paddle.X + paddle.Width / 2);
paddleSpeed *= Math.Sign(distance);
if (Math.Sign(distance) == previousPaddleDirectionSign) { paddleSpeed += Math.Sign(distance) * 5; } previousPaddleDirectionSign = (short)Math.Sign(distance); if (Math.Abs(distance) >= 3) paddle.X += paddleSpeed; } |
OK, let’s decrypt it a bit. For starters, we initialize the variable paddleSpeed to 10. 10 pixels will be the minimum movement of the paddle, either left or right. Then, we get the collection of touch points, getting a reference to the first touch point (we assume that the user won’t touch the screen in more than one point. If he does, we ignore them). We declare a distance variable, which value is set to be equal to the difference between touch point’s X and the center X of the paddle (paddle.X + paddle.Width / 2). Consequently, if the user touches righter than the paddle’s center, distance will be a positive integer. Otherwise, it will be negative.
We then multiply paddleSpeed variable with the sign of the distance. The Math.Sign method returns +1 if the argument is positive, –1 if the argument is negative and 0 if the argument is, well, zero. Then, we compare the sign of the distance with a variable called previousPaddleDirectionSign (long name, I know, but trust me, it helps!). This comparison will be true if the user had been pressing in the same direction (e.g. left compared to the paddle’s center) for two or more consecutive game updates (Reminder: Windows Phone XNA Games run at 30 Frames Per Second). If this happens, then we increase paddleSpeed with 5 pixels more (Math.Sign is used again to verify correct addition, either to the positive or the negative integer range).
After that, we set the previousPaddleDirectionSign variable to Math.Sign(distance) to compare it again on the next Update call. And, finally, we set a minimum threshold of 3 pixels as to trigger movement of the paddle. We use Math.Abs which returns the absolute value of a variable to get distance’s absolute distance from the center of the paddle. And voila, the game is ready! Check for a screenshot and for the downloadable source code

Source Code: http://cid-10e568adbb498dc8.office.live.com/self.aspx/Windows%20Phone%20Source%20Code/ArkanoidWP7.zip
Stay tuned for more Windows Phone 7 tutorials!
Όσοι ασχολείστε με ανάπτυξη εφαρμογών για το iPhone σίγουρα θα έχετε δει το tutorial για την κατασκευή του MoveMe (http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/Creating_an_iPhone_App/index.html). Πρόκειται για μια πολύ απλή εφαρμογή, με ένα rectangle στην οθόνη, το οποίο μπορούμε να το κάνουμε drag σε όλο το μήκος και πλάτος της οθόνης του κινητού και με το που το αφήσουμε, αυτό επιστρέφει στην αρχική του θέση με ένα μικρό animation της κίνησης. Ας δούμε εδώ πως μπορούμε να το φτιάξουμε σε Silverlight για Windows Phone 7 με τη χρήση του εργαλείου Expression Blend 4 for Windows Phone Beta (hint: μπορείτε να κατεβάσετε δωρεάν όλα τα beta development tools για Windows Phone 7 από εδώ).
Αρχικά, ανοίγουμε το Expression Blend 4 for Windows Phone Beta και επιλέγουμε να δημιουργήσουμε ένα νέο Silverlight project, δίνοντας του ένα όνομα της επιλογής μας.

Με το που δημιουργηθεί το project, μας εμφανίζεται μια οθόνη, στην οποία μπορούμε να σχεδιάσουμε το γραφικό περιβάλλον της εφαρμογής μας. Αυτό που θα κάνουμε αρχικά είναι να δημιουργήσουμε ένα νέο rectangle στην εφαρμογή μας.
Στο μενού εργαλείων στα αριστερά κάνουμε κλικ στο rectangle.

Οπότε, μπορούμε πλέον στην οθόνη του “κινητού” να σχεδιάσουμε ένα καινούριο Rectangle, χρησιμοποιώντας το ποντίκι μας για να δώσουμε το πλάτος και το μήκος που επιθυμούμε.

Μπορούμε να πάμε στο μενού εργαλείων properties στα δεξιά του Blend και να μεταβάλλουμε διάφορα χαρακτηριστικά του καινούριου μας Rectangle. Στο παράδειγμά μας, πείραξαμε το Rectangle και του δώσαμε ένα ντεγκραντέ (gradient) background, με πράσινο-μπλε χρώμα.


Το πρώτο πράγμα που θα κάνουμε θα είναι να τροποποιήσουμε το Rectangle ώστε να είναι draggable, να μπορούμε δηλαδή να το μετακινήσουμε με τα δάχτυλά μας στη συσκευή μας, ή με το ποντίκι αν δουλεύουμε με τον emulator. Αν θέλαμε να δώσουμε αυτή τη λειτουργία με κώδικα, τότε θα έπρεπε να ακολουθήσουμε τα εξής (ψευδο)βήματα
- Να φτιάξουμε μια μεταβλητή isBeingDragged τύπου boolean
- Να κάνουμε handle το event MouseDown (ή TouchDown κ.λ.π.), και εκεί set την isBeingDragged σε true
- Να κάνουμε handle το event MouseMove. Εκεί, αν και μόνο αν (if συνθήκη) η isBeingDragged είναι ίση με true, να μεταβάλλουμε το x και το y (ή το margin κ.λ.π.) του rectangle, κατά ένα ποσό σχετικό με την τιμή του mouse.X και mouse.Y
- Να κάνουμε handle το event MouseUp. Εκεί κάνουμε set την isBeingDragged σε false ώστε να μην εκτελείται ο κώδικας στην if συνθήκη της MouseMove.
(Παρέλειψα εσκεμένα να αναφερθώ στις Control.CaptureMouse() και Control.ReleaseMouseCapture() για να μην αγχώσω/μπερδέψω τον αρχάριο αναγνώστη :) )
Μπορείτε να δείτε ότι η λογική είναι αρκετά straightforward, αλλά παρόλα αυτά απαιτεί από εμάς να γράψουμε αρκετό κώδικα. Το Blend με τις διευκολύνσεις που προσφέρει μας γλιτώνει από αυτό τον κόπο. Αυτές οι διευκολύνσεις λέγονται behaviors, και μας παρέχουν ενσωματωμένη λειτουργικότητα την οποία μπορούμε να δώσουμε στα αντικείμενά μας. Πηγαίνουμε λοιπόν στο παράθυρο εργαλείων Assets και επιλέγουμε το μενού Behaviors.

Κάνοντας κλικ στο behaviors, βλέπουμε διάφορες επιλογές. Η επιλογή (το behavior) που μας ενδιαφέρει (όπως ίσως μαντέψατε!) είναι η MouseDragElementBehavior.

Κάνουμε κλικ σε αυτό το behavior και το μεταφέρουμε στο μίνι παράθυρο Objects and Timeline, ακριβώς πάνω στο Rectangle που έχουμε δημιουργήσει (μπορούμε εναλλακτικά να το μεταφέρουμε επάνω στο rectangle που βρίσκεται στην οθόνη εργασίας μας, το αποτέλεσμα θα είναι ακριβώς το ίδιο).

Ας τρέξουμε τώρα την εφαρμογή μας για να δούμε τι κατασκευάσαμε μέχρι στιγμής. Για να την εκτελέσουμε, μπορούμε είτε να πατήσουμε το πλήκτρο F5, είτε να πατήσουμε στο μενού πάνω την επιλογή Project –> Run Project. Αφού περιμένουμε λιγάκι, θα εμφανιστεί ο emulator ενός Windows Phone 7 κινητού, και μετά από λίγο και η εφαρμογή μας.

Δοκιμάστε να κάνετε κλικ πάνω στο rectangle και να το σύρετε πάνω στην οθόνη. Θα δείτε ότι το rectangle ακολουθεί το δείκτη του ποντικιού (όσο φυσικά κρατάτε το αριστερό κουμπί του ποντικιού κρατημένο!). Παρόμοια θα ήταν η συμπεριφορά της εφαρμογής αν την εκτελούσατε σε μια συσκευή, θα μπορούσατε να κουνήσετε το rectangle χρησιμοποιώντας το δάκτυλό σας. Παρατηρούμε ότι το rectangle, μετά την μετακίνησή του παραμένει στη θέση που το αφήσαμε.
Ας περάσουμε τώρα στο πιο tricky κομμάτι της εφαρμογής. Θέλουμε ο χρήστης να κάνει κλικ στο rectangle, να το μετακινεί και όταν αφήνει το πλήκτρο του ποντικιού το rectangle να επιστρέφει στην αρχική του θέση, με ένα animation κατά τη διάρκεια της μετακίνησης. Για να το πετύχουμε αυτό, θα δημιουργήσουμε πρώτα το animation όπου το rectangle επιστρέφει στην αρχική του θέση.
Για να το πετύχουμε αυτό, καλό θα ήταν να “γυρίσουμε” το Blend σε Animation Workspace, από το Design Workspace που είναι το default και είμαστε τώρα. Για να το κάνουμε αυτό, είτε πατάμε το πλήκτρο F6, είτε επιλέγουμε από το πάνω μενού Windows –> Workplaces –> Animation. Αφού το κάνουμε αυτό, θα επιλέξουμε να δημιουργήσουμε ένα καινούριο Storyboard (ένα Storyboard μπορεί να περιέχει ένα ή περισσότερα animations). Για να δημιουργήσουμε ένα καινούριο animation, επιλέγουμε το κουμπί +, στο μίνι παράθυρο “Objects and timeline”.

Αφού πατήσουμε το +, το Blend μας δίνει την επιλογή να δώσουμε στο καινούριο Storyboard μας ένα όνομα της επιλογής μας.

Αφού δώσουμε όνομα στο Storyboard, το Blend δημιουργεί ένα κόκκινο περίγραμμα γύρω από την επιφάνεια σχεδίασης, πράγμα που σημαίνει ότι καταγράφει οποιαδήποτε αλλαγή κάνουμε στις ιδιότητες των αντικειμένων (χρώμα background, margins, size, περιστροφή, και ό,τι άλλο μπορείτε να φανταστείτε). Για να κατασκευάσουμε το animation μας, πρέπει να σκεφτούμε δύο πράγματα
- το τι θα κάνουμε animate
- το πόσο χρόνο θα διαρκεί
Συγκεκριμένα, τόσο στο Silverlight (web, phone) όσο και στο WPF, ένα animation σημαίνει μετατροπή μιας ιδιότητας από μία τιμή σε κάποια άλλη, για ένα πεπερασμένο χρονικό διάστημα. Στην περίπτωσή μας θέλουμε μια χρονική διάρκεια έστω δύο δευτερολέπτων, και μετατροπή της τοποθεσίας του rectangle από την οποιαδήποτε στην αρχική. Το οποιαδήποτε υποδηλώνει την τοποθεσία που θα το αφήσει ο χρήστης μετά το drag. Οπότε, αρχικά, μετακινούμε τον δείκτη χρόνου του storyboard στα δύο δευτερόλεπτα.

Στη συνέχεια, επιλέγουμε το rectangle χρησιμοποιώντας το selection tool από τα tools στα αριστερά του blend (μπορείτε να χρησιμοποιήσετε και το keyboard shortcut V για να επιλέξετε το selection tool). Αυτό που θέλουμε να επιτύχουμε είναι να κάνουμε record τα ανάλογα properties του rectangle, έτσι ώστε το animation να ξέρει πού θα μεταφέρει το rectangle στο χρονικό διάστημα των δύο δευτερολέπτων. Τα properties αυτά είναι το TranslateX και το TranslateY και τα βρίσκουμε στο υπομενού Transform του μίνι παραθύρου Properties. Κάνοντας κλικ στο δεξί τετραγωνάκι που βρίσκεται δεξιά τους μπορούμε να επιλέξουμε την επιλογή Record Current Value. Αμέσως θα δούμε το τετραγωνάκι να αλλάζει από σκούρο γκρι χρώμα σε άσπρο, πράγμα που σημαίνει ότι έχουν “κλειδώσει” οι τρέχουσες τιμές.

Μπορούμε να το επιβεβαιώσουμε και από το objects and timeline panel, κάνοντας expand τα περιεχόμενα στοιχεία του rectangle.

Αφού τελειώσαμε με τη δημιουργία του animation, μπορούμε να πατήσουμε το F6 ώστε να ξαναγυρίσουμε στο Designer Workspace. Επίσης, μπορούμε να επιλέξουμε να σταματήσει το “recording” για τη δημιουργία του storyboard, κάνοντας κλικ στο κόκκινο κουμπάκι που δείχνει η παρακάτω εικόνα.
Για να τελειώσουμε την εφαρμογή μας, πρέπει να επιλέξουμε να ενεργοποιείται το animation μόλις ο χρήστης αφήσει το rectangle. Αυτό μπορούμε πολύ απλά να το επιτύχουμε με ένα ακόμα behavior. Αν πλοηγηθούμε στα behaviors, θα δούμε ένα με όνομα ControlStoryBoardAction.

Το παίρνουμε και το κάνουμε drag drop πάνω στο rectangle, στο objects and timeline μίνι παράθυρο.

Εν συνεχεία, ενώ το ControlStoryboardAction που δημιουργήσαμε παραμένει επιλεγμένο, μπορούμε να πειράξουμε τα properties του.

Σκεφθείτε, πότε θέλουμε να εκτελείται το animation; Όταν αφήνουμε το rectangle. Το ανάλογο event για την περίπτωσή μας είναι το MouseLeftButtonUp. Τι θέλουμε να γίνεται όταν γίνει raise το event; Να ξεκινάει το Storyboard μας. Οπότε αφήνουμε το Play. Ποιο Storyboard θέλουμε να εκτελείται; Φυσικά, το Storyboard που δημιουργήσαμε πριν λίγο.

Και ναι, μόλις τελειώσαμε! Μπορείτε να πατήσετε το F5 ή το Project –> Run Project για να δείτε την εφαρμογή σας εν δράσει!
Μπορείτε να κατεβάσετε τον κώδικα για την παρούσα εφαρμογή από εδώ. Stay tuned για περισσότερα tutorials για Windows Phone 7!
Σας προσκαλούμε στους τελικούς του φοιτητικού διαγωνισμού καινοτομίας "Imagine Cup" την Τρίτη 4 Μαΐου, στις 12:30 μμ, στo Κέντρο Καινοτομίας της Microsoft (Λεωφ. Βασ. Σοφίας 103, Αθήνα).

|
Κατά τη διάρκεια της εκδήλωσης, θα παρουσιαστούν τα καλύτερα από τα 11 πρωτοπόρα projects των ομάδων φοιτητών που συμμετέχουν στην κατηγορία Software Design. Στο τέλος της εκδήλωσης, θα πραγματοποιηθεί η βράβευση της ομάδας των Ελλήνων φοιτητών, που θα εκπροσωπήσει τη χώρα μας στον τελικό του Παγκόσμιου Φοιτητικού Διαγωνισμού «Imagine Cup 2010», στην Πολωνία.
Tην εκδήλωση θα τιμήσει με την παρουσία του ο κύριος Αντώνης Μαρκόπουλος, Ειδικός Γραμματέας Ψηφιακού Σχεδιασμού - Υπουργείο Οικονομίας, Ανταγωνιστικότητας και Ναυτιλίας.
Συντονιστής της εκδήλωσης θα είναι ο δημοσιογράφος Παύλος Τσίμας.
Για να δηλώσετε εγγραφή στην εκδήλωση κάντε κλικ εδώ Προσθέστε την εκδήλωση στο ημερολόγιο σας
|
|
Πρόγραμμα Εκδήλωσης |
|
12:30 - 13:00 |
Προσέλευση - Εγγραφές |
|
13:00 - 13:15 |
Καλωσόρισμα - Εισαγωγή
Παύλος Τσίμας, Δημοσιογράφος - Δημοσιογραφικός Οργανισμός Λαμπράκη |
|
13:15 - 13:25 |
Microsoft Ελλάς: Αποστολή και Ρόλος του Κέντρου Καινοτομίας
Ernst-Jan Stigter, Διευθύνων Σύμβουλος - Microsoft Ελλάς |
|
13:25 - 13:35 |
O θεσμός ‘'Imagine Cup'' και η συμβολή του στην Καινοτομία
Patrick Malone, Διευθυντής Τεχνολογίας - Microsoft Ελλάς |
|
13:35 - 15:10 |
Παρουσίαση των επικρατέστερων projects από τις ομάδες του διαγωνισμού
(με τη συμμετοχή του Παύλου Τσίμα) |
|
15:10 - 15:30 |
Ανακοίνωση και βράβευση των νικητών του διαγωνισμού
Αντώνης Μαρκόπουλος, Ειδικός Γραμματέας Ψηφιακού Σχεδιασμού - Υπουργείο Οικονομίας, Ανταγωνιστικότητας και Ναυτιλίας και Patrick Malone |
|
15:30 |
Πέρας εκδήλωσης - Ελαφρύ Γεύμα | |
|
Το πρόγραμμα ενδέχεται να διαφοροποιηθεί σε κάποια σημεία |
[Disclaimer: this post was created merely as a personal guideline/reminder]
Want to develop MultiTouch on Windows 7 or Windows 7 Phone but you don’t have either a multitouch panel or a Windows Phone 7 device?
The first option is to use a great library hosted on Codeplex called Multi-Touch Vista (link: http://multitouchvista.codeplex.com/). With this library, you can install a multitouch driver so that you can easily use more than one mouse devices (or a mouse and a trackpad, for that matter) to simulate multitouch. You can find lots of videos on the codeplex page of the project, and you can use the great directions listed here: http://michaelsync.net/2010/04/06/step-by-step-tutorial-installing-multi-touch-simulator-for-silverlight-phone-7 in order to test it on the Windows Phone 7 emulator.
Another option is to use a great utility from Office Labs called Touchless. As from their description, Touchless is a”webcam multi-touch SDK”. In fact, it uses your webcam to simulate movement and clicks. Here is the link: http://www.officelabs.com/Lists/Posts/Post.aspx?List=3d0ec20d%2D058d%2D4333%2D813a%2Debbcf0846655&ID=61
PhD Scholarship
Microsoft Research PhD Scholarship application information
The PhD Scholarship Programme recognises and supports exceptional students who show the potential to make an outstanding contribution to science and computing. This programme supports PhD students in computing and those working at the intersection of computing and the sciences.
Only PhD supervisors should apply. If their project is selected, the supervisor has up to a year to find the best possible student for the project.
On This Page
Schedule
- Application deadline: 15 September 2010, 17:00 GMT
- Notification of results: December 2010
For more information, check http://research.microsoft.com/en-us/collaboration/global/apply-europe.aspx
I'm including job descriptions for both positions
Microsoft, as an innovator of technologies, products and solutions, touches the lives of people all over the world and helps to realize the potential of individuals and communities alike. This is a very human business and one that encourages self-expression, opinion and input from each and every one of our employees. Microsoft is looking for a 3, 6 or 12 month paid Internship in Ireland or 12 month in Denmark in the positions of:
Software Design Engineer (SDE)
Description
Work at the Core of Every Product We Build - This is where the fun begins for code gurus like you. As a hands-on Software Design Engineer, you'll make decisions about design and feature implementation, using your mastery of technical tools to make a product vision a reality. If you like to write code and design efficient data structures and algorithms to develop next-generation applications or operating systems, this is the position for you. As an SDE, you'll bring products to life by working with Program Managers to ensure strong design and Software Design Engineers in Test to ensure quality through testing. Ultimately for the SDE, it's your code that turns concepts into new technologies and services.
Qualifications
- Pursuing a BSc, Master or PhD in Computer Science or a related field
- Be available to relocate to one of Microsoft's Development Centers around the world. (Microsoft Corporation pays all costs associated with relocation)
- Fluency in C/C++/C# and a passion for writing quality code using computer science fundamentals
- Functional level English language skills, written and spoken requirement
- Ability to derive creative and innovative solutions by thinking "outside the box"
- Ability to solve complex problems, sometimes by testing and debugging code
- Experience in feature definition, design, and feasibility
- Demonstrated skill in estimating development time
and
Software Design Engineer in Test (SDET)
Discover Life on the Last Line of Defense - As a Software Design Engineer in Test (SDET), you'll own it, break it, fix it, and own it again. You'll ensure a product's quality by making sure it performs as users expect it to. Part of the fun is how creative you can be devising ways to manipulate, crush, and sabotage software into submission-while creating innovative testing technologies along the way.
Ultimately, as an SDET it's your input that can make the difference between joy and frustration for the customers. Since you're keen on how things work, and making them work better, you'll work hand in hand with the Program Managers and Software Design Engineers to design, develop, and maintain automation systems for use in development and testing cycles. Using the tools you create, you'll pour over source code for trouble spots, debugging and isolating problems, and executing creative tests to find new bugs while regression testing recent fixes.
Qualifications
- Pursuing a BSc, Master or PhD in Computer Science or a related field
- Be available to relocate to one of Microsoft's Development Centers around the world. (Microsoft Corporation pays all costs associated with relocation)
- Fluency in C/C++/C#
- Functional level English language skills, written and spoken requirement
- Ability to solve complex problems and write automation systems and device drivers
- Ability to learn to author test plans and cases, conduct security and stress tests and debug at source level after identifying, investigating, and prioritizing bugs
- Demonstrated skills in negotiation and conflict management
Please send us your CV to msgrhr@microsoft.com (mentioning the relevant Job Title) up to January 11th , 2010, including your military status (for male), specifying your technical skills and project details and providing an active e-mail address and your current phone number.
Η κοινότητα του StudentGuru επανέρχεται δυναμικά με δύο online events αυτή την εβδομάδα, ένα για το διαγωνισμό Imagine Cup IT Challenge (στον οποίο μπορείτε πολύ εύκολα και γρήγορα μετά τη λήξη του online event, πρόκειται για ένα απλό κουίζ) και ένα για Web Development!
Ακολουθούν οι περιγραφές των δύο events.
6ο Live Meeting StudentGuru event - IT Challenge support - Τετάρτη 16/12/09 22:00
Ήρθε η ώρα για ακόμα ένα Live Meeting, το 6ο για φέτος! Όμως δεν είναι ένα απλό live meeting. Θα έχετε έναν ακόμα καλό λόγο να διαγωνιστείτε στο IT challenge του Imagine Cup 2010!
Πληροφορίες για το Imagine Cup 2010 και τον IT διαγωνισμό μπορείτε να βρείτε στο www.studentguru.gr και στο www.imaginecup.com. Το επόμενο quiz του IT challenge το οποίο πρέπει να απαντήσει ο διαγωνιζόμενος για να περάσει στο 2ο round του IT challenge πραγματοποιείται online την ερχόμενη Τετάρτη 16/12. To quiz υποδιαιρείται σε 8 quiz, που διαρκούν 1 ώρα και πραγματοποιούνται σε διαφορετικές ώρες της ημέρας. Αρκεί βέβαια να περάσετε μόνο ένα. Το τελευταίο quiz θα πραγματοποιηθεί στις 11 μ.μ. ώρα Ελλάδας.
Για την υποστήριξη των διαγωνιζόμενων, θα πραγματοποιήσουμε το Live Meeting την Τετάρτη στις 10 μ.μ. (ακριβώς! διότι το quiz δεν θα αλλάξει ώρα). Ο Ηρακλής Ψαρουδάκης (a.k.a. kingherc) και ο Αλέξανδρος Σιγαράς (a.k.a. mazohack) θα σας παρουσιάσουν ένα ενημερωτικό event το οποίο θα σας βοηθήσει να διαγωνιστείτε στο τελευταίο quiz που θα γίνει στις 11 μ.μ. (online από το site του www.imaginecup.com). Για να διαγωνιστείτε θα πρέπει να έχετε εγγραφεί στο site του Imagine Cup και να έχετε δηλώσει συμμετοχή στο IT challenge, οπότε απαραίτητο είναι να το κάνατε πριν το quiz. Το live meeting θα κρατηθεί ανοιχτό και κατά τη διάρκεια του τελευταίου quiz για τυχόν απορίες και support!
Στo Live Meeting θα παρουσιαστούν επιφανειακά, διάφορες τεχνολογίες (κυρίως της Microsoft) που υποστηρίζουν το IT infrastructure ενός οποιουδήποτε οργανισμού. Θα επικεντρωθούμε σε τεχνολογίες που ερωτώνται κατά τη διάρκεια του quiz. Τέτοιες είναι για παράδειγμα: Windows, Windows Server, Exchange Server, Sharepoint κ.α. όπου και θα δώσουμε και μερικά tips για το quiz.
Προσοχή: Θα είναι δυνατόν να συνδεθείτε στο meeting μόνο ένα τέταρτο της ώρας πριν, και κατά τη διάρκεια της παρουσίασης. Συμπληρώνετε όνομα, email και πανεπιστήμιο και ξεκινάει η παρουσίαση. Για οποιαδήποτε απορία, μπορείτε να την σημειώσετε πατώντας το κουμπί Q&A του Live Meeting.
Για να συνδεθείτε στο event μπορείτε να πατήσετε στο ακόλουθο link:
https://www112.livemeeting.com/cc/_XML/microsoft/join?id=9P4TSN&role=attend
Δείτε στο http://www.studentguru.gr/forums/t/4674.aspx για οδηγίες χρήσης του προγράμματος και της υπηρεσίας Live Meeting Για να γλυτώσετε χρόνο, πριν την παρουσίαση, ελέγξτε ότι έχετε το απαραίτητο λογισμικό για να δείτε το Live meeting, εδώ: http://go.microsoft.com/fwlink/?LinkId=90703.
-----------------------------------------------------------------------------------------------------------------
7ο Live Meeting SG Event - [Web Development Series] My first ASP.NET Steps
To 7o Live Meeting είναι γεγονός! Λίγο πριν τις διακοπές των Χριστουγέννων σε αυτό το event θα δούμε πως μπορούμε να ξεκινήσουμε την κατασκευή δυναμικών σελίδων με τη χρήση της τεχνολογίας ASP.NET. Το συγκεκριμένο online event είναι το 1ο από μια σειρά που αφορούν την ASP.NET και αν σας ενδιαφέρει το Web Development σίγουρα δεν πρέπει να το χάσετε!
Το event θα έχει διάρκεια μισή ώρα και στη συνέχεια θα ακολουθήσει χρόνος για απορίες.
Χρόνος διεξαγωγής : Πέμπτη 17/12/2009, Ώρα : 22:00
Προσοχή:
Θα είναι δυνατόν να συνδεθείτε στο meeting μόνο ένα τέταρτο της ώρας πριν, και κατά τη διάρκεια της παρουσίασης. Συμπληρώνετε όνομα, email και πανεπιστήμιο και ξεκινάει η παρουσίαση. Για οποιαδήποτε απορία, μπορείτε να την σημειώσετε πατώντας το κουμπί Q&A του Live Meeting.
Για να συνδεθείτε στο event μπορείτε να πατήσετε στο ακόλουθο link:
https://www112.livemeeting.com/cc/_XML/microsoft/join?id=MNQ6MJ&role=attend
Δείτε στο http://www.studentguru.gr/forums/t/4674.aspx για οδηγίες χρήσης του προγράμματος και της υπηρεσίας Live Meeting Για να γλυτώσετε χρόνο, πριν την παρουσίαση, ελέγξτε ότι έχετε το απαραίτητο λογισμικό για να δείτε το Live meeting, εδώ: http://go.microsoft.com/fwlink/?LinkId=90703.
Σε λίγες μέρες πραγματοποιείται στο Μέγαρο Μουσικής ένα από τα μεγαλύτερα events του 2009.
Συγκεκριμένα, αυτή την Πέμπτη 10 Δεκεμβρίου από τις 9 π.μ. μέχρι και τις 5 μ.μ. πραγματοποιείται η πρώτη επίσημη παρουσίαση των Windows 7, Windows Phone, Windows Server 2008 R2 και Microsoft Exchange Server 2010.
Περισσότερες από 25 παρουσιάσεις, ενημέρωση σχετικά με τις τελευταίες τεχνολογίες καθώς και ότι νεότερο περιλαμβάνεται στην τελευταία σειρά των προιόντων της Micosoft, ευκαιρίες για networking και πολλές εκπλήξεις.
Για να δηλώσετε συμμετοχή κάντε click εδώ και επιλέξτε ένα από τα διαθέσιμα tracks. Προτείνουμε το Developer Track, μιας και εκεί θα έχετε τη δυνατότητα να ενημερωθείτε για το πώς μπορείτε να αναπτύξετε εφαρμογές που να χρησιμοποιούν τα νέα features των Windows 7, όπως MultiTouch, Sensor and Location platform, Jumplists, Libraries κ.α. Θα μάθετε επίσης τον τρόπο με τον οποίο μπορείτε να εκμεταλλευτείτε τις νέες δυνατότητες των Windows Server 2008 R2 και IIS 7.5 Web Server για προγραμματιστές αλλά και πως να αναπτύξετε εφαρμογές για κινητά με τα ολοκαίνουρια Windows Mobile 6.5!
Για να εγγραφείτε στην κεντρική παρουσίαση και στο Developer Track:
1. Μεταβείτε στη σελίδα της εκδήλωσης
2. Κάντε κλικ στο «Ηλεκτρονική Εγγραφή» και
3. όταν εμφανιστεί η σελίδα δήλωσης track, κάντε scroll μέχρι το τέλος της σελίδας (εκεί όπου βρίσκεται το Developer Track), click στο checkbox και «Επιβεβαίωση». Μόλις εξασφαλίσατε τη θέση σας!
Όλη η ομάδα του StudentGuru θα βρίσκεται εκεί και θα χαρούμε να σας συναντήσουμε από κοντά!
Yesterday, I had the pleasure to present about the forthcoming .NET 4 and Visual Studio 2010, at the ISV Days 2009 Event (http://www.microsoft.com/hellas/events/isvdays09.mspx). Presentation (fortunately!) went great, and I had the chance to present great topics about
- Team Foundation Server
- ASP.NET WebForms 4 and ASP.NET Ajax
- Entity Framework 4
- Type Equivalence
- WPF 4
- WF 4 / WCF 4
- Parallel Programming and
- a bit of Silverlight 4!
Lots of subjects, few time, but I hope that the attendees had the opportunity to grasp some the great features that are coming with the next release of Visual Studio 2010 and .NET 4.
Some helpful links:
- VS 2010 on MSDN: http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx
- VS 2010 Training Kit: http://www.microsoft.com/downloads/details.aspx?FamilyID=752CB725-969B-4732-A383-ED5740F02E93&displaylang=en
- Channel 9 Videos: http://channel9.msdn.com/learn/courses/VS2010/
- Silverlight: http://www.silverlight.net
Last but not least, here are the links to the presentation and the source code that was presented.
Thanks!
Σήμερα, Δευτέρα 16/11 διεξάγεται το πρώτο κουίζ της πρώτης φάσης του διαγωνισμού IT Challenge – Imagine Cup! Πρόκειται ίσως για την πιο εύκολη και λιγότερο χρονοβόρα κατηγορία του διαγωνισμού, μιας και αρκεί να μπείτε στην ιστοσελίδα του IT Challenge και να δοκιμάσετε τις γνώσεις σας σε ένα πολύ απλό κουίζ πολλαπλών επιλογών.
Για να διαγωνιστείτε, μπαίνετε στο site www.imaginecup.com, επιλέγετε την κατηγορία IT Challenge, και κάνοντας κλικ στον υπερσύνδεσμο πάνω δεξιά, μπορείτε να επιλέξετε να απαντήσετε στις ερωτήσεις και να διαγωνιστείτε. Μπορείτε, επίσης, να πλοηγηθείτε εδώ http://imaginecup.com/Competition/mycompetitionportal.aspx?competitionId=41 ώστε να βρεθείτε στην σελίδα του IT Challenge κατευθείαν. Επίσης, αν δεν τα καταφέρετε με την πρώτη προσπάθεια, μπορείτε να ξαναπροσπαθήσετε να απαντήσετε στις ερωτήσεις μέσα στην υπόλοιπη μέρα.
Το κουίζ αποτελείται από 30 ερωτήσεις, τις οποίες πρέπει να απαντήσετε μέσα σε 60 λεπτά. Με 15 σωστές στις 30 έχετε προκριθεί στον επόμενο γύρο! Φυσικά, για οποιαδήποτε απορία, μπορείτε να χρησιμοποιήσετε το φόρουμ του Imagine Cup, το οποίο βρίσκεται εδώ: http://www.studentguru.gr/forums/373.aspx
Καλή επιτυχία!
I just finished my presentation on “Windows 7 for Developers” presenting all the new features of Windows 7 that developers can utilize in order to make their applications more “WOW”and exciting. I demoed stuff such as VHD support, MultiTouch, Sensor Platform, Internet Explorer 8, Windows API Code Pack, Windows Biometric Framework, Graphics improvements, Windows XP mode, TaskBar, Jumplists and much mode. Some interesting links
You can find the presentation here. Feel free to post any comments, questions etc.
Thanks everyone who attended, hope to see you again during a Live Meeting!
Today, I presented at the DevDays09: Silverlight3 event in Microsoft Greece, about building a small Twitter client using Silverlight. I was impressed that there were many developers down there that used Twitter! In case you want to check my (small) presentation, you can see it here, and for the source code of the twitter client I build during the demo, you can get the Visual Studio 2008 solution here.
Enjoy!
More Posts
Next page »