Microsoft research works on “touching” virtual reality objects

Microsoft Research has presented a new way to interact with virtual reality by touch. As haptic solutions for virtual reality, NormalTouch and TextureTouch 3D haptic shape controllers are able to explore the virtual space with just your finger. Currently, the controller only supports the index finger, but who knows what else could be developed with further innovations.

The 3D objects are tracked in virtual reality with the Optitrack system and presented through the Oculus Rift headset.  The NormalTouch renders the surface of virtual objects by using a flat platform that tilts, extrudes, and turns based on the shape of the digital objects. The TextureTouch uses a matrix of 4×4 pins that give the finger the impression of the shape by rising and falling based on the shape. This controller gives a finer detail into the texture, letting the sixteen pins bump up and down for coarser 3D objects.

Thanks to the OptiTrack system, the controllers are limited from penetrating through virtual objects and can even detail the softness of each digital surface. Touching a ‘soft’ object would impress more than pressing against the more ‘firm’ object in which the pins wouldn’t move.

 

During testing, users were able to have a more productive experience with virtual reality by involving the haptic controllers. Studied alongside the currently available vibrotactile device, both controllers had excelling areas such as a higher accuracy of touch with the TextureTouch.

Read the full research submitted for more details. Let us know in the comments if you’re looking forward to these sorts of advances in virtual reality.

Microsoft warns iOS isn't as secure as you think

Microsoft_Cybercrime_Center

Microsoft has warned customers that iOS is no more secure than Android, contradicting commonly held beliefs about the relative security of the two platforms. The company said that recent attacks targeting iOS prove it's as vulnerable as Android.

Brad Anderson, Microsoft's corporate vice president for enterprise and client mobility, set out his views in a company blog post last week. He used the Pegasus iOS spyware, revealed last month, as an example of severe vulnerabilities present in iOS. Pegasus is capable of monitoring everything a user does on their device, leaving them vulnerable to further attack.

The malware was analysed by Lookout Security, a Microsoft partner. In its report, Lookout described Pegasus as "the most sophisticated attack we've seen on any endpoint." Since it originates from a leading iOS security firm, Anderson said the statement reveals a lot about the state of security on Apple's platform.

Anderson is attempting to challenge the trust that consumers typically place in Apple. Android threats are far more numerous and gain more widespread attention than attacks on iOS. iOS is not immune to potentially devastating malware though, in contradiction of the views of some customers. Anderson said Pegasus should be a "pretty startling wake-up call" that everyone is "under constant persistent attack" on every platform.

Microsoft executives have reportedly indicated "unwavering implicit trust" in Apple's iOS "countless times," revealing how strong the association between Apple and security has become. The belief that Apple's platform is stronger than Android appears to derive from iOS' closed nature. Because it's a more controlled ecosystem, the attack surface is lower than for Android malware.

This view is dangerous, according to Anderson. Every mobile device is at constant risk of attack, regardless of the platform it runs. "I know for a fact that all the providers of mobile operating systems go to superhuman lengths to harden their platforms and do everything they can to deliver the most secure operating system possible," said Anderson.

However, iOS, Android and Windows all have vulnerabilities that expose them to potentially devastating attacks. Some platforms are targeted more frequently than others but this shouldn't influence people to make assumptions about a platform's security. Pegasus demonstrates that even a closed ecosystem can be infiltrated by some of the most complex mobile malware ever observed.

Coming from Microsoft, Anderson's argument represents a powerful message to businesses and consumers that iOS may not be all it seems. Pegasus has proven iOS presents a viable attack vector to cybercriminals. It has also demonstrated that malware has been commercialised to the point that it's an off-the-shelf product, available for purchase from the secretive NSO Group. According to Microsoft, the idea of a single platform being more secure than others is an urban myth. In real-world terms, any device can be hacked and every user is a target.

Microsoft to launch new Surface PC at October 26th event

Microsoft-26October-2016

Microsoft is holding a special Windows 10 and Surface event in New York City later this month. The software giant has started emailing out invites to an event on October 26th, and Microsoft is expected to make some Xbox-related announcements at the event, alongside new Surface hardware and some details on the company's next Windows 10 software update. Microsoft's event isn't expected to be as large, or involve as much hardware.

Surface-branded keyboards and a mouse have started leaking ahead of Microsoft's event, and the company is widely expected to be unveiling at least one new all-in-one desktop PC.

The main focus of the event will be the unveiling of Microsoft's vision for the future of Windows 10, and the company's desktop PC hardware to support it. Microsoft is expected to detail new features in Windows 10 that it plans to ship in two major software updates next year, and discuss how some of those features feed into its Xbox gaming strategy across both platforms. Microsoft's event will be live in New York City on October 26th, so stay tuned for our live blog.

$.ajax No 'Access-Control-Allow-Origin' header is present on the requested resource with WebAPI

I want to get data from a WebAPI with jquery

        $("#btnSend").click(function () {
            $("#sending").show();
            $.ajax({
                type: 'GET',
                url: '/Report/SendEmail?quote=18',
                crossDomain: true,
                success: function (msg) {
                    if (msg == 'True') {
                        alert('Email sent to the client');
                    }
                    $("#sending").hide();
                },
                error: function (request, status, error) {
                    $("#sending").hide();
                }
            });
        });

and it produce

‘No Access-Control-Allow-Origin' header is present on the requested resource error.

The solution is to add in the result of the WebAPI the following code:

            Response.Headers.Add("Access-Control-Allow-Methods", "GET, POST");
            Response.Headers.Add("Access-Control-Allow-Headers", "accept, authority");
            Response.Headers.Add("Access-Control-Allow-Credentials", "true");

Happy coding!

Multi Step Form with Progress Bar using jQuery and CSS3

Wizard

Got long forms on your website ? Break them up into smaller logical sections and convert it into a multi-step form with a cool progress bar. Could work for lengthy processes like registration, checkout, profile fillups, 2-factor authentication logins, etc.

The form has 3 fieldsets containing the 3 different sections of the form. The fieldsets are absolutely positioned and only the first one is visible by default. Moving to the next section fades out the current fieldset using jQuery .animate() and brings in the next fieldset from the right. The reverse happens if the user moves to the previous section.

HTML

<!-- multistep form -->
<form id="msform">
	<!-- progressbar -->
	<ul id="progressbar">
		<li class="active">Account Setup</li>
		<li>Social Profiles</li>
		<li>Personal Details</li>
	</ul>
	<!-- fieldsets -->
	<fieldset>
		<h2 class="fs-title">Create your account</h2>
		<h3 class="fs-subtitle">This is step 1</h3>
		<input type="text" name="email" placeholder="Email" />
		<input type="password" name="pass" placeholder="Password" />
		<input type="password" name="cpass" placeholder="Confirm Password" />
		<input type="button" name="next" class="next action-button" value="Next" />
	</fieldset>
	<fieldset>
		<h2 class="fs-title">Social Profiles</h2>
		<h3 class="fs-subtitle">Your presence on the social network</h3>
		<input type="text" name="twitter" placeholder="Twitter" />
		<input type="text" name="facebook" placeholder="Facebook" />
		<input type="text" name="gplus" placeholder="Google Plus" />
		<input type="button" name="previous" class="previous action-button" value="Previous" />
		<input type="button" name="next" class="next action-button" value="Next" />
	</fieldset>
	<fieldset>
		<h2 class="fs-title">Personal Details</h2>
		<h3 class="fs-subtitle">We will never sell it</h3>
		<input type="text" name="fname" placeholder="First Name" />
		<input type="text" name="lname" placeholder="Last Name" />
		<input type="text" name="phone" placeholder="Phone" />
		<textarea name="address" placeholder="Address"></textarea>
		<input type="button" name="previous" class="previous action-button" value="Previous" />
		<input type="submit" name="submit" class="submit action-button" value="Submit" />
	</fieldset>
</form>

CSS

/*custom font*/
@import url(http://fonts.googleapis.com/css?family=Montserrat);

/*basic reset*/
* {margin: 0; padding: 0;}

html {
	height: 100%;
	/*Image only BG fallback*/
	background: url('http://thecodeplayer.com/uploads/media/gs.png');
	/*background = gradient + image pattern combo*/
	background: 
		linear-gradient(rgba(196, 102, 0, 0.2), rgba(155, 89, 182, 0.2)), 
		url('http://thecodeplayer.com/uploads/media/gs.png');
}

body {
	font-family: montserrat, arial, verdana;
}
/*form styles*/
#msform {
	width: 400px;
	margin: 50px auto;
	text-align: center;
	position: relative;
}
#msform fieldset {
	background: white;
	border: 0 none;
	border-radius: 3px;
	box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.4);
	padding: 20px 30px;
	
	box-sizing: border-box;
	width: 80%;
	margin: 0 10%;
	
	/*stacking fieldsets above each other*/
	position: absolute;
}
/*Hide all except first fieldset*/
#msform fieldset:not(:first-of-type) {
	display: none;
}
/*inputs*/
#msform input, #msform textarea {
	padding: 15px;
	border: 1px solid #ccc;
	border-radius: 3px;
	margin-bottom: 10px;
	width: 100%;
	box-sizing: border-box;
	font-family: montserrat;
	color: #2C3E50;
	font-size: 13px;
}
/*buttons*/
#msform .action-button {
	width: 100px;
	background: #27AE60;
	font-weight: bold;
	color: white;
	border: 0 none;
	border-radius: 1px;
	cursor: pointer;
	padding: 10px 5px;
	margin: 10px 5px;
}
#msform .action-button:hover, #msform .action-button:focus {
	box-shadow: 0 0 0 2px white, 0 0 0 3px #27AE60;
}
/*headings*/
.fs-title {
	font-size: 15px;
	text-transform: uppercase;
	color: #2C3E50;
	margin-bottom: 10px;
}
.fs-subtitle {
	font-weight: normal;
	font-size: 13px;
	color: #666;
	margin-bottom: 20px;
}
/*progressbar*/
#progressbar {
	margin-bottom: 30px;
	overflow: hidden;
	/*CSS counters to number the steps*/
	counter-reset: step;
}
#progressbar li {
	list-style-type: none;
	color: white;
	text-transform: uppercase;
	font-size: 9px;
	width: 33.33%;
	float: left;
	position: relative;
}
#progressbar li:before {
	content: counter(step);
	counter-increment: step;
	width: 20px;
	line-height: 20px;
	display: block;
	font-size: 10px;
	color: #333;
	background: white;
	border-radius: 3px;
	margin: 0 auto 5px auto;
}
/*progressbar connectors*/
#progressbar li:after {
	content: '';
	width: 100%;
	height: 2px;
	background: white;
	position: absolute;
	left: -50%;
	top: 9px;
	z-index: -1; /*put it behind the numbers*/
}
#progressbar li:first-child:after {
	/*connector not needed before the first step*/
	content: none; 
}
/*marking active/completed steps green*/
/*The number of the step and the connector before it = green*/
#progressbar li.active:before,  #progressbar li.active:after{
	background: #27AE60;
	color: white;
}

JavaScript

//jQuery time
var current_fs, next_fs, previous_fs; //fieldsets
var left, opacity, scale; //fieldset properties which we will animate
var animating; //flag to prevent quick multi-click glitches

$(".next").click(function(){
	if(animating) return false;
	animating = true;
	
	current_fs = $(this).parent();
	next_fs = $(this).parent().next();
	
	//activate next step on progressbar using the index of next_fs
	$("#progressbar li").eq($("fieldset").index(next_fs)).addClass("active");
	
	//show the next fieldset
	next_fs.show(); 
	//hide the current fieldset with style
	current_fs.animate({opacity: 0}, {
		step: function(now, mx) {
			//as the opacity of current_fs reduces to 0 - stored in "now"
			//1. scale current_fs down to 80%
			scale = 1 - (1 - now) * 0.2;
			//2. bring next_fs from the right(50%)
			left = (now * 50)+"%";
			//3. increase opacity of next_fs to 1 as it moves in
			opacity = 1 - now;
			current_fs.css({'transform': 'scale('+scale+')'});
			next_fs.css({'left': left, 'opacity': opacity});
		}, 
		duration: 800, 
		complete: function(){
			current_fs.hide();
			animating = false;
		}, 
		//this comes from the custom easing plugin
		easing: 'easeInOutBack'
	});
});

$(".previous").click(function(){
	if(animating) return false;
	animating = true;
	
	current_fs = $(this).parent();
	previous_fs = $(this).parent().prev();
	
	//de-activate current step on progressbar
	$("#progressbar li").eq($("fieldset").index(current_fs)).removeClass("active");
	
	//show the previous fieldset
	previous_fs.show(); 
	//hide the current fieldset with style
	current_fs.animate({opacity: 0}, {
		step: function(now, mx) {
			//as the opacity of current_fs reduces to 0 - stored in "now"
			//1. scale previous_fs from 80% to 100%
			scale = 0.8 + (1 - now) * 0.2;
			//2. take current_fs to the right(50%) - from 0%
			left = ((1-now) * 50)+"%";
			//3. increase opacity of previous_fs to 1 as it moves in
			opacity = 1 - now;
			current_fs.css({'left': left});
			previous_fs.css({'transform': 'scale('+scale+')', 'opacity': opacity});
		}, 
		duration: 800, 
		complete: function(){
			current_fs.hide();
			animating = false;
		}, 
		//this comes from the custom easing plugin
		easing: 'easeInOutBack'
	});
});

$(".submit").click(function(){
	return false;
})

 

Happy coding!

Tim Cook defended Apple's approach to security: 'Encryption is inherently great'

Apple CEO Tim Cook has robustly defended his company's strident approach to security in a new on-stage Q&A, declaring: "Encryption is inherently great."

The Cupertino tech exec spoke in Salt Lake City, Utah, as part of the US state's "Utah Tech Tour" event

How Do I Add a Splitter to my WPF Window?

Splitters are a useful UI feature where the width or height of a control on the form can be modified to show more or less information.

An Example of this is the splitter between the folder tree-view in and the file and subfolder detail view in Windows Explorer, allowing the size of the folder tree-view on the left-hand side of the form to be sized up to 50% of the form width. Windows Forms 1.1 included a Splitter control, and Windows Forms 2.0 included a SplitContainer.

WPF does not have equivalent versions of either of these controls; however it is possible to add splitters to your WPF application using the WPF Grid, and a GridSplitter. The example code below allows the two columns in the grid to be re-sized. This is done by adding a GridSplitter as a child item of the Grid.

<Window x:Class="PSC.Splitter.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="PSC.Splitter" Height="300" Width="300">
    <Grid>
      <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <StackPanel Background="#feca00" Grid.Column="0">
        <TextBlock FontSize="35" Foreground="#58290A" 
                   TextWrapping="Wrap">Left Hand Side</TextBlock>
      </StackPanel>
      <GridSplitter/>
      <Border CornerRadius="10" BorderBrush="#58290A" 
              BorderThickness="5" Grid.Column="1">
        <TextBlock FontSize="25" Margin="20" Foreground="#FECA00" 
                   TextWrapping="Wrap">Right Hand Side</TextBlock>
      </Border>
    </Grid>
</Window>

Happy coding!

Microsoft announces formation of AI and Research Group with over 5000 computer scientists

cortana-microsoft_story

For the last year or so, Microsoft has backed artificial intelligence as "the most important technology on the planet" and has released various products that make use of AI. The company's flagship AI product, Cortana, is available to all Windows 10 users - although its capabilities vary depending on which part of the world you're in. Now, the company will be bringing its artificial intelligence research under one umbrella with the formation of the Microsoft AI and Research Group that will include 5000 computer scientists.

The AI and Research Group will be headed by Microsoft veteran of 20 years, Harry Shum, who has worked with Microsoft Research and Bing prior to this appointment. The group will bring together various related teams such as Information Platform, Cortana and Bing, and Ambient Computing and Robotics teams.

According to Microsoft's post about the announcement, the company will be taking a four-pronged approach to democratize AI:

  • Agents: Harness AI to fundamentally change human and computer interaction through agents such as Microsoft’s digital personal assistant Cortana
  • Applications: Infuse every application, from the photo app on people’s phones to Skype and Office 365, with intelligence
  • Services: Make these same intelligent capabilities that are infused in Microsoft’s apps —cognitive capabilities such as vision and speech, and machine analytics — available to every application developer in the world
  • Infrastructure: Build the world’s most powerful AI supercomputer with Azure and make it available to anyone, to enable people and organizations to harness its power

Currently, there are no announcements regarding any upcoming products, but with the newly formed group we can surely expect to hear more about AI and related products from the software giant in the not-too-distant future.

Source: Microsoft

Alan Turing's computer-generated music gets restored after 65 years

alan_turing

Alan Turing is considered to be one of the fathers of computer science. He played a crucial role in World War II counter intelligence and worked for the Government Code and Cypher School at Bletchley Park.

He was also responsible for breaking a large number of Nazi ciphers, including the German Enigma code. After the war, Turing continued his work as a pioneer computer engineer, and developed what’s considered to be one of the first designs for a stored-program computer.

But it seems code breaking wasn’t Turing’s only talent.

Now the earliest known recording of computer-generated music, created more than 65 years ago, has been restored by the University of Canterbury. But the interesting thing is that it was created on computer programming techniques devised by Turing himself. 

Here's the story. In 1951, a BBC outside-broadcast unit in Manchester used a portable acetate disc cutter to capture three melodies played by a primeval computer. This gigantic computer filled much of the ground floor of pioneering British computer scientist Alan Turing's Computing Machine Laboratory.

Now, decades later, director of the Turing Archive for the History of Computing, Professor Jack Copeland, and his fellow researcher UC alumni and composer Jason Long, have restored the music. However, it has not been so easy. The researchers had to do some electronic sleuthing to recreate the historic sound accurately.

“Today all that remains of the recording session is a 12-inch single-sided acetate disc, cut by the BBC's technician while the computer played. The computer itself was scrapped long ago, so the archived recording is our only window on that historic soundscape,” said the researchers.

“What a disappointment it was, therefore, to discover that the frequencies in the recording were not accurate: the recording gave at best only a rough impression of how the computer sounded.”

They found that there was a deviation in the speed of the recording, probably as a result of the turntable in BBC's portable disc cutter rotating too fast. But, with some electronic detective work, it proved possible to restore the recording – with the result that the true sound of this ancestral computer can be heard once again, for the first time in more than half a century.

The computer music researchers were then able to calculate exactly how much the recording had to be speeded up in order to reproduce the original sound of the computer.

“As well as increasing the speed – and so altering the frequencies – we also filtered out extraneous noise from the recording; and using pitch-correction software we removed the effects of a troublesome wobble in the speed of the recording,” added the researchers.

“It was a beautiful moment when we first heard the true sound of Turing's computer.”

The complete 1951 recording, including God Save the King, nursery rhyme Baa Baa Black Sheep and Glenn Miller hit In The Mood, can be heard here over at the university’s website.

Europe’s Court of Justice rules that hyperlinking can infringe on copyright

EuropeanCommissionEuropa

On Thursday, the Dutch publisher of Playboy won a major legal victory concerning photographs that had been uploaded to the internet without its permission on a file sharing site. The ruling handed down by the European Union Court of Justice could have enormous consequences for users across the internet.

The case stemmed from a complaint against a Dutch website called GeenStijl, which had posted links to leaked photos from Playboy in October 2011. The website had received a tip that the pictures had been uploaded to FileFactory. It posted a cutout of one of the images and linked to the rest. Sanoma Media, Playboy’s Dutch publisher, requested that content be removed, which GeenStijl refused to do. Sanoma then sued the GeenStijl and its parent company, GS Media, arguing that the hyperlink and part of one of the images infringed on its copyright. The case found itself before the EU court, which ruled that posting hyperlinks amounted to copyright infringement, because the website profited from the traffic that it generated.

The court noted in its ruling that the website’s editors knew that the works had yet to be published in the print magazine and that its distribution through FileFactory was unauthorized. "Whoever post[ed] those links knew or ought to have been aware of those facts and the fact that that rightholder did not consent to the publication of the works in question on that latter website."

They key point in this case comes down to the phrase "Communication to the public of their works" in Article 3(1) of Directive 2001/29, On the harmonisation of certain aspects of copyright and related rights in the information society:

Member States shall provide authors with the exclusive right to authorise or prohibit any communication to the public of their works, by wire or wireless means, including the making available to the public of their works in such a way that members of the public may access them from a place and at a time individually chosen by them.

The court noted that the directive does not define "communication to the public", but that EU laws do work to protect the rights of copyright owners. It also surmised that those seeking to communicate to the public must make a judgment call as to the ethical nature of what they’re doing: balancing legitimate news against copyright infringement.

Advertsing

125X125_06

Planet Xamarin

Planet Xamarin

Calendar

<<  November 2017  >>
MonTueWedThuFriSatSun
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar

Month List