Skip to content

Archive for

29
Apr

iPad App Issue Delays ‘a Few Dozen’ American Airlines Flights


Issues with an app on iPads provided to pilots on American Airline flights have delayed “a few dozen” flights, making it difficult for planes to take off and causing them to return to the gates to fix the issue, according to The Verge.

aaipadAn American Airlines pilot’s iPad

“Some flights are experiencing an issue with a software application on pilot iPads,” American Airlines spokesperson Andrea Huguely later told The Verge. “In some cases, the flight has had to return to the gate to access a Wi-Fi connection to fix the issue. We apologize for the inconvenience to our customers. We are working to have them on the way to their destination as soon as possible.” Another spokesperson said that the issue affected “a few dozen flights” across the airline. “We’ve identified the issue, we’ve identified the solution, and we are working on it right now.”

Passenger Bill Jacaruso was traveling to Austin from Dallas / Fort Worth when his flight was delayed. He told The Verge that the pilot got on the intercom and told the passengers that his co-pilot’s iPad had went blank. About 25 minutes later he got on the intercom again, noting that his iPad had also went blank. At the time, the pilot said that all 737 airplanes were affected, but 45 minutes later he said the issue was affecting “random” American Airline planes. Another passenger told The Verge that “two systems” had failed and needed to be rebooted.

American Airlines received FAA approval for iPad use by pilots in the cockpit back in 2011. In 2013, the airline company began giving its pilots Electronic Flight Bags (EFB) containing the iPads, the first major commercial carrier to do so. The EFB’s goal is to use the iPad to replace the 40 pounds of manuals and maps that pilots usually carry. The iPads also come with a long-life battery that keeps the iPad powered for 24 hours.



29
Apr

A bold claim: LG plans on selling 12 million LG G4’s






style=”display:block”
data-ad-client=”ca-pub-8150504804865896″
data-ad-slot=”8461248232″
data-ad-format=”auto”>
(adsbygoogle = window.adsbygoogle || []).push();

LG‘s latest flagship, the LG G4, was made official earlier today and it looks to be every bit as good as we expected (because we knew everything already). Not too long ago though, analysts were spinning a sad tale for the LG G4, saying that it was not going to sell as many handsets as its predecessor, the LG G3, did. The analysts attributed this largely to the unfavourable market conditions thanks to barnstorming sales by the Samsung Galaxy S6 and its curvy brother, the Galaxy S6 Edge. Furthermore, the Snapdragon 808 processor would be a key differentiator for some consumers. Even so, LG is confident that it is going to sell 12 million LG G4’s  – the LG G3 sold around 10 million handsets, for reference.

We’ll have to see whether LG’s bold prediction can, or will, come true, though the device has a lot going right for it. A fantastic new camera and probably the best Quad HD display on the market at the moment immediately jump off the page, but most everything else is similar or a marginal upgrade over its predecessor, and that’s not a bad thing. And for the fashion conscious, genuine leather back covers are now available for the LG G4, and in more colour options than the plastic variants.


What do you think of the LG G4’s chances to sell 12 million handsets? Let us know your thoughts in the comments below.

Source: Yonhap News via Phone Arena

The post A bold claim: LG plans on selling 12 million LG G4’s appeared first on AndroidSPIN.

29
Apr

Lucid Sleep function allows your Chromebook to stay up-to-date even whilst sleeping


Chromebook-Lucid-Sleep

If you are the proud owner of a new Chromebook Pixel, you’ll be glad to hear of a new, experimental feature called Lucid Sleep. Whilst it sounds like some sort of hush-hush project at Lockheed’s SkunkWorks facility, Lucid Sleep is actually a way of ensuring that your new Pixel Chromebook keeps up to date with push notifications while it is sleeping, much like your smartphone does.

To access the Lucid Sleep function, just go to your Settings menu, click Privacy settings and then choose to ‘Keep WiFi on during sleep’. This results in limited WiFi connectivity even while your device is sleeping, allowing it to synchronize with your other devices and cloud data. The end result is that your machine is ready to go even quicker than it usually would be when woken from slumber. At present, the Lucid Sleep function is only available on the new Chromebook Pixel, but hopefully the rest of the Chromebook range will get it soon.

 

Source: GooglePlus

 

 

 

 

 

 

Come comment on this article: Lucid Sleep function allows your Chromebook to stay up-to-date even whilst sleeping

29
Apr

How to use SQLite to store data for your Android app


sqlite-and-Android

Most Android apps will need to persist user data at sometime. There are different ways to store user data, but SQLite databases are a very convenient and speedy method of saving user (or app) data and information.

SQLite is an opensource SQL database that stores the database as a text file on a device. Basic familiarity with SQL sets up a developer nicely to use Android’s sqlite implementation. And for developers not familiar with SQL, do not be discouraged, SQL is pretty straightforward to learn, use and implement. SQLite is a relational database management system just like Oracle, MySQL and PostgreSQL. Due to its small footprint and public domain license, it is possibly the most widely deployed database engine in the world, it can be found in all types of software ranging from embedded systems, browsers, and operating systems.

Android has a built in SQLite implementation, and application specific database files are stored in a private disk space that’s inaccessible to other applications. This way, no application can access another application’s data.

Preparation

The complete source code for this tutorial is available on GitHub.

The sample application for this tutorial shows how to create a database, named “SQLiteExample.db”, that contains a single table named “person”. This table stores Person data, including his name, gender and age.

There are two Activities, MainActivity, which shows a list of stored Person names, and CreateOrEditActivity, which allows adding and editing Person details.

The most important class, in our sample, is the ExampleDBHelper class, which extends SQLiteOpenHelper. SQLiteOpenHelper is a helper class designed to manage database creation and version management. You override onCreate() and onUpgrade() methods, and whenever a new database is created or upgraded, the appropriate method gets invoked.

ExampleDBHelper is where all the SQLite operations are carried out, and both MainActivity and CreateOrEditActivity call methods from this class to view, create, update or delete data from the database.

Extending “SQLiteOpenHelper”

We create a class, called ExampleDBHelper, that extends SQLiteOpenHelper. We begin by defining the database, tables and columns as constants. This is always a good idea. If any of these names get changed, rather than hunting through the source for all occurrences, we simply change it once. Take special notice of the column called “_id” (PERSON_COLUMN_ID). This column has special significance which will be discussed below.

public static final String DATABASE_NAME = "SQLiteExample.db";
private static final int DATABASE_VERSION = 1;
public static final String PERSON_TABLE_NAME = "person";
public static final String PERSON_COLUMN_ID = "_id";
public static final String PERSON_COLUMN_NAME = "name";
public static final String PERSON_COLUMN_GENDER = "gender";
public static final String PERSON_COLUMN_AGE = "age";

In the constructor, we call SQLiteOpenHelper’s constructor, passing it the application context, the database name, an SQLiteDatabase.CursorFactory (we actually pass a null object here), and the database version. This constructor handles the creation or upgrade of the database. The database version should begin from 1, and increase linearly, whenever you modify the database schema.

public ExampleDBHelper(Context context) 
    super(context, DATABASE_NAME , null, DATABASE_VERSION);

The onCreate() is called whenever a new database is created. Here, you specify each table schema. In our example app, we have only one table.

@Override
public void onCreate(SQLiteDatabase db) 
    db.execSQL("CREATE TABLE " + PERSON_TABLE_NAME + "(" + 
        PERSON_COLUMN_ID + " INTEGER PRIMARY KEY, " +
        PERSON_COLUMN_NAME + " TEXT, " +
        PERSON_COLUMN_GENDER + " TEXT, " +
        PERSON_COLUMN_AGE + " INTEGER)"
    );

The overridden onUpgrade() method is called whenever the database needs to be upgraded (i.e. when the version has changed). Here, you should drop and/or add tables, or migrate data to new tables, or whatever else needs to be done to move from the previous database schema to the new schema. In our example, we simply drop the existing “person” table, and then call onCreate() to recreate it. I doubt you would want to do this with real user data.

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    db.execSQL("DROP TABLE IF EXISTS " + PERSON_TABLE_NAME);
    onCreate(db);

For the sample application, we want the ExampleDBHelper class to handle all data insertion, deletion, updates and views (basically all queries to the database must be through ExampleDBHelper). So we define appropriate methods for each of these scenarios.

To insert a new Person, we use the creatively named insertPerson() method. We use the SQLiteOpenHelper method getWritableDatabase() to get an SQLiteDatabase object reference to our already created database. The Person details are stored in a ContentValues object, with the appropriate column name as key, and corresponding data as value. We then call SQLiteDatabase’s insert method with the person table name, and the ContentValues object. NOTE that we left out the PERSON_COLUMN_ID column, which was specified as a primary key. It automatically increments.

public boolean insertPerson(String name, String gender, int age) 
    SQLiteDatabase db = getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(PERSON_COLUMN_NAME, name);
    contentValues.put(PERSON_COLUMN_GENDER, gender);
    contentValues.put(PERSON_COLUMN_AGE, age);
    db.insert(PERSON_TABLE_NAME, null, contentValues);
    return true;

create_person
To update a person, we created an updatePerson() method. It is similar to the createPerson() method. The equivalent SQL statement to update a person row would be “UPDATE person SET name=’name’ and gender=’gender’ and age=’age’ WHERE ID=’id’“. The SQLiteDatabase update method is a convenient method for updating rows in a table. It is defined as: public int update (String table, ContentValues values, String whereClause, String[] whereArgs), where the whereClause represents the optional where clause, and whereArgs is a String[] of values that would replace the “?’s” included in the whereClause. Passing a null value as the whereClause will update all rows.

public boolean updatePerson(Integer id, String name, String gender, int age) 
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(PERSON_COLUMN_NAME, name);
    contentValues.put(PERSON_COLUMN_GENDER, gender);
    contentValues.put(PERSON_COLUMN_AGE, age);
    db.update(PERSON_TABLE_NAME, contentValues, PERSON_COLUMN_ID + " = ? ", new String[]  Integer.toString(id)  );
    return true;

android_sqlite_edit_person
We implemented two methods to view person’s in the database. The first retrieves a single person, given his id, and the other retrieves all persons. Since we are not writing to the database, we retrieve a readable database with getReadableDatabase(), and perform a rawQuery(). RawQuery takes a SQL query string, with optional queryArgs and returns a Cursor object. A Cursor provides access to the result set returned. A Cursor can be transversed forward, backwards or randomly. Cursor also provides methods to retrieve particular columns, total columns, total rows and much much more.

public Cursor getPerson(int id) 
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery( "SELECT * FROM " + PERSON_TABLE_NAME + " WHERE " +
        PERSON_COLUMN_ID + "=?", new String[]  Integer.toString(id)  );
    return res;

public Cursor getAllPersons() 
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery( "SELECT * FROM " + PERSON_TABLE_NAME, null );
    return res;

Deleting data is also pretty straightforward. SQLiteDatabase has a delete() method that takes the table name to delete from, and optional whereClause and whereArgs. NOTE: Be very careful when writing this, as passing null in the whereClause would delete all rows.

public Integer deletePerson(Integer id) 
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete(PERSON_TABLE_NAME,
        PERSON_COLUMN_ID + " = ? ",
        new String[]  Integer.toString(id) );

android_sqlite_delete_person

Integrating the “Helper” with the rest of the app

At this point, we have completely prepared our database for use. To integrate this with both our activities, we initialize ExampleDBHelper in each Activity onCreate() method, and then call the appropriate method, depending on what action is required.

In MainActivity, we display a list of all persons using a ListView. Clicking on the “Add New” button starts CreateOrEditActivity in create mode, allowing us to create a new person. While clicking on any list item starts CreateOrEditActivity in edit mode, allowing us delete or edit and update the person info.

To display the list of persons, we request a Cursor containing all person records. We then use a SimpleCursorAdapter instance for displaying the list items. Do you remember the special column named “_id” mentioned above? SimpleCursorAdapter requires this column, or else it would not work. To use the SimpleCursorAdapter, we define a layout view for each list item called person_info.xml.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<TextView
    android:id="@+id/personID"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="@dimen/activity_vertical_margin"
    android:textSize="@dimen/text_size"/>

<TextView
    android:id="@+id/personName"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:padding="@dimen/activity_vertical_margin"
    android:textSize="@dimen/text_size"/>

</LinearLayout>

All the magic in MainActivity happens in the onCreate() method. We get a dbHelper object, request for all person’s, and populate the ListView with the received Cursor. Finally, we implement the onItemClickListener() so that when a person is clicked, we get the person ID and parse it as an extra to CreateOrEditActivity.
The complete MainActivity code follows:

public class MainActivity extends ActionBarActivity 
    public final static String KEY_EXTRA_CONTACT_ID = "KEY_EXTRA_CONTACT_ID";

    private ListView listView;
    ExampleDBHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.addNew);
        button.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Intent intent = new Intent(MainActivity.this, CreateOrEditActivity.class);
                intent.putExtra(KEY_EXTRA_CONTACT_ID, 0);
                startActivity(intent);
            
        );

        dbHelper = new ExampleDBHelper(this);

        final Cursor cursor = dbHelper.getAllPersons();
        String [] columns = new String[] 
                ExampleDBHelper.PERSON_COLUMN_ID,
                ExampleDBHelper.PERSON_COLUMN_NAME
        ;
        int [] widgets = new int[] 
                R.id.personID,
                R.id.personName
        ;

        SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.person_info,
                cursor, columns, widgets, 0);
        listView = (ListView)findViewById(R.id.listView1);
        listView.setAdapter(cursorAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 

            @Override
            public void onItemClick(AdapterView listView, View view,
                                    int position, long id) 
                Cursor itemCursor = (Cursor) MainActivity.this.listView.getItemAtPosition(position);
                int personID = itemCursor.getInt(itemCursor.getColumnIndex(ExampleDBHelper.PERSON_COLUMN_ID));
                Intent intent = new Intent(getApplicationContext(), CreateOrEditActivity.class);
                intent.putExtra(KEY_EXTRA_CONTACT_ID, personID);
                startActivity(intent);
            
        );

    


CreateOrEditActivity is a little bit more involved. The Activity allows creating, editing and deleting persons. It also changes its UI based on what action is to be performed. Because of it’s length, we shall only show and discuss the parts relevant to database interaction.

In onCreate(), if we receive a personID, we call dbHelper.getPerson() with that ID, and then populate the fields with the person details:

Cursor rs = dbHelper.getPerson(personID);
            rs.moveToFirst();
            String personName = rs.getString(rs.getColumnIndex(ExampleDBHelper.PERSON_COLUMN_NAME));
            String personGender = rs.getString(rs.getColumnIndex(ExampleDBHelper.PERSON_COLUMN_GENDER));
            int personAge = rs.getInt(rs.getColumnIndex(ExampleDBHelper.PERSON_COLUMN_AGE));
            if (!rs.isClosed()) 
                rs.close();
            

If the delete button is clicked, we call dbHelper.delete() with the personID

case R.id.deleteButton:
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setMessage(R.string.deletePerson)
                        .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() 
                            public void onClick(DialogInterface dialog, int id) 
                                dbHelper.deletePerson(personID);
                                Toast.makeText(getApplicationContext(), "Deleted Successfully", Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(intent);
                            
                        )
                        .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() 
                            public void onClick(DialogInterface dialog, int id) 
                                // User cancelled the dialog
                            
                        );
                AlertDialog d = builder.create();
                d.setTitle("Delete Person?");
                d.show();
                return;

Finally, we implemented a persistPerson() method that checks if we require a person creation or update.

    public void persistPerson() 
        if(personID > 0) 
            if(dbHelper.updatePerson(personID, nameEditText.getText().toString(),
                    genderEditText.getText().toString(),
                    Integer.parseInt(ageEditText.getText().toString()))) 
                Toast.makeText(getApplicationContext(), "Person Update Successful", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            
            else 
                Toast.makeText(getApplicationContext(), "Person Update Failed", Toast.LENGTH_SHORT).show();
            
        
        else 
            if(dbHelper.insertPerson(nameEditText.getText().toString(),
                    genderEditText.getText().toString(),
                    Integer.parseInt(ageEditText.getText().toString()))) 
                Toast.makeText(getApplicationContext(), "Person Inserted", Toast.LENGTH_SHORT).show();
            
            else
                Toast.makeText(getApplicationContext(), "Could not Insert person", Toast.LENGTH_SHORT).show();
            
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
        
    

Conclusion

Extending SQliteOpenHelper helps you abstract the database creation, updates and maintenance, so you can focus on interacting with the database. We used different methods to interact with the database, including helper methods, and plain SQL commands.

While this sample app creates a simple one-table database, SQLite is a complete relational database system, and supports more advanced features including multiple tables, foreign keys, complex queries with joins and more. Using SQLite in your android app is a fast, secure, efficient and easy way to persist user and app data.

The complete source code for this tutorial is available on GitHub.

Android Developer Newsletter

Do you want to know more? Subscribe to our Android Developer Newsletter. Just type in your email address below to get all the top developer news, tips & links once a week in your inbox:
Email:

PS. No spam, ever. Your email address will only ever be used for Android Dev Weekly.



29
Apr

LG reports strong Q1 profits as mobile sales strengthen


lg logo mwc 2015 2

LG Electronics has just announced its unaudited financial results for the first quarter of 2015 and it’s a particularly strong start to the year for the company’s communications (smartphone) division.

In total, LG posted a first quarter net profit of KRW 38.4 billion (USD 34.91 million) and an operating profit of KRW 305.2 billion (USD 277.45 million), both of which are up from the previous quarter. However, revenues remained stagnant compared with the first quarter of 2014, stuck at KRW 13.99 trillion (USD 12.72billion). The reason for this is a decline in revenue generated by LG TVs, but soaring smartphone sales have helped to offset this.

LG smartphone shipments grew by 26 percent year-on-year

Looking specifically at mobile, sales revenue is up 5 percent from the same quarter last year, reaching KRW 3.6 trillion (USD 3.27 billion). Smartphone shipments grew by an impressive 26 percent over the last 12 months, reaching 15.4 million units this quarter. North America was the biggest growth region for LG, with a 66 percent shipment increase compared with last year. Korea saw a similarly impressive 57 percent growth in sales, thanks to the popularity of the rather unique LG G Flex 2.

As for the rest of the business, the Home Entertainment Company saw first quarter operating profits decline by 5 percent year on year KRW 4.44 trillion (USD 4.03billion), while its home appliance company saw a year-on-year gain of 9 percent to KRW 229.3 billion (USD 208.45 million). Finally, LG’s Vehicle Component Company, a relatively new division setup in July 2013, recorded revenues of KRW 382.6 billion (USD 347.82 million) and an operating loss of KRW 2.4 billion (USD 2.18 million).

Overall, LG looks to be continuing to build on its success in the mobile market, having released a strong line-up of high-end and mid-range products for various markets. The mobile division is growing particularly well, although the competitive nature of the market appears to be taking some toll on LG’s margins.

With the newly unveiled LG G4 set to hit the global market in June, we’ll have to wait for the company’s third quarter results to judge the impact of this year’s flagship.

Recent LG products:

.rvs_wrapper
width: 335px;

.rvs_wrapper.align_left
float: left;

.rvs_wrapper.align_right
float: right;

.rvs_wrapper.align_center,
.rvs_wrapper.align_none
width: 100%;

.rvs_wrapper.align_center
text-align: center;

.rvs_wrapper.align_center.cbc-latest-videos ul li
float: none;
display: inline-block;
vertical-align: top;

.rvs_wrapper.cbc-latest-videos:not(.align_none) ul li:nth-child(2n+1)
clear: both;

.rvs_title
font-weight: 600 !important;
margin: 0 !important;

.rvs_wrapper.align_right .rvs_title
padding-left: 20px;

.rvs_title a
font-family: ‘Roboto Condensed’;
color: #3a3a3a;

.rvs_wrapper.cbc-latest-videos ul
padding-top: 10px;

.rvs_wrapper.align_left.cbc-latest-videos ul li,
.rvs_wrapper.align_none.cbc-latest-videos ul li
padding: 0 15px 0 0;

.rvs_wrapper.align_right.cbc-latest-videos ul li
padding: 0 0 0 15px;
float: right;

.rvs_wrapper.align_center.cbc-latest-videos ul li
padding: 0 7px;

.rvs_wrapper.cbc-latest-videos ul li > a
font-weight: 400;

.rvs_wrapper.cbc-latest-videos ul li > a .yt-thumbnail
margin-bottom: 0;

@media only screen and (max-width : 480px)
.rvs_wrapper
width: 100%;
text-align: center;

#page .rvs_wrapper.cbc-latest-videos ul li
padding: 0 7px;
display: inline-block;
float: none;
vertical-align: top;

3

3
29
Apr

Samsung is again the world’s top smartphone seller


samsung logo mwc 2015 6

Samsung has recovered the top position in the global smartphone market, according to a Strategy Analytics report covering Q1 2015.

Samsung has lost the sales leadership to Apple in Q4 2014, according to some research firms, while in Strategy Analytics’ estimation the two companies tied for the first place with a 19.6 percent market share. Blowout iPhone 6 sales have helped Apple interrupt Samsung’s years-long run at the top, but it didn’t take long for Samsung to recover.

Samsung has shipped an estimate 83.2 million smartphones in Q1 2015, compared to 74.5 million in the previous quarter. Combined with Apple’s slowdown (61.2 million, compared to 74.5 million in the previous quarter), that gave Samsung a market share of 24.1 percent, a significant lead over Apple’s 17.7 percent.

strategy analytics market share q1 2015 2

Samsung’s jump comes despite the fact that Q1 is typically slower than Q4, and despite of strong competition from Apple at the high-end, and Chinese brands in the mid- and low-end.

Coming in third in Strategy Analytics’ ranking is LenovoMotorola with 5.4 percent, while Huawei ranked fourth, with 5 percent. All other players are lumped in the “others” group (47.7 percent).

Looking at the shifts in market shares quarter over quarter, Samsung is the only top player that has gained share, seemingly at the expense of everyone else. That’s good news for the embattled company, though Samsung also needs the average selling price of its phones to increase in order to return to growth. Samsung just announced its Q1 2015 results today, and ASP has actually decreased, which took its toll on revenue.

All eyes are now on the performance of the Galaxy S6 and S6 Edge. Signs are very positive so far, so Samsung will likely preserve its dominance in the quarters to come. But while profits may recover as well, it’s safe to say that the days of explosive growth are over for Samsung.



29
Apr

Movie streaming service Popcorn Time blocked by UK court


Popcorn Time

Popcorn Time has painted a rather large target on its back with its movie-streaming service. Due to its questionable legality, movie studios have sought to block the service, but a shift to Bittorrent-based distribution has allowed it to continue operating while Hollywood scrambles a response. One place the studios have been able to deal a blow, however, is in the UK, where they’ve managed to restrict access to the original Popcorn Time client.

The High Court yesterday ruled that five of the UK’s biggest broadband providers begin blocking five websites offering the streaming software for download. Sky, BT, EE, TalkTalk and Virgin Media will all be forced to comply, just as they have with popular Bittorrent websites like ThePirateBay (even if those blocks have later been rendered useless).

Although Popcorn Time is indifferent about its legal position, the judge had no issue calling out its real motive. “It is manifest that the Popcorn Time application is used in order to watch pirated content on the internet and indeed it is also manifest that that is its purpose,” notes Judge Briss. “No-one really uses Popcorn Time in order to watch lawfully available content.”

As none of the ISPs opposed the order, it’s only a matter of time until popcorntime.io, flixtor.me, popcorn-time.se, and isoplex.isohunt.to are blocked. However, because the service operates using P2P protocols, those already using the software shouldn’t experience any issues. When torrent sites like Kickass Torrents and EZTV were restricted in the UK, hundreds of websites sprung up in their place and proxy sites helped users evade the blocks on the original websites. It’s safe to assume the same will happen here.

Filed under: Internet, Software

Comments

Via: Variety

Source: High Court of Justice (.doc)

29
Apr

Dark tattoos can throw off Apple Watch’s heart rate sensor


Here’s one factor to take into account if you’re still undecided about getting the Apple Watch: it doesn’t seem to play well with tattoos. Several users revealed online that their devices act wonky when worn on a tattooed arm. The heart rate sensor wouldn’t read their pulse, and the watch wouldn’t detect direct contact with the skin, causing apps to stop working and repeatedly ask for the passcode. To confirm if inked skin really does affect the smartwatch’s functions, iMore has decided to perform a series of tests. “[W]e’re inclined to agree with those early reports,” the publication writes, “if your tattoo happens to be a solid, darker color.”

iMore has discovered that dark colors like black and red affect readings the most to the point that the watch can’t even register being in contact with skin. Lighter colors cause some heart rate misreadings, as well, but they don’t render the watch useless. It makes sense when you think of how the sensor works. See, in order to read your heart rate, the Apple Watch flashes green LED lights hundreds of times per second. Since red blood absorbs green light, the device can detect the amount of blood flowing through your pulse when the LEDs flash. The presence of ink that blocks light can then hinder the sensor’s ability to detect skin and the amount of blood flowing underneath.

You can switch off “Wrist Detection” to prevent the device from asking for a passcode every time the screen comes on. However, that solution isn’t perfect: for one, it switches off Apple Pay, as well. Of course, you can always wear the watch on your other arm if it’s not tattooed, but you can also just wait for the next iteration if an update can’t fix the issue.

[Image credit: Michael Lovell @ YouTube]

Filed under: Wearables, Mobile, Apple

Comments

Source: Michael Lovell @ YouTube, iMore

29
Apr

Google will tell you who you local General Election candidates are


Polling Station

The manifestos are out and party leaders are busy touring the country. Even tech companies are doing what they can to help you choose a side ahead of next month’s General Election. Twitter rolled out its political emoji, lovingly referred to as “hashflags”, earlier this month, but Google’s just launched a valuable resource that tells you all of the election candidates in your area. If you pull up a Google search and enter the words “who is on the uk ballot,” the search giant will ask you to enter your postcode or constituency before displaying an alphabetic list of all the candidates gunning for your vote. As expected, the 2015 Election campaign has been the most web-friendly yet — it’s just a shame online voting won’t happen any time soon.

Google Election Ballot

[Image credit: acme, Flickr]

Filed under: Internet, Google

Comments

Source: Google

29
Apr

Debt repayment issues dictate that Ouya needs to find a buyer quickly


OUYA-Console-set-h

It was only a couple of years ago that it was the darling of Kickstarter, blowing past its target goal of $950,000 with surprising ease and ending up with over eight and a half million dollars in funding. The start-up in question is Ouya, manufacturer of the Android micro gaming console, and thanks to a leaked memo from its CEO, Julie Uhrman, it would seem that the company has hit choppy waters as it now seeks a buyer.

After its Kickstarter campaign, Ouya went on to secure further funding from investors such as Kleiner Perkins, Nvidia and Shasta Ventures among others, one of which was an investment company TriplePoint. Now it seems that its time for Ouya to repay the venture capital. It’s unknown just how much capital TriplePoint invested, but given that Alibaba recently invested $10 million in Ouya, it must be a significant amount.

It is unclear exactly how much was lent by TriplePoint, except that it must have been more than the $10 million that OUYA raised just two months ago from Alibaba. Debt restructuring negotiations were unsuccessful. In her memo, Uhrman writes: “Given our debtholder’s timeline, the process will be quick. We are looking for expressions of interest by the end of this month.”

The investment bank, Mesa Global, has been hired to manage the process of looking for a buyer. Are you surprised at Ouya’s predicament? With the recent release of Android TV, has opportunity passed Ouya by?

 

Source: Fortune

Come comment on this article: Debt repayment issues dictate that Ouya needs to find a buyer quickly