Shared posts

30 Nov 14:29

Canadian Government Quietly Compensates Daughter of MKULTRA Victim

by VC

This post Canadian Government Quietly Compensates Daughter of MKULTRA Victim appeared first on The Vigilant Citizen.

The victim was kept in a chemically induced sleep for weeks and subjected to rounds of electroshocks, experimental drugs and tape-recorded messages played non-stop. CBC News recently reported that the Canadian government reached an out-of-court settlement of $100,000 with Allison Steel, the daughter of Jean Steel, a woman who was subjected to horrific brainwashing experiments funded […]

This post Canadian Government Quietly Compensates Daughter of MKULTRA Victim appeared first on The Vigilant Citizen.

16 Nov 09:36

Three lies from the government about why it needs to backdoor our crypto

16 Nov 09:36

Visual Studio Live Share brings collaborative coding to developers

by Dan Thorp-Lancaster

Microsoft is working on a way for developers to collaborate on coding in real-time in Visual Studio.

Speaking at its Connect(); 2017 developer event today, Microsoft took the wraps off of Visual Studio Live Share, a new collaborative coding feature for developers.

16 Nov 09:35

Teenage schoolgirl 'electrocuted after rolling on to iPhone cable in her sleep'

16 Nov 09:35

Die dunkle Seite der Tech-Revolution: Kinderarbeit in Kobalt-Minen für Akkus

Amnesty International hat einmal mehr auf die Missstände bei der Kobalt-Förderung im Kongo hingewiesen. Wer Smartphones oder E-Autos kaufe, könnte unwissentlich Kinderarbeit fördern.

In Akkus für Smartphones und E-Autos könnte Kinderarbeit stecken

Anfang 2016 hatte die Menschenrechtsorganisation Amnesty International auf die Missstände beim Abbau des für die Herstellung von Akkus wichtigen Rohstoffs Kobalt hingewiesen. In den Kobalt-Minen der demokratischen Republik Kongo, aus denen laut Amnesty mehr als die Hälfte des Bedarfs gedeckt wird, müssen zum Teil schon siebenjährige Kinder schuften. Es bestehe „die Gefahr, dass der Käufer eines Smartphones, Laptops oder E-Autos unwissentlich Kinderarbeit fördert“, warnt Amnesty in einer Mitteilung.

Amnesty kritisiert: „Großkonzerne tun zu wenig gegen Kinderarbeit“. (Foto: Amnesty International)

Amnesty nahm für seinen Bericht „Time to Recharge“ 29 internationale Konzerne, darunter Tech-Firmen wie Microsoft, Samsung und Apple, aber auch deutsche Autohersteller wie BMW, Daimler und Volkswagen (VW), unter die Lupe. Keines der Unternehmen erfülle seine „menschenrechtlichen Sorgfaltspflichten ausreichend“, kritisierte die Organisation. Zwar hätten Apple, Samsung oder BMW die Kontrollen der Kobalt-Lieferketten verbessert, von einer lückenlosen Prüfung seien sie aber noch weit entfernt.

Anzeige

Kinderarbeit im Kongo: Deutsche Autobauer wollen nachbessern

Die Autobranche, darunter auch die drei deutschen Hersteller, weist laut dem Amnesty-Bericht besondere Defizite auf. BMW zeige „deutliche Mängel“, VW und Daimler sogar „erhebliche Mängel“ auf, wie Tagesschau.de schreibt. Demnach hat Amnesty International die künftige Bundesregierung aufgefordert, dass sie eine verbindliche Einhaltung von Sorgfaltspflichten vorschreiben müsse. Diese müssten für alle kobaltverarbeitenden Unternehmen in der Lieferkette gelten.

BMW erklärte in Reaktion auf die Vorwürfe, dass der Konzern schon strenge Standards anlege und davon ausgehe, dass in seinen Produkten keine Kinderarbeit stecke. Allerdings wolle man künftig das Restrisiko für Umwelt und Menschenrechte ausschließen. Daimler ließ wissen, dass man die von Amnesty genannten Themen sehr ernst nehme und laufende Prozesse und Maßnahmen prüfen wolle.

Mehr zum Thema:

16 Nov 09:35

Alkoholkonsum: Schottland führt Mindestpreis für Alkohol ein

by ZEIT ONLINE: Ausland -
Schluss mit billigem Whisky: Die schottische Regierung darf nach einem Urteil einen Mindestpreis für Alkohol festlegen. Dagegen hatten sich die Hersteller gewehrt.
16 Nov 09:34

UEFI-BIOS bekommt ein Sicherheits-Expertenteam

UEFI-BIOS bekommt ein Sicherheits-Expertenteam

Das UEFI Security Response Team (USRT) unter Führung von Phoenix soll zentraler Ansprechpartner für Sicherheitslücken des BIOS-Nachfolgers sein.

16 Nov 09:33

Huawei: Mobilfunkbetreiber fürchten steigende Kosten per Bit

5G wird von den Netzbetreibern nicht ohne Bedenken aufgebaut. Doch ist das Netz einmal errichtet, sollen laut Huawei die Kosten pro übertragenes Bit sinken. Diese Ansicht teilen auch andere. (Huawei, Vodafone)
16 Nov 09:33

Schlafmangel: Die Arbeit raubt den Schlaf

by ZEIT ONLINE: Gesundheit -
Schichtdienste, flexible Arbeitszeiten, Stress, Lärm, Krankheiten: Eine Umfrage zeigt, was Erwachsene nachts wach hält. Doch jeder Einzelne kann ein wenig gegensteuern.
16 Nov 09:31

Richter wendet bei dreisten Seriendieben kuriose Methode an

by Andreas Thieme
80 Einbrüche sollen die zwei Beschuldigten verübt haben, eine halbe Stunde lang ist der Staatsanwalt damit beschäftigt die Anklage zu verlesen. Was macht der Richter? Der reicht den beiden Zettel und Stift.
16 Nov 09:29

iPhone X: Apples großzügige Gesichtserkennung

by ZEIT ONLINE: Mobil - Patrick Beuth
Der erste Hack von Face ID gefährdet nicht gleich alle iPhone-X-Besitzer. Aber mittlerweile ist klar, dass er Apple mittelfristig in Zugzwang bringt.
16 Nov 09:28

New EU law prescribes website blocking in the name of consumer protection

16 Nov 09:28

Azure Advisor: New dashboard, downloadable reports, and configuration

Azure Advisor brings an all-new dashboard to help you more easily review the overall status of your recommendations across multiple subscriptions, downloadable reports, and customization options.
16 Nov 09:28

Get notified when new Connectors are deployed in your Flow Environment

A recent ask from customers is to be notified when new connectors are provisioned within a Microsoft Flow environment. These requests may be related to updating Data Loss Prevention (DLP) policies or provide opportunities to take advantage of new connectors to drive more value for their business. In this blog post we will walk you through how you can take advantage of new capabilities using the Flow Management connector to gain operational insights into your Flow environments.
16 Nov 09:28

Announcing Windows Server Insider Preview Build 17035

by Dona Sarkar

Hello Windows Insiders!

Today we are releasing Windows Server Insider Preview Build 17035 to Windows Server Insiders. This build is the first preview build of the next Semi-Annual Channel release of Windows Server. For more information on the Semi-Annual channel, please see the Windows Server Semi-Annual Channel overview

New content available

Server Insiders now have your choice of ISO format or VHDX format. The images are pre-keyed –  no need to enter a key during setup.

Also new to Insiders, an early update to the Technical Preview of Project Honolulu. Project Honolulu is a flexible, lightweight browser-based customer-deployed platform and solution for Windows Server management scenarios for troubleshooting, configuration and maintenance. Project Honolulu Technical Preview 1711 Build 01003 is now available to Insiders before the public and is our first update since our initial Technical Preview 1709 released for Ignite.

Symbols are available on the public symbol server – see Update on Microsoft’s Symbol Server blog post and Using the Microsoft Symbol Server. As before, matching Windows Server container images will be available via Docker Hub. For more information about Windows Server containers and Insider builds, click here.

This Server Insider pre-release build will expire on July 2nd, 2018. For the best experience, the Windows Server team recommends a clean install.

What’s New in Build 17035 for Windows Server

  • Storage Spaces Direct (S2D) is enabled. Storage Spaces Direct is the foundation of our hyper-converged solution and we’re continuing to evolve it. In this preview build we not only brought it back, but we’re adding some new and important updates to it – such as support for Data Deduplication, a commonly requested feature for Storage Spaces Direct and ReFS. Starting with this build, Data Deduplication will reduce the data footprint by up to 50%.
  • Developers can now use localhost or loopback (127.0.0.1) to access services running in containers on the host

What’s New in Project Honolulu Technical Preview 1711 Build 01003

NOTE: Please manually Refresh your browser (F5) on first launch if upgrading from version 1709.

Remote Desktop

With the remote desktop tool in the Server Manager solution, you can connect to your machine to complete scenarios that are not yet supported natively in Honolulu. If you want to configure a feature that has no GUI tool, connect with Remote Desktop and open PowerShell!

Windows 10 Client Management

You can now add Windows 10 client machines as connections in Honolulu, and manage them with a subset of tools in the “Computer Management” Solution

Switch Embedded Teaming (SET)

Short of SCVMM, there was previously no GUI experience to configure Switch Embedded Teaming (SET), a new feature released in Windows Server 2016. You will find this feature in the Virtual Switches tool.

Data grid performance improvements

We have updated the grid in the Certificates and Events tools to a more performant control which is able to handle large datasets without a loss in performance. In the next release, it will be updated across all tools. In the Events tool, the data is streamed in as it loads, which can lead to a shorter loading time than the in-box tool when working with channels that contain many events.

Removed: LAPS in Service mode

We have removed the ability to use LAPS when Project Honolulu is deployed as a Server service.  You may still use LAPS when you install Honolulu on Windows 10.

How to Download 

To obtain the Insider software downloads, registered Insiders may navigate directly to the Windows Server Insider Preview download page.  If you have not yet registered as an Insider, see GETTING STARTED WITH SERVER on the Windows Insiders for Business portal.

It’s all about your feedback! 

The most important part of a frequent release cycle is to hear what’s working and what needs to be improved, so your feedback is extremely valued. Use your registered Windows 10 Insider device and use the Feedback Hub application. In the app, choose the Server category and then the appropriate subcategory for your feedback. Please indicate what build number you are providing feedback on.

Known issues with Windows Server build 17035

  • [NEW] The base filtering engine (BFE) service may fail to start, which prevents the Windows Defender firewall (MpsSvc service) from starting.
  • A system crash may occur because of a kernel security check failure (bug check 0x139) from a corrupt list entry in a deferred free pool.
  • An application may crash because of a heap entry corruption error (0xC0000374) in the health attestation configuration service provider (CSP) library (Hascsp.dll).
  • Testing of the Windows core may fail because of a timeout while attempting to load the test libraries.

Known Issues with Project Honolulu Technical Preview 1711 Build 01003

This list captures issues in the new features only. You can find the complete list of known issues here.

If you encounter bugs (in the new features only) that are not captured here, please post on the Project Honolulu space on Windows Server Tech Community.

Remote Desktop

  • The Remote Desktop tool does not currently support any text, image, or file copy/paste between the local desktop and the remote session.
  • To do any copy/paste within the remote session, you can copy as normal (right click + copy or Ctrl+C), but paste requires right click + paste (Ctrl+V does NOT work)
  • Opening the web browser’s debugger while a Remote Desktop session is active may cause your computer to crash. Don’t do it.
  • You cannot send the following key commands to the remote session:
    • Ctrl+Alt+End / Ctrl+Alt+Del
    • Alt+Tab
    • Function keys
    • Windows Key
    • PrtScn

Windows 10 Client Management

  • If you try to add a Windows PC connection, but the add connection dialog tries to add it as a server, refresh your browser. If the problem persists, clear your browser cache.
  • When you try to manage the localhost, you will be prompted to elevate the gateway process. If you click no in the User Account Control popup that follows, Honolulu won’t be able to display it again. In this case, exit the gateway process by right-clicking the Project Honolulu icon in the system tray and choosing exit, then relaunch Project Honolulu from the Start Menu.
  • Windows 10 does not have WinRM/PowerShell remoting on by default.

To enable management of the Windows 10 Client, you must issue the command Enable-PSRemoting from an elevated PowerShell prompt.

You may need to update your firewall to allow connections from outside the local subnet:

Set-NetFirewallRule -Name WINRM-HTTP-In-TCP –RemoteAddress Any

For more restrictive networks scenarios, please refer to this documentation.

Switch Embedded Teaming (SET)

  • When adding NICs to a team, they must be on the same subnet.

As with all networking configuration options in Project Honolulu, configuring this feature will cause a temporary loss in connectivity as the server’s networking stack restarts. This will generate errors that can safely be ignored.

Terms of Use: All pre-release software made available to you via the Windows Server Insider program are governed by the Insider Terms of Use, which takes precedence over any license agreement that may be in the product.

No downtime for Hustle-As-A-Service,
Dona <3

The post Announcing Windows Server Insider Preview Build 17035 appeared first on Windows Experience Blog.

16 Nov 09:27

FRITZ!Box-Updates, WLAN im Flugzeug, Abmahnung für Mobilfunker

Der teltarif.de-Newsletter liefert jeden Donnerstag die wichtigsten Meldungen der vergangenen Woche aus den Bereichen Mobilfunk, Internet, Festnetz, Hardware und Broadcast.
16 Nov 09:27

New Orleans man locked up nearly 8 years awaiting trial, then case gets tossed

16 Nov 09:27

The Power of Three and the Wooden Computer

by Phil Factor

Perhaps the prettiest number system of all is the balanced ternary notation, which consists of radix-3 representation using –1, 0, and +1 as “trits” (ternary digits) instead of 0, 1, and 2.
Donald Knuth Art of Computer Programming, Volume 2: Seminumerical Algorithms, 3rd Edition

This article is about an exploration of an old, little known, and very curious part of the history of computing and my attempts to understand it better, using SQL. It concerns an ordinary working man, a provincial town clerk doing repetitive calculations, who in 1840 not only discovered a clever way of representing numbers for mechanical calculation, but went on to devise a working calculating machine built out of wood. In some ways, his ‘balanced ternary’ system is superior to our own, as Donald Knuth once observed. It may seem oddly irrelevant to you, and it certainly looked that way to me for a while, yet it ended up by giving me plenty of insights into contemporary IT problems, and it turned into a fascinating puzzle.

The quest for Thomas Fowler

In the Bodleian library, there is the last copy of what is, at first glance, a very strange and puzzling publication, printed in 1838. It is a book of numbers with their binary and ternary equivalent, published at a time when there was no obvious use for binary or ternary numbers at all, no digital computers, nothing. Binary or ternary maths wasn’t part of Victorian culture. Even Babbage was, at that time, using decimal arithmetic for the difference engine. On the face of it, it wouldn’t be that much stranger if we discovered a two-hundred-year-old oil painting of a lady talking into a smartphone.

Why did Thomas Fowler publish it? Fortunately, the book has been scanned by Google for you to inspect. He explains why.

THE following TABLES are Published chiefly for the purpose of facilitating the very troublesome Calculations, which occur every Quarter in making up the Accounts of POOR LAW UNIONS. Having myself been employed in the Torrington Union, to make up the Accounts, at the commencement, I found those Calculations the most troublesome part of the business, and had recourse to the common Logarithms, which certainly abridged the labour, yet even with this valuable aid I was not satisfied, and was constantly searching after some other method more simple, and of easier application;—happily, I hit on the Idea, that any Number might be produced, by a combination of the Powers of the Numbers 2 or 3, and consequently, that the same Indices of the Powers that produced any two or more Numbers, would also represent any other two or more quantities bearing the Ratios of these Numbers, one to another respectively.”

Fowler had never been taught anything about binary or ternary number systems. No books at that time had any information about this. His most significant contribution to computer science was his explanation of the balanced ternary system, which is so elegant and easy to do repetitive calculations that it was well worth the extra bother of translation from decimal to ternary. In fact, he seems to have been the first to discover the practical value of the balanced ternary number system, and certainly the first to exploit it. Essentially, he had discovered that any number could be represented in as a series of values that could be -1, +1 or 0 and represented a power of three according to its ordinal position in a string. Fowler was doing his calculations in this ‘balanced ternary notation’ because it saved him a great deal of time as a council employee doing repetitive calculations, as he explains in his booklet. He had discovered that you could calculate what we’d call ‘percentages’ by simple addition or subtraction of various pre-calculated landmark percentages if you translated the decimal figures into balanced ternary. In fact, once you’d done this conversion, you could then do any repetitive division, multiplication, calculation of a proportion or percentage on them, purely by simple addition; doing the calculation once for every power of three in the range, and subsequently just doing simple addition based on the ternary representation of each number you need to do the calculation for. He explains all this in his booklet.

A simple example of usage

Imagine that goods had a tax rate of 22% (VAT in the UK is currently 20% which is easy to calculate in your head)

We make ourselves a simple calculator that has to change only when the rate changes

Now, if we want to calculate the figure of 22% of a sum like, for example, 341234, and we have no modern calculator to do it in an instance, we turn 341234 into its balanced ternary equivalent, using Mr Fowler’s splendid booklet to get …

+-0-+000+-+0-

Having done that, we get out our pencil and paper and add up the relevant values from the third column of the chart according to the sign in that position. (A trit is a single position in a ternary number, represented by either a -,+ or 0.)

The answer is 75071.5, which we achieved with nothing but simple addition. I’ve attached a simple spreadsheet to allow you to try it out and see what is going on under the covers. Why would Mr Fowler have been so excited by this? Because ‘mental’ addition –without a calculator- is much easier, quicker, and less error-prone than multiplication and division. It meant he got home on time. This idea was a real practical benefit to him in his work.

Thomas Fowler and the Power of Three

Thomas Fowler of Torrington, in North Devon, Britain, was a man of his time, in an age where everything seemed possible. He was born in 1777. Despite his lack of education or qualifications, he was able to argue on equal terms with Airey, Babbage and De Morgan, the leading mathematicians of the day. Like Michael Faraday, Richard Trevithick, or George Stevenson, he had little formal education. Like them, it didn’t stop either his confidence or energy, and it didn’t stop his peers respecting his abilities. He was a habitual inventor, who had already discovered and patented the principle of the thermosiphon that lead to the introduction of water-based central heating.

Such was Thomas Fowler’s obvious resourcefulness that he established himself as the local printer, council officer, and bank manager in his home town. His father had been a cooper, a very skilled craft, and Thomas had also had a good basic education before being apprenticed to a fellmonger. He was a skilled woodworker and had a fascination for mathematics. He soon became relatively prosperous by taking over the local printworks, and transforming it into a modern concern, supplemented with printing machinery he’d designed and built himself.

In his book, funded by a local squire who was impressed by his ingenuity, he finishes his description of his accounting calculations with a tantalizing demonstration of balanced ternary multiplication:

“I may now conclude, with an Example of Multiplication, by the Ternary Scale, which scarcely requires any mental exertion whatever; no Multiplication, nor even Addition, is required, as ordinarily practised.”

Multiply +0--+-+  =  628
      By +-+00-0  =  564
         _______________
        -0++-+-0    2512
      +0--+-+00     3768
    -0++-+-         3140
   +0--+-+
   _____________________
   +-000000--+-0 =354192
   _____________________

I have to admit that I had plenty of ‘mental exertion’ trying to understand it, at first. It becomes a bit clearer if we lay it out in the same way that we do multiplication by hand.

Once again, he avoids any multiplication in favour of simple addition, but I’ll explain more of the nuts and bolts of this later on in this article, and show how the ‘carry’ is performed.

He finishes the introduction to the book with the teasing sentences

“In the course of my observations on the Binary and Ternary Scales, I have fallen on a species of Binary and Ternary Arithmetic, which appears to possess some curious Properties, but, as writing on this subject is incompatible with my present purpose, I have only given a short Example of Multiplication, in what may be termed, Ternary Arithmetic, the process is extremely easy, and may be extended to very large Numbers.

Should the Sale of the present Edition be favourable, another will soon follow, in which the Ternary Table will appear under another Form, and extend from Unity to Numbers almost indefinitely great, and also contain some other curious and I hope, useful matter.”

Before we get too immersed in what Thomas Fowler had discovered, I need to explain a bit more about the balanced ternary system and how its remarkable properties led him to design and build a wooden calculating machine.

The example of multiplication has the puzzling line: +-+00-0 = 564.

That left-side value is in balanced ternary, a system based on the curious properties of ‘the power of three’. Anyone who used the old-fashioned weighing scales would be familiar with ‘Bachet’s problem of weights‘; the way that any weight of, say, between one and forty ounces could be done with just four weights: a 1-ounce weight, a 3-ounce weight, a 9-ounce weight and a 27-ounce weight. You chose one or more weight, just putting them on one scale or the other, while the item being weighed was on one of the scales.

With four ‘trits’ of the value 27, 9, 3 and 1, you can represent any value between -40 and +40 by either subtracting them (-), adding them (+) or not using them (0). Negative numbers are as natural to represent as positive ones.

  -40 = ----
  -39 = ---0
  -38 = ---+
  -37 = --0-
  -36 = --00
  -35 = --0+
  -34 = --+-
  -33 = --+0
  -32 = --++
  -31 = -0--
  -30 = -0-0
  -29 = -0-+
  -28 = -00-
  -27 = -000
  -26 = -00+
  -25 = -0+-
  -24 = -0+0
  -23 = -0++
  -22 = -+--
  -21 = -+-0
  -20 = -+-+
  -19 = -+0-
  -18 = -+00
  -17 = -+0+
  -16 = -++-
  -15 = -++0
  -14 = -+++
  -13 = ---
  -12 = --0
  -11 = --+
  -10 = -0-
   -9 = -00
  -8 = -0+
  -7 = -+-
  -6 = -+0
  -5 = -++
  -4 = --
  -3 = -0
  -2 = -+
  -1 = -
   0 = 0
   1 = +
   2 = +-
   3 = +0
   4 = ++
   5 = +--
   6 = +-0
   7 = +-+
   8 = +0-
   9 = +00
  10 = +0+
  11 = ++-
  12 = ++0
  13 = +++
  14 = +---
  15 = +--0
  16 = +--+
  17 = +-0-
  18 = +-00
  19 = +-0+
  20 = +-+-
  21 = +-+0
  22 = +-++
  23 = +0--
  24 = +0-0
  25 = +0-+
  26 = +00-
  27 = +000
  28 = +00+
  29 = +0+-
  30 = +0+0
  31 = +0++
  32 = ++--
  33 = ++-0
  34 = ++-+
  35 = ++0-
  36 = ++00
  37 = ++0+
  38 = +++-
  39 = +++0
  40 = ++++

So, -40 equals ‘—-‘, because it is -27-9-3-1. Similarly, -8 is ‘-0+’ because it is -9+0+1. In Bachet’s weights system, the ‘-‘ means ‘put the weight on the same scale as the thing being weighed’ and ‘+’ means ‘put the weight on the other side to the thing being weighed’ and ‘0’ means ‘leave the weight in the box’.

Why is this exciting? It is because it solves a fundamental problem of the binary system, which is that binary number have to be stored in a fixed width so that we can represent negative numbers. This is why there is such a rich and confusing plethora of numeric data types in SQL Server or .NET. I once had to write a Binary-coded decimal (BCD) math package in 8080 Assembler. It is accurate, but it isn’t elegant. I’d have done anything short of murder for a simpler way of coding numbers like this. To represent negative numbers in binary we must use Two’s Complement, which assumes a fixed length of representation. In the way that we use numbers in the real world, they just aren’t fixed length; and many of our woes with overflow and rounding errors are due to this simple problem. The ternary system doesn’t have this problem, as it is tri-state. This would have been a godsend. It can be extended to support the ternary equivalent of the decimal point. You can use it for floating point numbers too. With the balanced ternary number, there would be no need for separate encoding for decimal, integer and floating-point numbers. It is more like handling strings. Of course, to be effective you would need a processor that codes in ternary in its registers and has all the math primitives, such as addition and multiplication. These can be, and have been, made. Basically, in a database or the application you could have a single number format for every numeric datatype.

Given all this, why the lack of contemporary interest in ternary computing? It could have turned out rather differently.

The Wooden Ternary Computer

Fowler’s book alone is enough to secure his place in the history of computing, but there was much more behind his interest in the Ternary system than he was revealing. What Fowler didn’t explain in his book, although there were some tantalizing hints, was that he was already engaged in designing and building a wooden, mechanical computing machine in his back-garden workshop, based on the balanced ternary system.

He spent the final part of his life working on this wooden computer, his most ambitious project. He envisaged a small precision metal instrument but hadn’t the machinery or skills to do it, so he set to work to build a mock-up out of wood to demonstrate the principles. It was the size of a weaving loom, and similar in appearance.

Like everything else he did, he threw all his mental energy into trying to improve it. When it was finally revealed in 1840, the design of the mechanical computer deeply impressed Babbage, as well as Baily and De Morgan, who all described it in some detail. Papers about the computer were read to the Royal Society, and it was exhibited for some years in the 1840s, in the George III Museum of Kings College, London, alongside Babbage’s Difference Engine.

Fowler wrote “This Machine was constructed entirely with my own hands (principally in Wood) with the utmost regard to economy and merely to put my Ideas of this mode of calculation into some form of Action; It is about 6 feet long , One foot deep and three feet wide., In Brass & Iron it might be constructed so as not to occupy a space much large than a good portable writing desk and with powers such as I have described.”

Sadly, the creation of two successive designs for the ternary calculating machine were Fowler’s final work: he died in late middle age, dictating to his daughter a description of the machine on his deathbed. Happily, we still have this description of the device and the way it worked. There is a representation of it in a stained glass window in Torrington Church.

Sadly, without Fowler’s advocacy, the machine attracted little interest, for a variety of reasons. Perhaps the main one was that Babbage’s difference engine could print, and the primary requirement was to print tables for calculating inclination for ranging guns, for navigation and for logarithmic tables. The available tables were inaccurate due to human error, and there was an urgent need for something better. There was no demand then for a calculating machine. Also, the wooden calculator required that the numbers were converted to and from ternary. It was a considerable culture-shock and had to be done by lookup, or by a rather laborious addition/subtraction process described by Fowler in his book. Fowler was trying to demonstrate the principles of the system rather than a practical device and the audience could only see the wood.

It was another half century before Burroughs produced the first commercially-successful calculator. In the meantime, industrial society adapted to the need for computational skills. People discovered that if they spent a large part of their working lives adding up figures, or doing engineering calculations, they became very quick and accurate at it. As recently as forty years ago, I witnessed accountants consistently checking a column of figures on an A4 sheet of paper in around three seconds with complete accuracy. If one includes the OCR input, that feat was impossible to perform with the computing devices that were around at the time. Mechanical and electronic calculators took a long time to get broad acceptance because of the huge potential of the brain for training. Just study, for example, what a professional musician can do!

Since Fowler’s pioneering work, there has been relatively little interest in the ternary system. However, the first working ternary computer was built in Russia, at the Moscow State University, in 1958, designed by Nikolai P. Brusentow and his colleagues. They named it Setun, after the river that flows near the university campus. From 1958 to 1965 around fifty of them were built. The aim was to create a small, simple and cheap computer, that could be used in schools and offices. The design performed well and Setun-70 (1970), a two-stack computer, followed. Had it been given the funding by the state that it deserved, this type of computer would rival the supremacy of the binary system. Although it would be possible to map balanced ternary numbers to binary storage by using two bits per trit, you can’t process ternary numbers quickly in any of the current binary CPUs because it really needs three-state logic to implement mathematic operations. Flip, Flap, flop rather than Flip Flop, as Donald Knuth observed.

Following Fowler’s death, his wooden computer was eventually put into storage, having been broken into several pieces to make it fit the space. The remains were returned to the family. They were unable to reassemble it and, at some point, it disappeared. We now know of its appearance only through an illustration that is part of a memorial stained-glass window in Torrington Church. We have no detailed plans, only Fowler’s description and De Morgan’s account. Recently, a group of historians of computing lead by Mark Glusker have been able to reconstruct parts of the mechanism from the contemporary accounts and the illustration.

After a century and a half of neglect, we are beginning to realize the full significance and relevance of what Fowler discovered.

Exploring the balanced ternary system in SQL

The most interesting thing about Fowler’s contribution to computer science was the balanced ternary system. Basically, it is both a storage and representational system of numbers, decimal, floating-point and integer, that lends itself intrinsically to calculation and manipulation. So, let’s explore this system, using SQL. It could be any other language but many implementations have been done already. Besides, SQL tables have a strange affinity with the table in Fowler’s book. We are not doing this with even the remotest thought that it is a practical idea, but because it is a great way to understand, test, and appreciate the system. I admit to enjoying myself. It exercised some SQL muscles that were getting a bit flabby.

Anything that involves simply converting balanced ternary numbers to integers and doing math on that is cheating. It is too easy. I’m more interested in working out what Fowler had in mind for his vision of mechanical calculation and how he might done this in detail, at the low level; and how we might do it in the future with tri-state logic. We don’t know exactly how he performed addition, subtraction, multiplication and division with the wooden calculating machine, though Mark Glusker (reference at the end) has made a convincing reconstruction of part of the machine. It is intriguing to model the possible ways of doing it. The code for these following SQL routines is attached to the article.

Creating a Number Table

The first exercise for a SQL implementation is to have a ‘number table’ that has both decimal integers and their ternary equivalents, for lookup. This is the approach that Fowler took with his booklet, though it was necessarily in a truncated form for publication.

We also want to convince ourselves that no number has two different balanced ternary representations, and vice-versa. We want a quick reference for testing routines and understanding the way the system works.

As there are only three possible values for each digit, you can easily get all the combinations and permutations of ‘-‘,’+’ and ‘0’ by simply doing repeated cross joins on them, and then calculating the integer. For a broader number table of greater range, you just add cross-joins. Of course, if you have, say, a nine-digit range, zero will be nine zeros long where just one suffices, and so on. It would be nice to truncate leading zeros. Also, we will need to convert from balanced ternary to integer.

For a few of the subsequent routines, I use a lookup view of the actual positional values of the trits of a ternary number. Here is a view that does this. 

IF (Object_Id('dbo.TernaryWord', 'V') IS NOT NULL) 
     SET NOEXEC On --you don't need to keep recreating this.
GO
CREATE VIEW dbo.TernaryWord
/**
        Summary:   >
        This view returns a list of consecutive integers representing the 
		ordinal position of each DecimalValue of a ternary word of 27 DecimalValues, 
		together with the decimal value of each DecimalValue. (either positive, 
		negative or absent)
        Author: Phil Factor
        Date: 07/09/2017
        Database:PhilFactor
        Examples:
             - code: Select TheIndex, decimalValue from TernaryWord
        Returns: two-column result TheIndex int, decimalValue bigint >
        **/
WITH SCHEMABINDING
AS 
 SELECT TheIndex, DecimalValue
  FROM
    (VALUES
	(1, 1),(2, 3),(3, 9),(4, 27),(5, 81),(6, 243),(7, 729),(8, 2187),(9, 6561),
	(10, 19683),(11, 59049),(12, 177147),(13, 531441),(14, 1594323),(15, 4782969),
	(16, 14348907),(17, 43046721),(18, 129140163),(19, 387420489),(20, 1162261467)
	,(21, 3486784401),(22, 10460353203),(23, 31381059609),(24, 94143178827),
	(25, 282429536481),(26, 847288609443),(27, 2541865828329)
) number(TheIndex, decimalValue)
GO
SET NOEXEC OFF

From Balanced Ternary to Integer

The classic approach to this is to use iteration. This can be translated to SQL Server but we are more likely to choose a set-based method for performance. However, it is always useful for double-checking

IF Object_Id('dbo.BalancedTernaryToInteger','FN' ) IS NOT NULL
   DROP function dbo.BalancedTernaryToInteger
GO
CREATE FUNCTION dbo.BalancedTernaryToInteger(@BalancedTernary VARCHAR(50))
/**
Summary: >
  This takes a string representation of a balanced ternary number
  and returns an integer accordingly. It uses iteration so is slower
  than an iTVF solution like IntegerFromBalancedTernary, but is useful
  for checking
Author: PhilFactor
Date: 11/09/2017
Database: PhilFactor
Examples:
   - Select * from dbo.dbo.BalancedTernaryToInteger('+-000000--+-0')
Returns: >
  A one-row table with one column, the integer
        **/
  RETURNS INT
AS
  BEGIN
    DECLARE @ii INT = 1;
    DECLARE @lenii INT = Len(@BalancedTernary), @accumulator INT = 0;

    ---
    WHILE(@ii <= @lenii)
      BEGIN
        SELECT @accumulator =
          CASE Substring(@BalancedTernary, @ii, 1) WHEN '+' THEN (@accumulator * 3) + 1
            WHEN '-' THEN (@accumulator * 3) - 1 ELSE @accumulator * 3 END, @ii = @ii + 1;
      END;

    RETURN @accumulator;
  END;
GO

An inline table-valued function will always do better

IF Object_Id('dbo.IntegerFromBalancedTernary') IS NOT NULL
   DROP function dbo.IntegerFromBalancedTernary
GO

CREATE FUNCTION dbo.IntegerFromBalancedTernary
/**
Summary: >
  This takes a string representation of a balanced ternary number
  and returns an integer accordingly
Author: PhilFactor
Date: 14/11/2017
Database: PhilFactor
Examples:
   - Select * from dbo.IntegerFromBalancedTernary('+-000000--+-0')
Returns: >
  A one-row table with one column, the integer
        **/
  (
  @String Varchar(MAX)
  )
RETURNS TABLE
 WITH SCHEMABINDING
AS
RETURN
  (
    (
    SELECT 
      Convert(INT,
  	  Sum( CASE Substring(Reverse(@String), TheIndex, 1) 
  	         WHEN '-' THEN -DecimalValue
               WHEN '+' THEN DecimalValue ELSE 0 END
           )
         ) AS TheInteger
      FROM dbo.TernaryWord
      WHERE Len(@String) = TheIndex
    ) 
  )

GO

So, it is plain sailing to go from ternary to integer.

Removing leading zeros

For certain operations, we will also want to remove leading zeros. Here, we need to ensure that if there are only zeros, then one zero is left. Here again, an inline function is the way to go.

IF (Object_Id('dbo.TrimLeadingZeros', 'IF') IS NOT NULL) 
DROP FUNCTION dbo.TrimLeadingZeros
  GO-- if the routine exists this stub creation stem is parsed but not executed
  CREATE FUNCTION dbo.TrimLeadingZeros(@String VARCHAR(MAX))
  /**
          summary:   >
          This function returns a string with all leading zeros removed.
          Author: Phil Factor
          date: 8th Aug 2017
          example:
               - code: select WithoutLeadingZeros from dbo.TrimLeadingZeros('000678')
  			 - code: select  WithoutLeadingZeros from dbo.TrimLeadingZeros('678')
               - code: Select  WithoutLeadingZeros from dbo.TrimLeadingZeros('000')
          returns:   >
          Input string without leading white-space
          
          **/
  RETURNS TABLE
  WITH SCHEMABINDING
  AS
  RETURN
    (
    SELECT 
      CASE WHEN @String NOT LIKE '%[^0]%' THEN '0' else
  	Stuff(' ' + @String,
  	      1, 
  	      PatIndex('%[^0]%', '0' + @String + '!' COLLATE SQL_Latin1_General_CP850_BIN) - 1, 
  	'') end AS WithoutLeadingZeros
    )
  GO

Part of the script is a quick assertion test to ensure that it works

--now do some quick assertion tests to make sure nothing is broken
  IF EXISTS
    (SELECT *
       FROM
         (VALUES
            ('00000', '0'), ('0296009', '296009'), ('0120000', '120000'),
            ('3218', '3218'), ('0-+000', '-+000') –Tests removed for brevity
         ) AS testCases(TheInput, TheOutput)
         OUTER APPLY TrimLeadingZeros(testCases.TheInput) AS TLZ
       WHERE TheOutput <> WithoutLeadingZeros
    )
    RAISERROR('TrimLeadingZeros failed a test', 16, 1)

So now, with these two table-valued functions in place, we can then create our lookup table.

Creating a lookup table for conversion

We’ll restrict ourselves to a tryte of nine trits wide, giving us 59049 integers between 29524 and -29524. A register of 27 trits wide would be enough for most of us, and would represent 7625597484987 numbers, about the same as a 44-bit word, but you’ll need a faster computer and more patience than I have, to calculate them all.

IF EXISTS(SELECT * FROM tempdb.sys.tables WHERE name LIKE '#tempBalancedTernary%')
     DROP TABLE  #tempBalancedTernary
  Create TABLE #tempBalancedTernary (symbol varchar(20) NOT null,IntegerValue INT NOT null)
  DECLARE @trinary TABLE(token CHAR(1))
  --create the table containing the three allowed symbols
  INSERT INTO @trinary(token)
     SELECT token from (VALUES ('-'),('0'),('+'))f(token)
  INSERT INTO #tempBalancedTernary (symbol, IntegerValue)
    SELECT symbol, Coalesce(TheInteger,0) FROM
     (SELECT WithoutLeadingZeros
        FROM @trinary a
        CROSS JOIN @trinary b
        CROSS JOIN @trinary c
        CROSS JOIN @trinary d
        CROSS JOIN @trinary e
        CROSS JOIN @trinary f
        CROSS JOIN @trinary g
        CROSS JOIN @trinary h
        CROSS JOIN @trinary i
        CROSS JOIN @trinary j
        OUTER APPLY dbo.TrimLeadingZeros
         (a.token+b.token+c.token+d.token+e.token+f.token+g.token+h.token+i.token+j.token)
     )AllPPermutations(symbol)
  OUTER APPLY dbo.IntegerOfBalancedTernary(symbol)
  GO
  ALTER TABLE #tempBalancedTernary 
    ADD CONSTRAINT TheTernaryKey unique (Symbol);
  ALTER TABLE #tempBalancedTernary 
    ADD CONSTRAINT IntegerValuePKey PRIMARY KEY CLUSTERED (IntegerValue);

We now have a quick way of translating between integer and balanced ternary. We can easily test things out. We can now progress to the simple mathematical operations that so engrossed Thomas Fowler. The table that we produced in the preceding introductory paragraph was produced simply by the query …

SELECT Convert(VARCHAR(3), IntegerValue) + ' = ' + symbol
  FROM #tempBalancedTernary
    WHERE IntegerValue BETWEEN-40 AND 40
  ORDER BY IntegerValue

… and we now have an excellent testbed to checking mathematical operations.

Just one last task before we do so, to have a routine that converts from integer to Balanced ternary.

Converting From Integer to Balanced Ternary

IF (Object_Id('dbo.BalancedTernaryOfInteger', 'IF') IS NOT NULL) 
     DROP FUNCTION dbo.BalancedTernaryOfInteger
  GO
  CREATE FUNCTION dbo.BalancedTernaryOfInteger(@TheNumber INT)
  /**
          Summary:   >
          This function/view/procedure converts an integer into balanced ternary
          Author: Phil Factor
          Date: 04/09/2017
          Database:PhilFactor
          Examples:
               - code: >SELECT ternary FROM dbo.BalancedTernaryOfInteger(29562)
               - code: >
  SELECT Convert(INT,(TheNumber*59049)-29524), ternary  FROM 
    (Values        
      (rand()),(Rand()),(Rand()),(Rand()),
  	(Rand()),(Rand()),(Rand()))number(TheNumber)
   outer APPLY dbo.BalancedTernaryOfInteger(Convert(INT,(TheNumber*59049)-29524))
   
          Returns:   >
          nothing
          **/
  RETURNS TABLE
  WITH SCHEMABINDING
  AS
  RETURN
    (
    SELECT Coalesce(
      (SELECT Substring(
          CASE WHEN @TheNumber > 0 THEN '0+-' ELSE '0-+' END,
          (((Abs(@TheNumber) + Floor(DecimalValue / 2)) / DecimalValue) % 3 + 1),
          1
      ) AS TheTernary
      FROM
        dbo.TernaryWord
        where DecimalValue <= Abs(@TheNumber) + Floor(DecimalValue / 2)
      ORDER BY DecimalValue DESC
      FOR XML PATH(''), TYPE).value('.', 'VARCHAR(27)'), '0') AS ternary
    )
  GO

And now, with an assertion test, we can check that it works with the whole range!

IF EXISTS (
SELECT * FROM #tempBalancedTernary AS TBT
outer APPLY dbo.BalancedTernaryOfInteger(IntegerValue)
WHERE ternary <> symbol)
RAISERROR ('I can''t believe it. The BalancedTernaryOfInteger routine is incorrect',
16,1)

GO

The Basic Mathematical Operations

The next step is to check out negation, addition, incrementing, multiplication and division. This starts easy, but doesn’t stay easy.

Negation

To turn a positive BT (balanced Ternary) number into its negative or vice versa, all you need to turn all the ‘+’ symbols into ‘-‘, and all the ‘-‘ symbols into ‘+’. You leave ‘0’s well alone.

I do this:

SELECT Replace(Replace(Replace('+0--+-+','-','='),'+','-'),'=','+')

Giving

-0++-+-

I’d be pleased if there is a more efficient way!

You can, of course, now prove to yourself that this works by reading them in the lookup table …

SELECT symbol, IntegerValue
FROM #tempBalancedTernary AS TBT
WHERE symbol IN
('+0--+-+', Replace(Replace(Replace('+0--+-+', '-', '='), '+', '-'), '=', '+'))

… which gives …

 

symbol  IntegerValue
  +0--+-+ 628
  -0++-+- -628

Abs

With the ABS function, you are just negating a negative number and leaving a positive one. A positive number starts with a + and a negative one starts with a ‘-‘, just like decimal notation. The precise meaning is different, though. Here is a simple example.

SELECT CASE WHEN Left(LTrim(ternary),1)='+' THEN ternary
ELSE Replace(Replace(Replace(ternary ,'-','='),'+','-'),'=','+') end
FROM (VALUES ('-+---0'))f(ternary)

Increment and Decrement

Incrementing is the same action as decrementing, and is a subset of full binary addition so I’ll deal with it here. Binary increments can quite often lead to cascading flips of the more significant bits. Ternary increments are less prone to this, so you gain performance from treating it as a separate operation. I’ll use a recursive approach. using the simple rules for this operation, SQL Server functions don’t really handle defaults well, hence the need for the DEFAULT keyword.

IF Object_Id('dbo.incrementTernary', 'FN') IS NOT NULL DROP FUNCTION dbo.incrementTernary
  GO
  CREATE FUNCTION dbo.incrementTernary
    /**
  summary:   >
  This function increments a ternary number. A decrement is just an increment with a
  negative number, of course. This is a recursive scalar function so it isn't going
  to be super fast (av 0.05ms in my timing) !
  Author: Phil Factor
  date: 28th Aug 2017
  example:
    - code: select  dbo.incrementTernary('---',default,'0')
   returns:   >
  the incremented/decremented balanced ternary value as a string.
          
  **/
    (
    @ternary VARCHAR(27),
    @IndexIntoTrigit INT=NULL,
    @increment CHAR(1)
    )
  RETURNS VARCHAR(27)
  AS
    BEGIN
  	IF @IndexIntoTrigit IS NULL SELECT @IndexIntoTrigit=Len(@ternary) --initial call
      IF @increment IN
      ('-', '+')
        BEGIN
          SELECT @ternary=Stuff(@ternary,@IndexIntoTrigit,1,
           CASE Substring(@ternary,@IndexIntoTrigit,1) 
             WHEN '-' THEN CASE @increment WHEN '-' THEN '+' WHEN '+' THEN '0' ELSE @increment end
             WHEN '+' THEN CASE @increment WHEN '-' THEN '0' WHEN '+' THEN '-' ELSE @increment END
             ELSE  @increment END)
          IF(Substring(@ternary, @IndexIntoTrigit, 1) = '-' AND @increment = '+')
            OR (Substring(@ternary, @IndexIntoTrigit, 1) = '+' AND @increment = '-')
            IF(@IndexIntoTrigit < 2)
              SELECT @ternary = dbo.incrementTernary('0' + @ternary, @IndexIntoTrigit, @increment)
            ELSE SELECT @ternary = dbo.incrementTernary(@ternary, @IndexIntoTrigit - 1, @increment)
        END
      RETURN @ternary
    END
  GO

Binary Addition

Binary addition refers to simple addition of two values, an L_value and an R_value. We will need more than this for multiplication, which is the ability to sum an arbitrary set of values.

Here is a simple addition just to show how it is done.

+++---000 
   +-0+-0+-0 
  __________
  +-0+-+-+-0

Starting from the least significant right-hand side, we look at the digit in the two values. Two zeros result in a zero, of course. In the next column is a minus and a zero, leaving a minus. All is simple until we get to the fifth column with two minuses. Hmm. There is a ‘minus’ carry and a ‘plus’ residual. That means that the next column should end up with zero, but there is a carry and so it is a minus. Then it is all simple until we get to the final left-side column where the two plusses give a ‘minus’ carry and a ‘plus’ residual. The carry appears in the rightmost column of the sum.

Knuth summarizes all this in his table:

Which I’ve translated

---------000000000+++++++++ carry
   ---000+++---000+++---000+++ lvalue
   -0+-0+-0+-0+-0+-0+-0+-0+-0+ rvalue
  _____________________________
   0+-+-0-0++-0-0+0+--0+0+-+-0 addition
  _____________________________
   --0-00000-0000000+00000+0++ carried

By ‘Carry’ I mean the number carried over from the summation of the previous trigit.. The ‘carry’ for addition is unusual in that it can be positive or negative. We are dealing with both positive and negative numbers. The ‘carried’ row is the value that must be carried to the next column because of the calculation

Subtraction is the same operation as addition. You just add a negation of the number. It is just a simple string manipulation. Carry is just a simple single-character ternary value, and so it can be dealt with simply. The obvious approach is iterative but we like to avoid that.

You can use Knuth’s lookup table to do the addition, and I rather like it because it is closer to the spirit of Fowler’s wooden computer.

IF Object_Id('dbo.KnuthAdd_BT', 'FN') IS NOT NULL DROP FUNCTION dbo.KnuthAdd_BT
  GO
  CREATE FUNCTION dbo.KnuthAdd_BT
    /**
  summary:   >
  This function adds two balanced ternary numbers via a lookup. It uses Knuth's
  lookup table rather than doing the calculation
  ---------000000000+++++++++ carry
  ---000+++---000+++---000+++ lvalue
  -0+-0+-0+-0+-0+-0+-0+-0+-0+ rvalue
  ____________________________
  0+-+-0-0++-0-0+0+--0+0+-+-0 addition
  ____________________________
  --0-00000-0000000+00000+0++ carried
  		
  Author: Phil Factor
  date: 28th Aug 2017
  example:
    - code: select  dbo.KnuthAdd_BT('+--0-','0+++-000')
    - code: select  dbo.KnuthAdd_BT('++++','++++')
    - code: Select  dbo.KnuthAdd_BT('','+++')
    - code: Select  dbo.KnuthAdd_BT('0','000000')
  returns:   >
  the balanced ternary value as a string.
          
  **/
    (
    @Lvalue VARCHAR(27),
    @RValue VARCHAR(27)
    )
  RETURNS VARCHAR(27)
  AS
    BEGIN
      DECLARE @Maxlen INT, @carry CHAR(1) = '0', @addition VARCHAR(27) = '' --initialize our result
      SELECT @Maxlen = Len(@Lvalue), --determine the maximum length
        @Maxlen = CASE WHEN @Maxlen < Len(@RValue) THEN Len(@RValue) ELSE @Maxlen END
      SELECT @addition = CASE @carry WHEN '-' THEN minusresult
                           WHEN '0' THEN zeroResult
                           WHEN '+' THEN plusresult END + @addition,
        @carry = CASE @carry WHEN '-' THEN minuscarry
                   WHEN '0' THEN zerocarry
                   WHEN '+' THEN pluscarry END
        FROM
        ( --the trits in the same ordinal position combined into a string up to the maximum length
        SELECT Substring(Reverse(@Lvalue) + Replicate(0, 27 - @Maxlen), TheIndex, 1)
               + Substring(Reverse(@RValue) + Replicate(0, 27 - @Maxlen), TheIndex, 1), TheIndex
          FROM
            (VALUES
  -- SQL Prompt formatting off
        (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),
  	  (14),(15),(16),(17),(18),(19),(20),(21),(22),(23),
  	  (24),(25),(26),(27))number(TheIndex)
  -- SQL Prompt formatting on
          WHERE TheIndex <= @Maxlen + 1
        ) AS FirstTwoDigits(digits, TheIndex)
          INNER JOIN
            (VALUES --Knuth's table rearranged for the convenience of relational operations
   ('--', '0', '+', '-', '-', '-', '0'),
  ('0-', '+', '-', '0', '-', '0', '0'),
  ('+-', '-', '0', '+', '0', '0', '0'),
  ('-0', '+', '-', '0', '-', '0', '0'),
  ('00', '-', '0', '+', '0', '0', '0'),
  ('+0', '0', '+', '-', '0', '0', '+'),
  ('-+', '-', '0', '+', '0', '0', '0'),
  ('0+', '0', '+', '-', '0', '0', '+'),
  ('++', '+', '-', '0', '0', '+', '+'))
          AS Addition(digits, minusresult, zeroResult, plusresult, minuscarry, zerocarry, pluscarry)
            ON Addition.digits = FirstTwoDigits.digits
        ORDER BY TheIndex
      RETURN --knock off any leading zeros.
    CASE WHEN @addition NOT LIKE '%[^0]%' THEN '0' else
    Stuff(' ' + @addition, 1, 
  	    PatIndex('%[^0]%', '0' + @addition + '!' COLLATE SQL_Latin1_General_CP850_BIN) - 1, 
  	    '')
    END
  END

The other approach I use is more complicated than strictly necessary as it deals with any amount of values of carry, which is necessary for the Sum_BT function. However, it isn’t much simpler to use Knuth’s lookup table. We are, however, rather cheating in that we are using integer division and a modulus function

IF Object_Id('dbo.Add_BT', 'FN') IS NOT NULL DROP FUNCTION dbo.Add_BT
  GO
  Create FUNCTION dbo.Add_BT
  /**
          summary:   >
          This function adds two balanced ternary numbers
          Author: Phil Factor
          date: 23th Aug 2017
          example:
               - code: select  dbo.Add_BT('+--0-','0+++-000')
  			 - code: select  dbo.Add_BT('+++','+++')
               - code: Select  dbo.Add_BT('','+++')
  			 - code: Select  dbo.Add_BT('0','000000')
          returns:   >
          the balanced ternary value as a string.
          
          **/
    (
    @Lvalue Varchar(200),
    @RValue Varchar(200)
    )
  RETURNS VARCHAR(80)
  AS
    BEGIN
      DECLARE @difference INT
      SELECT @difference = Len(@Lvalue) - Len(@Rvalue)
      IF @difference < 0 SELECT @Lvalue = Replicate('0', Abs(@difference)) + @lvalue
      ELSE SELECT @Rvalue = Replicate('0', @difference) + @Rvalue
      SELECT @Lvalue = '00'+Replace(Replace(Replace(@lvalue, '0', '00'), '+', '+1'), '-', '-1'),
             @rvalue = '00'+Replace(Replace(Replace(@rvalue, '0', '00'), '+', '+1'), '-', '-1')
      DECLARE @result VARCHAR(80), @carry INT;
      SELECT @carry = 0, @result = '';
      SELECT @result = CASE(trit + @carry) % 3 WHEN 2 THEN '-'
                         WHEN-1 THEN '-'
                         WHEN 0 THEN '0'
                         WHEN 1 THEN '+'
                         WHEN-2 THEN '+' ELSE '0' END + @result,
        @carry = CASE WHEN(trit + @carry) > 0 THEN ((trit + @carry) + 1) / 3
                   WHEN(trit + @carry) = 0 THEN 0 ELSE ((trit + @carry) - 1) / 3 END
        FROM
          (
          SELECT Convert(INT, Substring(@Lvalue, (TheIndex * 2) - 1, 2))
                 + Convert(INT, Substring(@Rvalue, (TheIndex * 2) - 1, 2)) AS trit, TheIndex
            FROM dbo.TernaryWord AS TW
            WHERE Substring(@Lvalue, (TheIndex * 2) - 1, 2) <> ''
          ) AS f(trit, TheIndex)
        ORDER BY TheIndex DESC
      RETURN 
        CASE WHEN @result NOT LIKE '%[^0]%' THEN '0' else
  	   Stuff(
  	  ' ' + @result, 1, 
  	  PatIndex('%[^0]%', '0' + @result + '!' COLLATE SQL_Latin1_General_CP850_BIN) - 1, 
  	  '') end
    END
  GO

So we can test the validity of these by a little test harness that will run from SSMS.

This makes use of our table of ternary values against their integer values to make sure that all give the same answer.

DECLARE @lvalue VARCHAR(27), @lint INT, @rvalue VARCHAR(27), @Rint INT
  SELECT @lvalue = symbol, @lint = IntegerValue
    FROM #tempBalancedTernary
    WHERE IntegerValue = Convert(INT, (Rand() * 29525) - 14762)
  SELECT @rvalue = symbol, @Rint = IntegerValue
    FROM #tempBalancedTernary
    WHERE IntegerValue = Convert(INT, (Rand() * 29525) - 14762)
  IF (dbo.add_BT(@Lvalue,@Rvalue)<>dbo.Knuthadd_BT(@Lvalue,@Rvalue)) 
  OR ((SELECT symbol
   FROM #tempBalancedTernary WHERE integerValue=@lint+@rint)<>dbo.Knuthadd_BT(@Lvalue,@Rvalue)) 
  	RAISERROR ('test failed',16,1)
  GO 10000

Yes, it looks as if ternary addition works OK!

Sum Addition

We need to be able to do addition of a whole collection of ternary numbers if we are to have the necessary tools for multiplication. This turns out to be only slightly more complicated than addition. We just need to create a user table type that allows us to pass a read-only table to a function.

IF EXISTS (SELECT * FROM sys.types WHERE name= 'BTNumbers')  SET NOEXEC ON
  GO
  CREATE TYPE dbo.BTNumbers AS TABLE
  (
      Number VARCHAR(80)
  )
  SET NOEXEC OFF
  GO

So now we can create a function that will sum any quantity of ternary numbers that we wish

IF Object_Id('dbo.Sum_BT', 'FN') IS NOT NULL DROP FUNCTION dbo.Sum_BT
  GO
  CREATE FUNCTION dbo.Sum_BT
    /**
  summary:   >
  This function takes a list of balanced ternary numbers and returns the
  sum
  		
  Author: Phil Factor
  date: 25th Aug 2017
  example:
    - code: 
  returns:   >
  the balanced ternary value of the sum as a string.
          
  **/
    (@ListOfBTNumbers BTNumbers READONLY)
  RETURNS VARCHAR(80)
  AS
    BEGIN
      DECLARE @result VARCHAR(30), @carry INT;
      SELECT @carry = 0, @result = '';
      SELECT @result = CASE(trit + @carry) % 3 WHEN 2 THEN '-'
                         WHEN-1 THEN '-'
                         WHEN 0 THEN '0'
                         WHEN 1 THEN '+'
                         WHEN-2 THEN '+' ELSE '0' END + @result,
        @carry = CASE WHEN(trit + @carry) > 0 THEN ((trit + @carry) + 1) / 3
                   WHEN(trit + @carry) = 0 THEN 0 ELSE ((trit + @carry) - 1) / 3 END
        FROM
          (
          SELECT TheIndex,
            Sum( CASE Substring(Reverse(f.Number) + '00000000000000000000000', TheIndex, 1)
  		         WHEN '-' THEN -1
                   WHEN '0' THEN 0
                   WHEN '+' THEN 1 ELSE 0 END
               ) AS TritSum
            FROM @ListOfBTNumbers AS f
              CROSS JOIN
                dbo.TernaryWord AS TW
            GROUP BY TheIndex
          ) AS f(TheIndex, trit)
        ORDER BY TheIndex;
      RETURN
    CASE WHEN @result NOT LIKE '%[^0]%' THEN '0' 
    ELSE  Stuff(' ' + @Result, 1, 
  	    PatIndex('%[^0]%', '0' + @Result  + '!' COLLATE SQL_Latin1_General_CP850_BIN) - 1, 
  	    '')
      END
    END
  GO

Now that we have this, we need to test it to make sure it works.

SET NOCOUNT ON
  DECLARE @NumbersToAdd BTNumbers
  DECLARE @IntegerCheck TABLE (value INT)
  INSERT INTO @integerCheck
  SELECT Convert(INT,(TheInteger*59049)-29524) FROM (Values        
      (rand()),( Rand()),( Rand()),( Rand()),( Rand()),( Rand()),( Rand()))number(TheInteger)
  INSERT INTO @NumbersToAdd
  	SELECT ternary FROM 	@integerCheck
    outer APPLY dbo.BalancedTernaryOfInteger(value)
  IF (
   SELECT dbo.BalancedTernaryToDecimal(dbo.Sum_BT(@NumbersToAdd)))<>
  (SELECT Sum(value) FROM @integerCheck)
  	RAISERROR('Incredible! the sum function didn''t work',16,1)
  GO 1000

Multiplication

We can now return to that tantalizing example of multiplication, of which Thomas Fowler said, “scarcely requires any mental exertion whatever; no Multiplication, nor even Addition, is required, as ordinarily practiced.”

It makes more sense to those of us who learned long division at school if one adds in the ‘0’s that Fowler left out.

Multiply +0--+-+  =  628
        By +-+00-0  =  564
           _______________
           0000000 
          -0++-+-0
         000000000
        0000000000       
       +0--+-+0000    
      -0++-+-00000    
     +0--+-+000000
     _____________________
     +-000000--+-0 =354192
     _____________________

If the relevant trit of the multiplier is ‘+’, then the equivalent partial product is the multiplicand shifted left by the place. If it is ‘-‘, then it is the negated multiplicand similarly shifted. The ‘0’ does nothing. Then the partial products are summed to get the result. All very easy.

IF Object_Id('dbo.Multiply_BT', 'FN') IS NOT NULL DROP FUNCTION dbo.Multiply_BT
  GO  
  CREATE FUNCTION dbo.Multiply_BT
    /**
  summary:   >
  This function multiplies two balanced ternary numbers using the method outlined
  by Mark Glusker from an example by Thomas Fowler
  		
  Author: Phil Factor
  date: 27th Aug 2017
  example:
    - code: 
  returns:   >
  the balanced ternary value as a string.
          
  **/
    (
    @Lvalue VARCHAR(27),
    @RValue VARCHAR(27)
    )
  RETURNS VARCHAR(27)
  AS
    BEGIN
      DECLARE @PartialProducts BTNumbers
      INSERT INTO @PartialProducts
        (Number)
        SELECT CASE digit WHEN '+' THEN @Lvalue
                 WHEN '-' THEN Replace(Replace(Replace(@Lvalue, '-', '='), '+', '-'), '=', '+') ELSE
                                                                                                  '0' END
               + Replicate('0', TheIndex - 1)
        FROM
          (SELECT Substring(Reverse(@RValue), TheIndex, 1), TheIndex
             FROM
                dbo.TernaryWord AS TW
          ) AS f(digit, TheIndex)
        WHERE digit NOT IN
      ('0', '')
      RETURN dbo.Sum_BT(@PartialProducts)
    END

And now we can check that it works

DECLARE @lvalue VARCHAR(27), @lint INT, @rvalue VARCHAR(27), @Rint INT
  SELECT @Lvalue = symbol, @lint = IntegerValue
    FROM #tempBalancedTernary
    WHERE IntegerValue = Convert(INT, (Rand() * 29525) - 14762)
  SELECT @RValue = symbol, @Rint = IntegerValue
    FROM #tempBalancedTernary
    WHERE IntegerValue = Convert(INT, (Rand() * 29525) - 14762)
  IF(dbo.Multiply_BT(@Lvalue, @RValue) <> 
      ((SELECT symbol FROM #tempBalancedTernary WHERE IntegerValue = @lint * @Rint)
      )
    )
    RAISERROR('Incredible! The test failed', 16, 1)
  GO 1000

Conclusion

Did Thomas Fowler invent something without precedent? Yes, he combined the principles of mechanical calculation with the simplicity of the ternary system to create a successful calculating machine. Had Fowler been given the resources lavished on Babbage, and Babbage’s robust health, he could well have gone on to make the same breakthroughs that Babbage made, such as printing the output and programming the calculations.

Is there still something we can learn from this? We have gone so far down the track of binary technology that is hard to see a ternary computer like the Setun providing anything more than we can get from binary technology. However, there is, potentially, gains to be made in creating maths packages that use balanced ternary, at least in their storage form, because these would hold out the promise of providing a single number type without the dangers of overflow.

For me, though, the biggest excitement is to explore the world of a stubborn, intelligent and determined man born over two hundred years ago in relatively humble circumstances, educating himself by night by thumbing through textbooks to the light of a candle, and then blazing a pioneering trail in a number of different technologies, fueled by a passion for technology, anger and sheer obstinacy. I would love to see him take up his place in the history of computing alongside the better-known pioneers of information technology. He deserves it.

References

Glossary

  • Ternary Scale – the number system based on trits, equivalent to the decimal system.
  • Trit,- the ternary version of a bit, the ternary digit.
  • Tryte – the ternary version of a byte, usually 9 trits wide
  • Ternary Word – a 27 trit wide number.
  • Multiplicand – the number being multiplied
  • Setun – a Series of computers built in Russia on the balanced ternary system

The post The Power of Three and the Wooden Computer appeared first on Simple Talk.

16 Nov 09:26

DSC Resource Kit Release November 2017

by Katie Keim [MSFT]

We just released the DSC Resource Kit!

This release includes updates to 10 DSC resource modules. In these past 6 weeks, 53 pull requests have been merged and 50 issues have been closed, all thanks to our amazing community!

The modules updated in this release are:

  • SecurityPolicyDsc
  • xAdcsDeployment
  • xComputerManagement
  • xDnsServer
  • xExchange
  • xNetworking
  • xPSDesiredStateConfiguration
  • xSQLServer
  • xStorage
  • xWebAdministration

For a detailed list of the resource modules and fixes in this release, see the Included in this Release section below.

Our last community call for the DSC Resource Kit was last week on Novemeber 8. A recording of our updates as well as summarizing notes will be available soon. Join us for the next call at 12PM (Pacific time) on December 20 to ask questions and give feedback about your experience with the DSC Resource Kit.
Also, due to the Christmas holiday, the next DSC Resource Kit release will go out on Decemeber 20 instead of the normal 6-week cadence which would be December 27.

We strongly encourage you to update to the newest version of all modules using the PowerShell Gallery, and don’t forget to give us your feedback in the comments below, on GitHub, or on Twitter (@PowerShell_Team)!

All resources with the ‘x’ prefix in their names are still experimental – this means that those resources are provided AS IS and are not supported through any Microsoft support program or service. If you find a problem with a resource, please file an issue on GitHub.

Included in this Release

You can see a detailed summary of all changes included in this release in the table below. For past release notes, go to the README.md or Changelog.md file on the GitHub repository page for a specific module (see the How to Find DSC Resource Modules on GitHub section below for details on finding the GitHub page for a specific module).

Module Name Version Release Notes
SecurityPolicyDsc 2.1.0.0
  • Updated SecurityOption to handle multi-line logon messages
  • SecurityOption: Added logic and example to handle scenario when using Interactive_logon_Message_text_for_users_attempting_to_log_on
xAdcsDeployment 1.3.0.0
  • Updated to meet HQRM guidelines – fixes issue 33.
  • Fixed markdown rule violations in README.MD.
  • Change examples to meet HQRM standards and optin to Example validation tests.
  • Replaced examples in README.MD to links to Example files.
  • Added the VS Code PowerShell extension formatting settings that cause PowerShell files to be formatted as per the DSC Resource kit style guidelines.
  • Opted into Common Tests “Validate Module Files” and “Validate Script Files”.
  • Corrected description in manifest.
  • Added .github support files:
    • CONTRIBUTING.md
    • ISSUE_TEMPLATE.md
    • PULL_REQUEST_TEMPLATE.md
  • Resolved all PSScriptAnalyzer warnings and style guide warnings.
  • Converted all tests to meet Pester V4 guidelines – fixes issue 32.
  • Fixed spelling mistakes in README.MD.
  • Fix to ensure exception thrown if failed to install or uninstall service – fixes issue 3.
  • Converted AppVeyor.yml to use shared AppVeyor module in DSCResource.Tests – fixes issue 29.
xComputerManagement 3.1.0.0
  • xOfflineDomainJoin:
    • Updated to meet HQRM guidelines.
xDnsServer 1.9.0.0
  • Added resource xDnsServerSetting
  • MSFT_xDnsRecord: Added DnsServer property
xExchange 1.17.0.0
  • Fix issue where test for Unlimited quota fails if quota is not already set at Unlimited
xNetworking 5.3.0.0
  • MSFT_xProxySettings:
    • Created new resource configuring proxy settings.
  • MSFT_xDefaultGatewayAddress:
    • Correct 2-SetDefaultGateway.md address family and improve example description – fixes Issue 275.
  • MSFT_xIPAddress:
    • Corrected style and formatting to meet HQRM guidelines.
    • Converted exceptions to use ResourceHelper functions.
    • Changed unit tests so that they can be run in any order.
  • MSFT_xNetAdapterBinding:
    • Corrected style and formatting to meet HQRM guidelines.
    • Converted exceptions to use ResourceHelper functions.
xPSDesiredStateConfiguration 8.0.0.0
  • xDSCWebService
    • BREAKING CHANGE: The Pull Server will now run in a 64 bit IIS process by default. Enable32BitAppOnWin64 needs to be set to TRUE for the Pull Server to run in a 32 bit process.
xSQLServer 9.0.0.0
  • Changes to xSQLServer
    • Updated Pester syntax to v4
    • Fixes broken links to issues in the CHANGELOG.md.
  • Changes to xSQLServerDatabase
    • Added parameter to specify collation for a database to be different from server collation (issue 767).
    • Fixed unit tests for Get-TargetResource to ensure correctly testing return values (issue 849)
  • Changes to xSQLServerAlwaysOnAvailabilityGroup
    • Refactored the unit tests to allow them to be more user friendly and to test additional SQLServer variations.
      • Each test will utilize the Import-SQLModuleStub to ensure the correct module is loaded (issue 784).
    • Fixed an issue when setting the SQLServer parameter to a Fully Qualified Domain Name (FQDN) (issue 468).
    • Fixed the logic so that if a parameter is not supplied to the resource, the resource will not attempt to apply the defaults on subsequent checks (issue 517).
    • Made the resource cluster aware. When ProcessOnlyOnActiveNode is specified, the resource will only determine if a change is needed if the target node is the active host of the SQL Server instance (issue 868).
  • Changes to xSQLServerAlwaysOnAvailabilityGroupDatabaseMembership
    • Made the resource cluster aware. When ProcessOnlyOnActiveNode is specified, the resource will only determine if a change is needed if the target node is the active host of the SQL Server instance (issue 869).
  • Changes to xSQLServerAlwaysOnAvailabilityGroupReplica
    • Made the resource cluster aware. When ProcessOnlyOnActiveNode is specified, the resource will only determine if a change is needed if the target node is the active host of the SQL Server instance (issue 870).
  • Added the CommonTestHelper.psm1 to store common testing functions.
    • Added the Import-SQLModuleStub function to ensure the correct version of the module stubs are loaded (issue 784).
  • Changes to xSQLServerMemory
    • Made the resource cluster aware. When ProcessOnlyOnActiveNode is specified, the resource will only determine if a change is needed if the target node is the active host of the SQL Server instance (issue 867).
  • Changes to xSQLServerNetwork
    • BREAKING CHANGE: Renamed parameter TcpDynamicPorts to TcpDynamicPort and changed type to Boolean (issue 534).
    • Resolved issue when switching from dynamic to static port. configuration (issue 534).
    • Added localization (en-US) for all strings in resource and unit tests (issue 618).
    • Updated examples to reflect new parameters.
  • Changes to xSQLServerRSConfig
    • Added examples
  • Added resource
    • xSQLServerDatabaseDefaultLocation (issue 656)
  • Changes to xSQLServerEndpointPermission
    • Fixed a problem when running the tests locally in a PowerShell console it would ask for parameters (issue 897).
  • Changes to xSQLServerAvailabilityGroupListener
    • Fixed a problem when running the tests locally in a PowerShell console it would ask for parameters (issue 897).
  • Changes to xSQLServerMaxDop
    • Made the resource cluster aware. When ProcessOnlyOnActiveNode is specified, the resource will only determine if a change is needed if the target node is the active host of the SQL Server instance (issue 882).
xStorage 3.3.0.0
  • Opted into common tests for Module and Script files – See Issue 115.
  • xDisk:
    • Added support for Guid Disk Id type – See Issue 104.
    • Added parameter AllowDestructive – See Issue 11.
    • Added parameter ClearDisk – See Issue 50.
  • xDiskAccessPath:
    • Added support for Guid Disk Id type – See Issue 104.
  • xWaitForDisk:
    • Added support for Guid Disk Id type – See Issue 104.
  • Added .markdownlint.json file to configure markdown rules to validate.
  • Clean up Badge area in README.MD – See Issue 110.
  • Disabled MD013 rule checking to enable badge table.
  • Added .github support files:
    • CONTRIBUTING.md
    • ISSUE_TEMPLATE.md
    • PULL_REQUEST_TEMPLATE.md
  • Changed license year to 2017 and set company name to Microsoft Corporation in LICENSE.MD and module manifest – See Issue 111.
  • Set Visual Studio Code setting “powershell.codeFormatting.preset” to “custom” – See Issue 108
  • Added Documentation and Examples section to Readme.md file – see issue 116.
  • Prevent unit tests from DSCResource.Tests from running during test execution – fixes Issue 118.
xWebAdministration 1.19.0.0
  • xWebAppPoolDefaults now returns values. Fixes 311.
  • Added unit tests for xWebAppPoolDefaults. Fixes 183.

How to Find Released DSC Resource Modules

To see a list of all released DSC Resource Kit modules, go to the PowerShell Gallery and display all modules tagged as DSCResourceKit. You can also enter a module’s name in the search box in the upper right corner of the PowerShell Gallery to find a specific module.

Of course, you can also always use PowerShellGet (available in WMF 5.0) to find modules with DSC Resources:

# To list all modules that are part of the DSC Resource Kit
Find-Module -Tag DSCResourceKit 
# To list all DSC resources from all sources 
Find-DscResource

To find a specific module, go directly to its URL on the PowerShell Gallery:
http://www.powershellgallery.com/packages/< module name >
For example:
http://www.powershellgallery.com/packages/xWebAdministration

How to Install DSC Resource Modules From the PowerShell Gallery

We recommend that you use PowerShellGet to install DSC resource modules:

Install-Module -Name < module name >

For example:

Install-Module -Name xWebAdministration

To update all previously installed modules at once, open an elevated PowerShell prompt and use this command:

Update-Module

After installing modules, you can discover all DSC resources available to your local system with this command:

Get-DscResource

How to Find DSC Resource Modules on GitHub

All resource modules in the DSC Resource Kit are available open-source on GitHub.
You can see the most recent state of a resource module by visiting its GitHub page at:
https://github.com/PowerShell/< module name >
For example, for the xCertificate module, go to:
https://github.com/PowerShell/xCertificate.

All DSC modules are also listed as submodules of the DscResources repository in the xDscResources folder.

How to Contribute

You are more than welcome to contribute to the development of the DSC Resource Kit! There are several different ways you can help. You can create new DSC resources or modules, add test automation, improve documentation, fix existing issues, or open new ones.
See our contributing guide for more info on how to become a DSC Resource Kit contributor.

If you would like to help, please take a look at the list of open issues for the DscResources repository.
You can also check issues for specific resource modules by going to:
https://github.com/PowerShell/< module name >/issues
For example:
https://github.com/PowerShell/xPSDesiredStateConfiguration/issues

Your help in developing the DSC Resource Kit is invaluable to us!

Questions, comments?

If you’re looking into using PowerShell DSC, have questions or issues with a current resource, or would like a new resource, let us know in the comments below, on Twitter (@PowerShell_Team), or by creating an issue on GitHub.

Katie Keim
Software Engineer
PowerShell DSC Team
@katiedsc (Twitter)
@kwirkykat (GitHub)

16 Nov 09:25

The new Azure AD sign-in and “Keep me signed in” experiences rolling out now!

by Alex Simons

Howdy folks,

Im excited to announce that the general availability rollout of the new Azure AD sign-in and Keep me signed in experiences has started! These experiences should reach all users globally by the end of the week. Users who go to our sign-in page will start to see the new experiences by default, but a link allowing users to go back to the old experiences will be available until early December to give you some extra time to make the transition.

Id like to take this opportunity to acknowledge the delays we have had with these features and thank you all for your patience. When we released these experiences in preview, we received a lot of great feedback from you and it was pretty clear we needed to take a little extra time to ensure the new experiences worked well with all the scenarios Azure AD sign-in is used for.

Let us know if you have any questions, and as always, were looking forward to your feedback and suggestions. Head on over to the Azure Active Directory Forum to share your thoughts with us.

Best Regards,

Alex Simons (Twitter: @Alex_A_Simons)

Director of Program Management

Microsoft Identity Division

[11/15/2017, 6:38pm Pacific – updated link to discussion forum to point to the right location]

16 Nov 09:25

Manage Google Play Protect with Microsoft Intune

by Microsoft Intune Team

Enabling the modern workplace means empowering our users to be productive from anywhere and on any device. Mobile devices are a great way to stay in touch with colleagues, catch up on email, or add the finishing touches to a project. With the power of having company data at your fingertips comes the responsibility of protecting the devices where that data is consumed.

Starting November 15th, IT Pros can leverage Microsoft Intune to ensure that Android devices accessing company data have enabled Google Play Protect services. Google Play Protect is a suite of security features provided by Google that enable enterprises to protect their devices, apps, and data. Lets now take a closer look at Google Play Protect and how you can control it with Intune.

Three pillars of Google Play Protect

  1. SafetyNet Verify Apps API Can my apps be trusted?
    • Scans devices for known malicious app installations
    • If it detects a potentially dangerous app, all users who have installed the app will be advised to remove it. You can learn more here.
  2. SafetyNet Attestation API Can my devices be trusted?
    • Ensures Android devices pass Google’s compatibility and integrity checks
    • Examines software and hardware on the device where the app is installed to create a profile of that device. The service then tries to match that profile against ones that passed Android compatibility testing to determine its integrity. The compatibility check API call returns a response that can be inspected for verification. You can learn more here.
  3. Google Play Services Are my communication channels secure?
    • Ensures device Security Providers are up-to-date for secure network communications
    • Enables SafetyNet Verify Apps API and SafetyNet Attestation API. You can learn more here.

Enable Google Play Protect compliance with Intune

Intune integrates with Google Play Protect (GPP) services through the device compliance policies. To check for GPP compliance, you can create a new compliance policy for the Android platform. The four settings that belong to GPP can be found under the Device Health category.

A compliance policy that requires these settings can then be targeted to a group of Android users or devices. If a device does not have these settings enabled, it will fall out of compliance.

Google Play Protect compliance settings

  • Google Play Services is configured
    Check that the Google Play services app is installed and enabled. Google Play services allow security updates and is a base level dependency for many security features on certified Google devices.
  • Up-to-date security provider
    An up-to-date security provider can protect a device from known vulnerabilities.
  • Threat scan on apps
    This setting specifies whether to require that the Android “Verify Apps” feature is enabled.
    NOTE: On the legacy Android platform, this feature is a compliance setting. Intune can only check to see whether this setting is enabled at the device level. On devices with work profiles (formerly Android for Work), this setting can be found as a configuration policy setting. This allows admins to enable the setting for a device.
  • SafetyNet device attestation
    Set the level of SafetyNet device attestation integrity that must be met. There are two levels of device integrity that can be measured by Google Play Protect: basic integrity or basic integrity & certified devices.You can choose a less strict policy that requires that devices have a basic level of integrity, or you can choose a more stringent policy which ensures that devices have passed certification checks by Google. Understanding the differences between what basic integrity and Google compatibility measure is important because it can help you decide what the right level of policy is for your organization.

Google has published the following guidance about what these mean:

Check basic integrity tells you about the general integrity of the device. Rooted devices, emulators, virtual devices, and devices with signs of tampering fail basic integrity.

Check basic integrity & certified devices tells you about the compatibility of the device. Only unmodified devices that have been certified by Google can pass this check. Devices that will fail include the following:

  • Devices that fail basic integrity
  • Devices with an unlocked bootloader
  • Devices with a custom system image/ROM
  • Devices for which the manufactured didn’t apply for, or pass, Google certification
  • Devices with a system image built directly from the Android Open Source Program source files
  • Devices with a beta/developer preview system image

Enable Google Play Protect with Intune

If your organization supports devices that run Android work profiles (formerly Android for Work), Intune can take things one step further and enable the Threat scan on apps setting on your devices. To enable this setting, create a new device configuration profile for the Android for Work platform. Find Threat scan on apps under Device restrictions > System security.

A device configuration profile that requires Threat scan on apps will enable that setting on any device with a work profile that have the profile assigned to them.

Additional resources:

16 Nov 09:24

New method developed to 3D print fully functional electronic circuits

16 Nov 09:23

Berlin: Privater BMW 3er E36 als falsches Polizeiauto gestoppt

by Robert

Auch Tuning hat seine Grenzen. Wer seinen BMW 3er E36 zum privaten Polizeiauto umbaut und glaubt, sich mit blauen Lichtern Sonderrechte zu verdienen, kommt jedenfalls schnell in Konflikt mit den echten Ordnungshütern. Ende vergangener Woche stellte die Polizei in Berlin-Neukölln einen als Polizeiauto “getarnten”, aber völlig privat genutzten BMW 3er sicher.

Der außergewöhnliche Fang gelang den Beamten in der Neuköllner Hermannstraße am vergangenen Sonntag. Die Polizei stoppte den auffällig umgebauten BMW 3er E36 und stellte schnell fest, dass sich dieser ungewöhnlich viele Bauteile mit ihrem eigenen Polizeiauto teilt. Da schauten die Streifenpolizisten dann doch mal etwas genauer hin und entdeckten, dass sich neben einigen anderen technischen Mängeln auch noch ein nicht für den öffentlichen Straßenverkehr zugelassenes Blaulicht mit Horn fand, das unter der Motorhaube verbaut war.

Den Halter des Fahrzeuges erwarten jetzt jedenfalls saftige Anzeigen wegen verschiedener Delikte. Sein umgebautes Fahrzeug ist er auch erst einmal los, denn der Dienstwagen Marke Eigenbau wurde auf das Sicherstellungsgelände der Polizei gebracht und steht jetzt dort. Was also bitteschön bringt jemanden dazu, sein Fahrzeug derart stark umzurüsten und damit dann auch ausgerechnet noch tagsüber in einer Großstadt herum zu fahren? Wir meinen: Mit Tuning und der Freude am Umbau hat das rein gar nichts mehr zu tun!

+++ Wir haben da mal ein paar Fragen +++ Am Sonntag fiel unseren Kollegen des Verkehrsdienstes ein #BMW mit div….

Posted by Polizei Berlin on Montag, 13. November 2017

Bilder: Polizei Berlin

16 Nov 09:23

Arbeitszeit: Ich will kein Robo-Jobber sein

by ZEIT ONLINE: Entdecken - Alexander Krex
28 Stunden arbeiten wie eine Maschine statt 40 wie ein Mensch? Unser Autor möchte lieber einen lebenswerten Job als ein Leben mit möglichst kurzer Arbeitszeit.
16 Nov 09:23

Touristen-Stau am Isartor: Stadt soll Bus-Chaos auflösen

Seit Monaten staut sich der Verkehr am Thomas-Wimmer-Ring. Schuld sind die internationalen Reisebusse gefüllt mit Touristen. Der Bezirksausschuss fordert eine lange fällige Lösung des Problems.
16 Nov 09:22

Gegen „Elterntaxis“: Nymphenburger Schule bremst Eltern aus

by Christine Ulrich
Viele Eltern bringen ihr Kind mit dem Auto zur Schule – aus unterschiedlichen Gründen. Doch der rege „Elterntaxi“-Verkehr vor den Schulen sorgt vielerorts für Unmut und Gefährdungen. Die Maria-Ward-Schule will nun gegensteuern.
16 Nov 09:22

Unsterblichkeit: Wollt Ihr ewig leben?

by ZEIT ONLINE: Entdecken - Wilhelm Schmid
Die Qualle Turritopsis dohrnii ist unsterblich. Bald könnten es ihr die Menschen gleichtun. Der Philosoph Wilhelm Schmid fragt sich, ob wir uns darauf freuen sollen.
16 Nov 09:22

Skurriler Mitarbeiter-Benefit: USA-Reise gegen Firmenlogo-Tattoo

Ein Kununu-Geschäftsführer versprach: Wer sich das Firmenlogo tätowieren lässt, fliegt kostenlos in die USA. Die Werksstudentin Anne Juliane Wirth nahm den Mitarbeiter-Benefit an. Ein Interview.

„Immerhin ist es kein Mode-Tattoo“, sagte ich mir noch, als ich die Geschichte von Anne Juliane Wirth gelesen habe. Die Wienerin, die als Werkstudentin bei Kununu arbeitet, hat sich das Firmenlogo der Arbeitgeber-Bewertungsplattform tätowieren lassen – und dafür einen Freiflug nach Boston bekommen. Die Geschichte ist skurril. Der ungewöhnliche Mitarbeiter-Benefit lässt bei vielen Menschen zweifelnde Blicke aufkommen. Wir haben „AJ“, wie Anne Juliane auch genannt wird, am Rande der New-Work-Sessions in Berlin getroffen und sie über die Aktion ausgefragt.

Skurriler Mitarbeiter-Benefit: „Das Tattoo erinnert mich an eine tolle Zeit!“

t3n.de: Als jemand, der sich mit 16 Jahren ein Tattoo hat stechen lassen und es gerade entfernen lässt, muss ich dich das fragen: Wie sicher bist du, dass das eine gute Idee war?

Anne Juliane Wirth: Nach einem halben Jahr mit dem Tattoo lautet die Zwischenbilanz: Ich würde es wieder tun. Eine kleine, minimalistische Blume an meinem Handgelenk, die mich an eine tolle Zeit erinnert – so what?

Dein Tattoo ist im Gegensatz zu meinem ziemlich sichtbar. Warum gerade das Handgelenk und nicht, sagen wir mal, die Pobacke?

Das würde ja bedeuten, dass Kununu für den Arsch wäre! Als typisches Opfer der „Generation Praktikum“ und durch Erzählungen im Freundeskreis weiß ich, wie es in anderen Firmen zugeht. Ich stehe voll hinter der Mission und den Werten, die Kununu vertritt. Durch die Stelle auf meinem Handgelenk bekommt die Blume insofern die gebührende Aufmerksamkeit. Ich gebe aber gerne auch zu: Die Stirn stand nie zur Debatte.

Das Tattoo hat dir eine Freundin in der WG-Küche gestochen. Ich finde das ja ganz schön tough. Du musst großes Vertrauen in sie gehabt haben, oder?

Für mich gehören Freundschaft und Vertrauen klarerweise zusammen.

Ist das Vertrauen in Kununu auch so groß? Was macht das Arbeiten bei dem Unternehmen denn so besonders, dass du dir das Logo tätowieren lässt?

„Nach einem halben Jahr mit dem Tattoo lautet die Zwischenbilanz: Ich würde es wieder tun.“

First things first: Dieser Mitarbeiter-Benefit entstand eigentlich aus einem Scherz heraus. Eine Kollegin hat im Office ihr neuestes Tattoo gezeigt. Daraufhin meinte unser Geschäftsführer, dass, wer sich die Kununu-Blume stechen lässt, einen Flug nach Boston bekäme. Ich habe hin und her überlegt und mich dann schließlich einfach getraut. Letztlich waren dafür aber drei Gründe ausschlaggebend: Erstens finde ich meinen Arbeitgeber wirklich toll. Ich mag die Arbeitsatmosphäre, meine Aufgaben, den Kollegenzusammenhalt, die offene Kommunikation, unser Office und so weiter. Zweitens liebe ich minimalistische Tattoos. Und drittens: Boston calling, hallo!?

Apropos, warum eigentlich nicht den Firmennamen, sondern nur die Blume?

Für die Blume gibt es einen Economy-Flug, für die Blume mit einem "k" Business Class, und wer sich den ganzen Firmennamen tätowieren lässt, darf in der ersten Klasse fliegen. Ich bin aber ziemlich winzig und Economy reicht da völlig.

Du hast dafür also einen Flug nach Boston geschenkt bekommen. Was hast du denn da so gemacht und hat die Reise sich gelohnt?

Ich war im September, kurz vor Ende der Semesterferien, für eine Woche in der Stadt. Und ja, Boston hat mir gut gefallen. Die Menschen sind wunderbar lässig. Ich bin jeden Tag 20 Kilometer spaziert, das Wetter war nochmal um zehn Grad wärmer als zu Hause in Wien. Darum habe ich in Parks viel Sonne getankt, mir den Harvard-Campus angesehen, außerdem eine Seminararbeit in der Boston Public Library beendet und natürlich die US-Kollegen in ihrem Büro besucht. Es war definitiv eine tolle Reise, die ich mir mit meinem Studenten-Budget sonst nur schwer hätte leisten können.

Würdest du dir ein t3n-Logo tätowieren lassen, wenn wir dich nach Hannover einladen?

Nö, denn ihr müsstet mich erst einmal von eurer Mission und eurer Unternehmenskultur überzeugen, also einen echten t3n-Fan aus mir machen. Glaub mir, die Messlatte liegt da ziemlich hoch. Und außerdem: Was soll ich denn bitte in Hannover?

Ok, das lass ich jetzt mal unkommentiert.

Übrigens, auch dieser Beitrag könnte dich interessieren: Dieser Benefit lässt dich jeden War for Talents gewinnen

16 Nov 09:17

Klimaschutz: "Ich will eine Revolution"

by ZEIT ONLINE: Campus - Laura Cwiertnia
Er verteilt keine Flyer, sondern postet ikonische Bilder auf Instagram und verklagt die US-Regierung. Wie ein 17-Jähriger dem Klimaschutz ein cooles Image verpasst.
16 Nov 09:17

Aufklärung: Nicht so schüchtern

by ZEIT ONLINE: Schule - Rudi Novotny, Jeannette Otto, Maximilian Probst
Kinder sind neugierig, Eltern verunsichert, Lehrer peinlich berührt: Was sollen Schüler über Sex, Porno und Partnerschaft wissen? Der Streit um die Sexualkunde