Quantcast
Channel: 懒得折腾
Viewing all 764 articles
Browse latest View live

Open Data Cam Is a Computer Vision Traffic Counter That You Can Build Yourself with an NVIDIA Jetson TX2

$
0
0

Open Data Cam Is a Computer Vision Traffic Counter That You Can Build Yourself with an NVIDIA Jetson TX2

Despite its important in urban planning, traffic counting is a tricky and labor-intensive prospect. In many cases, people are paid to stand on a street corner and literally count cars. In our modern world of technology, nobody should have to perform such a monotonous task—and now they don’t, thanks to moovel lab’s Open Data Cam.

Open Data Cam is a device built on NVIDIA’s Jetson TX2 that monitors a video feed and interprets what it sees. To illustrate the capability of Open Data Cam, the team created a traffic counting program. A user can place the camera to point towards traffic, and access an interface from their phone to setup the data collection parameters. Multiple parts of the video frame can be used to count cars, trucks, and pedestrians, and then the collected data can be exported for analysis.

The system works with computer vision backed by a library of objects that it can detect. In the traffic counting example, those objects are vehicles and people. But, Open Data Cam has potential for a lot of other uses, like capturing wildlife or tracking patrons of a retail store. You’re really only limited by your imagination and what can be recognized by computer vision.

If you want to build Open Data Cam yourself, moovel lab has got you covered. After you’ve purchased the off-the-shelf hardware, you can use the provided printable templates to cut out the enclosure and assemble the device. Then simply install the open source software, and you’re ready to start counting cars.


BUILD A SOLAR-POWERED NATURE CAMERA FOR YOUR GARDEN

$
0
0

BUILD A SOLAR-POWERED NATURE CAMERA FOR YOUR GARDEN

Spring has sprung, and with it, sleepy-eyed wildlife is beginning to roam our gardens and local woodlands. So why not follow hackster.io maker reichley’s tutorial and build your own solar-powered squirrelhouse nature cam?

Raspberry Pi- and solar-powered nature camera

Inspiration

“I live half a mile above sea level and am SURROUNDED by animals…bears, foxes, turkeys, deer, squirrels, birds”, reichley explains in his tutorial. “Spring has arrived, and there are LOADS of squirrels running around. I was in the building mood and, being a nerd, wished to combine a common woodworking project with the connectivity and observability provided by single-board computers (and their camera add-ons).”

Building a tiny home

reichley started by sketching out a design for the house to determine where the various components would fit.

Raspberry Pi- and solar-powered nature camera

Since he’s fan of autonomy and renewable energy, he decided to run the project’s Raspberry Pi Zero W via solar power. To do so, he reiterated the design to include the necessary tech, scaling the roof to fit the panels.

To keep the project running 24/7, reichley had to figure out the overall power consumption of both the Zero W and the Raspberry Pi Camera Module, factoring in the constant WiFi connection and the sunshine hours in his garden.

Raspberry Pi- and solar-powered nature camera

He used a LiPo SHIM to bump up the power to the required 5V for the Zero. Moreover, he added a BH1750 lux sensor to shut off the LiPo SHIM, and thus the Pi, whenever it’s too dark for decent video.

Raspberry Pi- and solar-powered nature camera

To control the project, he used Calin Crisan’s motionEyeOS video surveillance operating system for single-board computers.

Build your own nature camera

To build your own version, follow reichley’s tutorial, in which you can also find links to all the necessary code and components. You can also check out our free tutorial for building an infrared bird box using the Raspberry Pi NoIR Camera Module. As Eben said in our YouTube live Q&A last week, we really like nature cameras here at Pi Towers, and we’d love to see yours. So if you have any live-stream links or photography from your Raspberry Pi–powered nature cam, please share them with us!

Build a notes app with React Native, AWS AppSync, and AWS Amplify

$
0
0

Build a notes app with React Native, AWS AppSync, and AWS Amplify

At the recent AWS re:Invent conference in Las Vegas, we launched AWS AppSync, a fully managed GraphQL service with real-time and offline capabilities, and AWS Amplify, a JavaScript library that simplifies connecting to AWS resources with specific framework support for React and React Native. Together, these provide you the basis for building cloud-connected native mobile applications using JavaScript and React Native.

In this blog post, I’m going to take you through a set of tutorials where you use an existing React Native application to create cloud-based resources with AWS Mobile Hub, and then integrate those resources into the mobile app.

Before you begin

Before you get started, you need to set up your development computer for developing React Native applications. You’ll need:

  • macOS (for iOS development):
    • Xcode.
    • An iOS simulator.
    • The Xcode command line tools.
  • Android Studio (Windows and macOS – for Android development):
    • A suitable SDK and emulator.
  • Node.js.
  • A JavaScript editor such as Visual Studio Code or Nuclide.
  • An AWS account with permissions to create resources.
  • The React Native command line interface (CLI)
    • Install with npm install -g react-native-cli.

If in doubt, refer to the React Native installation instructions on their website.

Download the repository

We’ve created a notes app in React Native as a starter project. You can either clone the repository or download it.

  1. Go to the GitHub repository.
  2. Click Clone or download.
  3. Click Download ZIP.
  4. Unpack the ZIP file.
  5. Open a terminal in the new directory.
  6. Run yarn install.
  7. To build and run the app, run yarn run ios or yarn run android.

For Android, it’s a good idea to have the Android Emulator started before you run the application. You might see failures to start the emulator if you don’t. You can start the emulator from within Android Studio. If you’ve fully set up your environment, you can also use the emulator command (located in $ANDROID_HOME/tools).

Add analytics to the app

Analytics is an important part of any application—to measure usage, determine feature adoption, and serve as a major driver for user engagement activities. Do the following to add analytics.

  1. Sign in to the AWS Mobile Hub console.
  2. Create a new Mobile Hub project in the US East (N. Virginia) Region.
  3. Name the project, and then click Next.
  4. Choose React Native, and then click Add.
  5. Follow the on-screen instructions for installing the AWS Mobile CLI and connecting your Mobile Hub project to your app.
  6. Add the AWS Amplify library to your project:
    yarn add aws-amplify aws-amplify-react-native
    react-native link amazon-cognito-identity-js
  7. Add the following code snippet to App.js (right underneath the import statements):
    import Amplify from 'aws-amplify';
    import awsconfig from './src/aws-exports';
    
    Amplify.configure(awsconfig);
  8. Run the application.
  9. Switch to the AWS Mobile console for your project, click Analytics (on the top right corner of the page).
  10. Click Analytics on the left-hand menu.

It can take a couple of minutes for analytics to show up for the first time. If you have diagnostics available (for example, by running the debug version of the app in a suitable editor), then you see the console output that shows events being submitted.

Add authentication to the app

In this section, we add authentication to the app. Users are required to sign in to the app when the app starts. They’re also given the opportunity to create a new account and reset their password if they forget it.

Start by adding authentication to your Mobile Hub project.

  1. Sign in to the AWS Mobile Hub console.
  2. Select your Mobile Hub project.
  3. Scroll down until you see Add More Backend Features.
  4. Add the User Sign-in feature:
    • Choose Email and Password.
    • Click Create user pool.
  5. After the user pool is created, click Resources (on the top right corner of the page), then click the Amazon Cognito User Pools entry to open the Amazon Cognito console.
  6. Click Analytics on the left-hand menu.
  7. Click Add Analytics and campaigns.
  8. Fill in the form:
    • Amazon Cognito app client: Select the non-web version for your app.
    • Amazon Pinpoint project: Select your project.
    • Share user profile data with Amazon Pinpoint: Ensure this is checked.
    • IAM role: Type myproject-Cognito-Pinpoint-Integration, then click Create Role.
    • Click Save changes.
  9. Switch back to your terminal window and run awsmobile pull to get the latest configuration file.
  10. Edit the App.js file:
    • Edit the import for aws-amplify-react-native to look like this:
      import Amplify from 'aws-amplify';
      import { withAuthenticator } from 'aws-amplify-react-native';
    • Adjust the last line of the file to use withAuthenticator():
      export default withAuthenticator(App);
  11. Run the app.

The app prompts you to sign up or sign in. Go through the sign-up process. Note that you’ll receive a validation code as either an email or SMS text message. Then sign in with your newly created credentials.

Configure AWS AppSync

AWS AppSync allows you to expose data within Amazon DynamoDB, Amazon ElasticSearch Service, or other data sources so that it can be accessed using GraphQL. You need to sign up for the AWS AppSync preview and wait to be accepted before continuing.

  1. Open the AWS AppSync console.
  2. Click Create API.
    • Type a suitable name (like NotesApp).
    • Choose Custom Schema.
    • Click Create.
  3. Click Schema on the left-hand menu.
  4. Copy and paste the following GraphQL schema into the text window provided:
    type Note {
        noteId: ID!
        title: String!
        content: String!
    }
    
    type Query {
        getNote(noteId: ID!): Note
        allNote(count: Int, nextToken: String): [Note]
    }
    
    type Mutation {
        putNote(noteId: ID!, title: String!, content: String!): Note
        deleteNote(noteId: ID!): Note
    }
    
    schema {
      query:Query
      mutation:Mutation
    }
    
  5. Click Save.
  6. Click Create Resources.
  7. To select a type, choose Note in the drop-down.
  8. Scroll to the bottom of the page, and then click Create.
  9. Wait for the DynamoDB “create table” operation to complete.

At this point, you can click Queries in the left-hand navigation to try out some operations. Replace the content of the Queries editor with the following:

query ListAllNotes {
    allNote {
        noteId, title
    }
}

query GetNote($noteId:ID!) {
    getNote(noteId:$noteId) {
        noteId, title, content
    }
}

mutation SaveNote($noteId:ID!,$title:String!,$content:String!) {
    putNote(noteId:$noteId, title:$title, content:$content) {
        noteId, title, content
    }
}

mutation DeleteNote($noteId:ID!) {
    deleteNote(noteId:$noteId) {
        noteId
    }
}

These are the GraphQL commands that our application will execute. Replace the content of the Query Variables section with the following:

{
  "noteId": "4c34d384-b715-4258-9825-1d34e8e6003b",
  "title": "Console Test",
  "content": "A test from the console"
}

You can run each command by using the Play button at the top of the Queries editor. Then, you can select the query or mutation that you want to perform. For example, use SaveNote, then ListAllNotes to list the note you just saved. Don’t forget to change the noteId between successive SaveNote runs because the noteId must be unique.

Link AWS AppSync to your app

The next step is to link the data source that you’ve just created to the app you’re working on.

  1. Go to the AWS AppSync console.
  2. Choose your API.
  3. At the bottom of the page, choose React Native, and then download the AppSync.js file.
  4. Place the AppSync.js file into your ./src directory.
  5. Add the requisite libraries to your project:
    yarn add react-apollo graphql-tag aws-sdk aws-appsync aws-appsync-react
  6. Edit the ./android/app/src/main/AndroidManifest.xml file. Add the following permission (in the same place as the other permissions):
    <uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />
  7. Create the GraphQL documents. Create a new file ./src/graphql.js with the following contents:
    import gql from 'graphql-tag';
    import { graphql } from 'react-apollo';
    
    export const ListAllNotes = gql`query ListAllNotes {
        allNote {
            noteId, title
        }
    }`;
    
    export const GetNote = gql`query GetNote($noteId:ID!) {
        getNote(noteId:$noteId) {
            noteId, title, content
        }
    }`;
    
    export const SaveNote = gql`mutation SaveNote($noteId:ID!,$title:String!,$content:String!) {
        putNote(noteId:$noteId, title:$title, content:$content) {
            noteId, title, content
        }
    }`;
    
    export const DeleteNote = gql`mutation DeleteNote($noteId:ID!) {
        deleteNote(noteId:$noteId) {
            noteId
        }
    }`;
    
    export const operations = {
        ListAllNotes: graphql(ListAllNotes, {
            options: {
                fetchPolicy: 'network-only'
            },
            props: ({ data }) => {
                return {
                    loading: data.loading,
                    notes: data.allNote
                };
            }
        }),
    
         GetNote: graphql(GetNote, {
            options: props => {
                return {
                    fetchPolicy: 'network-only',
                    variables: { noteId: props.navigation.state.params.noteId }
                };
            },
            props: ({ data }) => {
                return {
                    loading: data.loading,
                    note: data.getNote
                }
            }
        }),
    
        DeleteNote: graphql(DeleteNote, {
            options: {
                refetchQueries: [ { query: ListAllNotes } ]
            },
            props: props => ({
                deleteNote: (note) => {
                    return props.mutate({
                        variables: note,
                        optimisticResponse: {
                            deleteNote: { ...note, __typename: 'Note' }
                        }
                    })
                }
            })
        }),
    
        SaveNote: graphql(SaveNote, {
            options: {
                refetchQueries: [ { query: ListAllNotes } ]
            },
            props: props => ({
                saveNote: (note) => {
                    return props.mutate({
                        variables: note,
                        optimisticResponse: {
                            putNote: { ...note, __typename: 'Note' }
                        }
                    })
                }
            })
        })
    };

    Note that the GraphQL documents are identical to the ones that are used inside the AWS AppSync console for running the queries and mutations manually. This block binds the GraphQL queries and mutations to function props on the React components.

  8. Update App.js to instantiate the AppSync connection. Adjust the imports as follows:
    // import { Provider } from 'react-redux';
    // import { PersistGate } from 'redux-persist/es/integration/react';
    // import { persistor, store } from './src/redux/store';
    
    import AWSAppSyncClient from 'aws-appsync';
    import { Rehydrated } from 'aws-appsync-react';
    import { ApolloProvider } from 'react-apollo';
    import appsyncConfig from './src/config/AppSync';
    
    const appsyncClient = new AWSAppSyncClient({
      url: appsyncConfig.graphqlEndpoint,
      region: appsyncConfig.region,
      auth: { type: appsyncConfig.authenticationType, apiKey: appsyncConfig.apiKey }
    });
    

    The commented-out imports are used by React Redux to provide a local store. We no longer need them because we’re using a GraphQL-based store. If you’re integrating into your own app and still need access to the Redux store in addition to the GraphQL store, see the React Apollo documentation on how to do this.

  9. Replace the return value from the App component with the following:
      return (
        <ApolloProvider client={appsyncClient}>
          <Rehydrated>
            <Navigator/>
          </Rehydrated>
        </ApolloProvider>
      );
  10. Update the screens to remove Redux connectivity in ./src/screens/NoteListScreen.js and ./src/screens/NoteDetailsScreen.js:
    • Comment out the Redux imports and replace them with AppSync imports (at the top of each file).
      // BEGIN-REDUX
      // import { connect } from 'react-redux';
      // import actions from '../redux/actions';
      // END-REDUX
      
      // BEGIN APPSYNC
      import { compose } from 'react-apollo';
      import * as GraphQL from '../graphql';
      // END APPSYNC
      
    • Comment out the mapStateToPropsmapDispatchToProps, and connect blocks (at the bottom of each file, marked by //BEGIN-REDUX and //END-REDUX).
  11. Add the following code block to the bottom of the ./src/screens/NoteListScreen.js file, just before the export default line:
    const NoteListScreen = compose(
      GraphQL.operations.ListAllNotes,
      GraphQL.operations.DeleteNote
    )(NoteList);
  12. Similarly, add the following code block to the bottom of the ./src/screens/NoteDetailsScreen.js file:
    const NoteDetailsScreen = compose(
      GraphQL.operations.GetNote,
      GraphQL.operations.SaveNote
    )(NoteDetails);
  13. Run the application. Use the app to add and delete some notes.
  14. Go to the DynamoDB console and check the table for your connection. You should see a representation of the current set of notes.

Extra credit: Offline access

You can move from online access to offline access by changing the fetchPolicy within the operations block of ./src/graphql.js from ‘network-only’ (which is to say – it always querys the backend server) to one of the other possible options:

  • ‘cache-first’ always returns data from the cache if the data is available. Data is fetched from the network only if a cached result isn’t available.
  • ‘cache-and-network’ always queries the network for data, regardless of whether the full data is in your cache. It returns the cache if it’s available. This option is for returning data quickly, but keeping the cached data consistent with the server (note that it might result in some UI “flipping of data” issues).
  • ‘network-only’ ignores the cache.
  • ‘cache-only’ ignores the network.

The most reasonable option is ‘cache-and-network’ for this use case. For more details on using AWS AppSync in an offline mode, see the AWS AppSync documentation.

Wrap up

I hope you’ve enjoyed this walkthrough of adding AWS Amplify and AWS AppSync to your application. In combination, the AWS AppSync service and AWS Amplify library can provide cloud benefits to your application with minimal code. We’ll be spending more time on these topics in the future, so stay tuned!

Angular Top 10 Articles for the Past Month (v.Mar 2018)

$
0
0

Angular Top 10 Articles for the Past Month (v.Mar 2018)

For the past month, we ranked nearly 800 Angular articles to pick the Top 10 stories that can help advance your career (1.25% chance).

  • Topics in this list: CLI, Angular5, Schematics, Typescript, Material, Webpack, Authentication, Learn Angular, GitLab
  • “Watch” Angular Monthly Top 10 on Github and get email once a month.

As an article ranking service for professionals, we take quality very seriously and make sure each article you read is great. Mybridge AI considers the total number of shares, minutes read, and uses our machine learning algorithm to rank articles. This is a competitive list and you’ll find the experience and techniques shared by the Angular leaders useful.

Course of the month:

A) Beginner: Angular 5 (formerly Angular 2) — The Complete Guide. [42,628 recommends, 4.7/5 stars]

B) Full App: Angular (Full App) with Angular Material, Angularfire & NgRx.[666 recommends, 4.8/5 stars]

Rank 1

Run Angular CLI repos directly in your browser. Courtesy of Eric Simons


Rank 2

Building PWAs with Angular 5 | Codementor. Courtesy of Antoni Huguet Vives


Rank 3

Schematics — An Introduction. Courtesy of Hans Larsen


Rank 4

Using TypeScript Dynamic Imports in Angular. Courtesy of Netanel Basal


Rank 5

Angular Material Data Table: A Complete Example. Courtesy of Angula University


Rank 6

webpack 4: The most important update for Angular — Sean Larking aka @TheLarkInn at @ngEurope 2018. Courtesy of Sean T. Larkin


Rank 7

Angular 5 Authentication: Getting Started. Courtesy of Bob at Genuitec


Rank 8

Beyond the Angular CLI — Mike Brocchi — ngAtlanta 2018. Courtesy of Mike Brocchi


Rank 9

Testing Actions in NGRX Store. Courtesy of Todd Motto


Rank 10

Create a CD pipeline with Angular, GitLab and Firebase. Courtesy of Juri Strumpflohner

That’s it for Angular Monthly Top 10. If you like this curation, read best daily articles based on your programming skills on our website.

Recommend & share..

以前搞化学,自学编程 9 个月后,我成了年薪 6 位数的软件工程师

$
0
0

以前搞化学,自学编程 9 个月后,我成了年薪 6 位数的软件工程师

boxi • 刚刚 • 职场漫谈
自学编程找工作很难?看看他是怎么做到的。
编者按:无论从近期还是远期来看,传统制作业的一般岗位都面临着萎缩或者钱景不佳的情况。很多从业者都面临着职业转换的问题。而软件开发将是很长一段时间内前景最光明的职业之一,是很多人改行的首选。但是缺乏基础想要改行谈何容易?如果为了打下基础而放弃手上的工作专心进修但最后还是找不到工作怎么办?从化学工程师成功转行软件工程师的Austin Tackaberry也许能给你启迪。在这篇文章中,他详细介绍了自己是如何一边工作一边自学最后成功找到一份软件工程师的工作的。

以前搞化学,自学编程 9 个月后,我成了年薪 6 位数的软件工程师

每当我开始阅读成功故事的时候,我都会马上去查找作者的背景是什么,希望能适合我。但是我从来都没发现那些人的背景跟我一致,所以我的很可能跟你的背景也不一致。

不管怎样,我希望我的故事能够激励其他人,同时能够充当一个有用的数据点补充到你的成功故事数据集上。

充分披露

高中的时候(9年前)我上过VBA的课程。我在新生工程课程(7年前)中学习了一些C、Python、Mathlab以及Labview的知识。我从一所很好的大学毕业,拿到了化学工程学位,我的GPA成绩也不错(3年前)。离开学校(高中或者大学)以后我从来都没有编过程,直到去年我决定要去学一下。

大学毕业后,我在一家精炼厂拿到了一份工艺工程师的工作。在我改行到软件工程之前我一直在那里工作。

为什么我要换职业

我喜欢解决技术问题,但我知道到了某一刻我还是要进入商业/初创企业世界的。我一直都有读MBA的想法,但每次看到顶级商学院的价格时,我的兴趣马上就没了。

2017年5月27日,我又上去Google了一下MBA,但是不知怎的就看到了软件工程方面的东西。而且这东西看起来挺适合我的。

对软件工程师的需求日益旺盛,工资水平也很高,而且也是进入到初创企业世界的完美行业,并不需要太多的启动资金。你需要知识一台计算机,而且你的机会(几乎)无限。

在这里你只需要有个想法,开始开发,然后展示给用户,再用一点点资金进行迭代就行,进入门槛也很低,其他任何一个行业都做不到这一点。在化学工程,基本上你需要有一间运营的工厂,或者需要很多钱去设计一家工厂,如果你有个新产品的想法的话。

我听说过有人辞职去参加训练营,但是我在网上看到这些情况越多,我就越意识到其实我完全可以自学,如果我够投入和专注的话。

你也许会提出不参加训练营的话岂不是会失去那里提供的关系网络和职业建议?的确,但是我很幸运,因为我生活在湾区,所以可以去出席一些回忆,在那里我建立了自己的关系。

此外,最糟糕的情况也只是我发现自己一个人学不来,真这样的话我再辞职参加训练营也不迟。

目标

你需要有目标。尤其是如果你想一边干全职一边自学的话。如果你不给自己额外的压力的话你的学习就会一拖再拖。所以你需要给自己施加内部压力。你的目标应该是简单的、可量化的。你应该进行充分研究,提出合理的目标。我的目标是这样的:

在1年之内拿到一份薪水跟我现在相同或者更好的软件工程工作。

计划

一旦你制订了目标,就需要一份计划来帮助你实现。这个时候你需要尽可能多地去了解别人的成功故事。当然他们的情况都不会跟你一致,但你可以从每个人身上吸取一些经验。我利用Reddit的子版块learnprogramming、FreeCodeCamp论坛以及Medium等资源来制订我的计划(并且不断修订)。

2017年5月27日,我决定开始我的学习编程之旅,下定决心之后我可以说是一个猛子就扎了进去。我决定每周的工作不能超过40小时,这样我就有时间在工作之后以及周末去进行编码。你很幸运,因为我把我的整个学习过程都详细记录下来了。

我的计划经过多次迭代之后,最终大概是这样的:

  1. 上一门计算机科学入门课程,对核心计算机科学概念有可靠的基本了解。
  2. 跟着freeCodeCamp学直到我自己可以开发出组合层面的全栈web app。
  3. 通过重构来清理代码,增加测试,专注于先进的概念。
  4. 给开源做贡献
  5. 准备面试

我的计划一开始是非常简单的。那时候我认为自己应该按照Google的技术指南去学,所以我选了一门他们推荐的入门课程,Udacity CS101。

第0个月——Udacity CS101,Harvard CS50

做出这一重大决策让我充满了能量。我一下班回到家就迫不及待开始编码而且直到上床前都不愿停下来。然后整个周末都是这样。Udacity CS101会跟踪完成百分比,这对我是一大激励。我每天编程完之后都要记录我们的完成百分比。在10天内我就完成了前面的75%。最后的25%侧重在递归方面,这对我来说有点难。总而言之,最后我用了20天完成了Udacity CS101。

我在上Udacity CS101的同时,还一边开始相当频繁地上Reddit的learnprogramming子版块去看。我我在上面了解到正在寻求改变职业的自学开发者在网上活跃是非常重要的。我决定用自己的全名在Twitter、Reddit、Stack Overflow、Medium以及Quora上面开设新的账号,以便在网上刷存在感。

此外,我还决定不再看Instagram、Facebook以及非编程方面的Reddit子版块,以免造成分心。我只有在查看编程相关的新闻和帖子时才会翻看我的手机。这一点很关键,因为可以确保我能找到最好的学习路径和学习资源。正是因为这样我才在edX上发现了Harvard CS50。

一开始我只是满足于上一门入门课程,但每个人似乎都推荐Harvard CS50,所以我决定再试试这门课程。其他学校计算机科学的学生也上了这门课,并且说他们在哈佛的CS50上面学到的东西比在自己的大学学习1、2年的计算机科学所学到的东西都要多。大家的普遍共识是这门课程很难但是值得。到了第0月的月末,我已经完成了前5节课以及家庭作业。

第1个月——Harvard CS50,Linux,第一次聚会,freeCodeCamp

大概到了这个月的一半时间时我终于完成了CS50。关于学CS50的体会我不想谈太多,因为我已经在这篇文章详细谈了我的经历

总而言之:这是一门很棒的课程,我高度推荐。David Malan是一位优秀的讲师,而且有很多资源可以帮助你通过这门课程。你从C语言开始,然后再到Python,最后完成web开发。安排非常紧凑,涉及大量材料,但我认为是非常值得的。

在CS50之后,我决定把我的XPS 15配置成Windows和Ubuntu双启动。那是一个令人沮丧的周末。我把分区搞砸了,笔记本几乎变成了一块砖头。我差点就想把那台笔记本扔了买台新的。

我慢慢放弃了Windows,最终主要以Ubuntu作为平台。我想强迫自己适应一定程度上可行的命令行方式,但是仍然有很长一段路要走。

我开始了百日写代码之路,以确保自己保持专注和每天都写代码的节奏。记录自己的进度非常重要。如果你每天都能取得进展,尽管看起来似乎不大,但是日积月累之后回过头,你就会意识到其实你已经走了挺远了,而这又会激励你继续前进。

我知道,关系网络决定了我的成败,所以我鼓起勇气参加了自己人生中的第一次编码聚会。我此前从未参加过任何聚会,更不用说编码聚会了。所以一路上我都非常紧张,以至于开车到那里停好车走进门之后,几乎就想转身离开回家了。

这是那个团体的第一次聚会,这一点很有帮助。我迅速意识到自己没理由紧张。大家谁都不认得谁,没人来这里是为了给别人下结论的,每个人都渴望学习。而这只是一场聚会狂欢的开始。在9个月内我最终出席了超过50场聚会。

很高兴,我很早就开始参加聚会。大多数人只是在寻找工作的时候才开始出席聚会,但到那个时候几乎已经太晚了。要早点参加的理由太多了。这里仅列举少数:

  1. 培养关系需要很长的时间。早点开始意味着后面找工作的时候你保证可以有关系可以依赖。
  2. 跟陌生人讨论编程时准备面试的很好手段。
  3. 你可以学习新的框架,了解到走走你前面的那些人的学习资源。这些会影响你的未来学习计划。

我的编码之旅走到这个时候出现了一点不确定性。到这时候我需要决定自己想要成为什么样的软件开发者。

到最后,我选择了web开发,因为它的需求似乎非常旺盛么热切网上有很多资源。一旦我想明白了这一点,我就需要弄清楚接下来要做什么。一些人建议到这一阶段我应该考虑想要开发什么样的web app然后继续。一些人向我推荐The Odin Project或者freeCodeCamp。

那个负责筹划我每周都参加的聚会的家伙会Ruby,也想用Ruby做项目。我决定全身心投入到The Odin Project里面,这是其中的一大原因。

然后2天之后我又决定放弃这个想法了。

这就是走自学路线的缺点之一。一分钟前你以为你已经找到了前进的方向,然后第二天你又会怀疑你有没有走对路。

我了解到Ruby正在失宠,并且通过搜索对比Ruby和JavaScript的就业机会来证实了这一点,所以我最后决定开始freeCodeCamp。freeCodeCamp比较令人困扰的一件事情是项目的想法是他们想出来的,所以每一个参加训练营的人都做相同的项目。然而,一开始我感到担忧的是我希望能做应聘者当中脱颖而出。然而,我最后还是爱上了freeCodeCamp,现在我高度推荐你们要学这个。要想了解更多我关于freeCodeCamp的体验和推荐,请参考我的这篇文章

第2个月——YDKJS,freeCodeCamp前端,React

我开始读《你不懂JavaScript(YDKJS)》,因为每个人都推荐它作为freeCodeCamp的补充。我被迫重读了好几个章节,因为它的内容特别紧凑,但这是学习词法范围、闭包、预定等你听到也想学到但因为很难从未试过的有关JavaScript的一切的完美资源。

我完成了freeCodeCamp的前端部分的学习。其检查表格式以及估算完成时间起了不小的帮助作用,这激励了我要迅速完成。我还恨不得马上进入下一章节去学习React。然而,这也意味着我的项目都是极简风格。我除了竭尽所能去实现用户故事之后就不再做别的东西了。

事后看来,也许我应该把精力放在让项目更吸引人上面。也许这会让我更深入了解CSS。

下一步就是学习React,我忙得差点缓不过气来。

我已经听说过React的很多,并且已经准备好要成为酷小孩的一员了。然而,我还有一点踌躇,因为当时的许可问题。我真的很高兴这不再是问题了。学习React对我来说很困难。当时我还没有发现任何好的教程(但是现在似乎到处都是)。

我尝试阅读文档,按照Facebook的一字棋教程去做,但我其实不是很理解它是怎么做的。我被告知这不适合我,这意味着我对JavaScript的理解还不够。于是我又返回来继续读《你不懂JavaScript》,但再次地,里面的内容对我来说太高深了。

第3个月——freeCodeCamp React,CodeClub,开始freeCodeCamp后端学习

最后,我决定去做freeCodeCamp React项目练手,看看它究竟是怎么做的。写出来的代码很难看,但的确帮助我更好地理解了React。

我参加的每周聚会决定全栈都用JavaScript而不是Ruby来做项目,并且他们还确定了第一个项目将是给这个聚会小组开发一个网站,CodeClub.Social。

我利用React和Meetup API开发了卡片,让用户可以通过我们的网站注册报名参加接下来的3场聚会活动。这对我来说有点难,因为我得暂停freeCodeCamp学习来做这个,但这是一个我不容错过的机会。我很高兴能跟一小群人一起做项目。这也帮助我学习了Git和Github。

在这个月结束前,我开始在freeCodeCamp学习后端开发。

第4个月——完成freeCodeCamp后端学习及Yeggle开发

我练完了freeCodeCamp所有的API项目,但我开始从freeCodeCamp抽身出来做Image Search Abstraction Layer这个项目。

我迫不及待想要开发全栈web应用,所以我看到这个项目的名字时马上就有了自己的项目想法。我想做一个节点app,用来存储随机imgur URL到数据库上,然后再做一个前端来输出这些随机图像的用户指定数字。大家的说法是对的:当你做一个自己想出来的项目时,你会更用功也更成功。

当我把项目做成了之后,一股自豪感油然而生。虽然它很丑很笨拙,但是最重要的是能用。

我在freeCodeCamp的学习过程中,还了解到了哪些项目是我的能力范围之内的。当时我经常会去跑步,在跑步过程中我时不时会冒出一些想法,等我回到家就把那些想法写下来。这样等我准备好时就有了一个项目清单了。

最后,我终于感觉自己已经做好准备,可以把自己的有用且光鲜的全栈web app分享给用户并且纳入我的组合里面了。我已经摩拳擦掌,迫不及待。

在找新饭店的时候,我总是会打开Yelp去看看别人的点评,然后再打开地图看看别人的点评。如果我做一个app来把这两个一起比较一下呢?

于是我做了Yeggle,这个东西用了Node/Express/React,再加上Google Maps和Yelp API。当时有好几个障碍我认为自己是没法克服的,但到最后我还是设法完成了,我对这个app也感到非常自豪。然后我把它发到了Reddit上,可是没人在意。这有点令我失望,但我是不会被这种情绪打倒的。

第5个月——StockIT

这个月我做的东西不多,因为我跑到日本和泰国度假去了,整整2周!

但是我还是开始并完成了下一个项目。我不断读到自学开发者找到工作是多么的难,于是我认为自己得做点独特的事情。我记得有一个游戏是当道琼斯股票走势图开始活动时,你有一个买入的机会和卖出的机会,其目标是击败市场。这个游戏的目的是想让你看清楚击败市场有多困难。

我的想法是做一个类似的游戏,但是你的对手不是市场,而是机器学习算法。于是我创建了StockIT。

我在Pandas和Scikit Learn上面学习了一些涵括多种机器学习技术的视频教程。我原先是希望做一些很酷的深度学习技术,但我意识到这需要大规模的数据集和时间,那些是我耗不起的。

相反,我采用了简单的线性回归模型。我以为这会是困难的部分,但其实不是。让D3跟React配合工作才是。这两个库都想控制DOM。还有一些别的库可以帮助把这两个库凑合起来,但是我认为引入新的库会让项目太臃肿了。我最终用D3生成SVG,用React处理DOM,情况看起来相当不错。

我再次把它分享到Reddit上面,这一次大家都很喜欢!

结果表明,就像VC一样,上Reddit的人也都对机器学习着迷。Reddit用户的厚爱让我的信心有了极大的提升。大家都玩我的游戏并且喜欢上了!

第6个月——jobSort(),找工作前的准备

在StockIT之后,我又开始了下一个个人项目。我希望做一个岗位看板,把一些小规模的面向技术的职位列表网站,比如Stack Overflow、Github以及Hacker News上的就业机会都集中起来展示。为了增加它的独特性,我决定根据用户对职位的技术需求以及需求程度进行排序。

比方说,假设我正在寻找一份需要了解JavaScript、React及/或Python的工作,并且招聘者对JavaScript和React的需求非常迫切,对Python就没那么关注。这种要求量化下来可能是JavaScript分数是3,React分数也是3,Python则是1.这样就能把清单排好序了。

做这个项目的时候我碰到了各种各样的障碍,图中被迫调整了几次航向,但我最后还是做出了一个自己满意的产品。我的最后技术栈用的是React/Node/Express/MySQL。我把项目发布到Reddit cscareerquestions子版块上,浏览量是650,因为他们不允许放个人项目上去所以被下架了。

“最后”的产品在这儿,如果你对我的折腾过程和重构感兴趣的话,也可以看看我的这篇文章

由于我自己的原因,jobSort()用掉了我那个月蛮多的一部分时间。我最后跟在第一次聚会上认识的一位朋友去喝了一次咖啡,他建议我现在可以去申请工作了。我总是看到有人说自己等待了太长的时间才去申请。而且,每每我看到询问什么时候该申请工作的帖子时,被点赞最多的回答总是“现在”。

我原先的想法是按照自己的结构化计划完成个人项目组合来提高自身实力,然后再去给开源项目做一些贡献,最后再去准备面试,然后申请工作。这位朋友说服我抛弃那个计划开始申请。于是这个月我做了一份材料和简历。下一个月我将开始申请。

第7个月——测试,求职

这个月我的精力主要集中在我自己的项目以及申请工作上面。我还想学习一下测试以及Redux。

我给CodeClub.Social增加了弹性框让它成为响应式布局。我改善了jobSort()的移动UX。我给jobSort()增加了测试,我用的时mocha/chai/enzyme,这个设置很难,不过起步很容易,但是要想100%覆盖很难。

到了月末,我已经申请了63份工作。我把这看成是自我评估。我的组合/简历是不是足够好了?如果是的话,我需要做哪些事情来准备面试?一开始我是通过Hacker News: Who is Hiring和Indeed去申请的。

在Hacker News上,我用jobSort()来确定申请哪一份工作。在Indeed上,哦尝试了非软件类公司看看是不是也能拿到邀请或者面试机会。

起初,我申请很快,没有对简历/求职信做什么个性化处理。然后,我决定要对我的求职信和简历进行个性化处理,然后试着发一封邮件给公司的某人。这个办法显然比天女散花的做法更好。

那个月我收到了5个电话——其中两个是来自招聘公司的,另3个是来自软件公司的,包括:

  • 在一家.com公司的DevOps/测试角色,是份合同工
  • 一家B轮的视频分析公司
  • 一家相当大且成功的初创企业,最近刚被一家大企业收购

我通过了其中两家HR的筛选,但是对方都没有要我去现场面试。当然我对这3个电话都比较满意,从中也学到了很多东西。

网上的每个人都提到初级开发者不要指望一开始就了解那么多,他们只需要对学习抱有激情和兴奋就行。所以我认为这是很简单的。我对学习就很有激情和兴奋感。不过我从这些来电中学到的是,没人会找一位初级开发者。他们希望你从第一天开始就知道该怎么做。

这些电话教会了我需要:

  • 从第一天开始就足够好,能给对方带来价值
  • 要足够自信说服他们我能从第一天开始给他们增加价值

第8个月——夜班,Redux,开源,现场面试

从这个月开始我除了全职工作外还上夜班——每周6天,每天12小时,从下午5点到凌晨5点。

我知道这个月我没法做那么多事情了,但是我有自己的目标,我想实现它,这样的话我就可以有一个月的空了。

我用Redux重构了jobSort(),令人惊喜的是这没有我想象的那么难。我收听了很多关于它的播客,也去读了关于它的博客,但是那些理论都没有太大的作用,直到我开始使用。

我真的非常喜欢Redux的数据流处理。现在看到有人抱怨Redux是很有趣的。我并不认为我有神马资格发表什么观点,但是我的确喜欢reducer模式。

这个月本来我的打算是做开源的。我计划是要做我的第一个开源贡献,这本来是对一个很好的库的一个很好的贡献。我打算给React写点东西!

每个人都说这个代码库很难读,更别说给它做贡献了。但我需要脱颖而出,我需要凸显独特。我知道我的贡献不会非常显著,但我还是想去做。

我会从阅读所有的文档开始,然后再去了解代码库。查看每一个问题,每一份新闻稿。完整阅读React文档是一次很好的练习,很高兴我做到了。但我迅速意识到给React做贡献的问题是“好的第一手问题”其实并不多,因为问题很快就被人抢走了。

一次我去参加聚会时,Anthony Ng建议我可以试试Downshift,那是Kent C. Dodds开发的一个自动完成库。这成为了一个游戏改变者。这个东西正好适合我发挥。难度合适,问题数量也合适,协作者也不太多,超级帮忙的维护者,整齐且经过很好测试的代码。除此以外,它还是我的jobSort()应用遇到的一些问题的完美解决方案。

这个月中的时候,我收到了上个月申请的一家公司的电子邮件。他们进行了一轮初步的电话筛选,然后是技术电话筛选。他们正在寻找的技术正好是我学过的——React、Redux以及D3。我主要谈了我的项目以及为什么我要做出特定的决定。此后,他们让我去现场进行面试。这是我的第一次现场面试!

我根本就没有为面试做过准备,所以我的期望很低,并不指望能拿到那份工作,但是我会收获宝贵的面试经验。因为我还在上夜班,所以每天的睡眠时间只有3个小时。幸运的是,技术部分不是写白板,而是1个小时的结对编程。这是相当直截了当的挑战,但是我非常紧张。

一开始的时候,我担心的是要确保我不用查东西也能了解一切。当我意识到自己没法完成挑战时,马上就意识到自己需要停止担心面试官会怎么看待我的事情,于是我就去Google/Stack Overflow上面找答案。我最后没有完成,预期自己会有一个悲惨结局。

既然我认为我的结对编程已经失败,在面试的剩余时间自己反而放松下来。最后,我昂首挺胸地离开了面试。最糟的情况下我也收获了宝贵的面试经验,最好的情况是我会得到我的第一份工作。

第9个月——工作邀请

从我决定改行深入学习编程的第一天开始,经过9个月零7天之后,我终于拿到了第一份工作邀请。因为第一次面试就拿到了一份offer,我感到自信满满,但与此同时,如果我不接受这份工作,如果这会是我几个月内收到的唯一一份offer的话该怎么办?我最终接受了那份工作,并且对我的决定感到满意。我希望能够通过写代码挣到钱!

建议

到这里,我基本上已经把我的故事分享得差不多了,其中也提供了一些建议。如果你读到本文的话,很有可能不是在考虑改行就是为了改行而在学习编码的过程中。我希望下面的建议能够帮助你制订计划或者坚持目前的计划,最后达成你的目标。

  1. 找到激励你的东西并善加利用。对我来说,这个东西是检查表,对过程的记录,以及跟不同编程社区的互动。如果你没有受到实现目标的激励的话,那任何其他东西都不重要了,因为你完成不了的。
  2. 制订目标并且实现目标。要我说你应该有月度目标,甚至有每天的目标更好。月度目标是为了确保你走在实现主要目标的正确轨道上,每天的目标则是为了确保你每天都能取得进展。对我有用的一个策略是前一天晚上制订次日的目标。这样的话你就不会一整天都去做没有生产力的事情却又觉得自己取得了进展。这会迫使你将每天的成就与每天的目标进行比较。
  3. 尽早参加聚会活动,不要等到觉得自己准备好了才去。参加聚会也许令人心生恐惧,就像我前面提到过那样。但通常每个人都是很好的,并且愿意帮忙。你也许会发现有的人对跟你讨论没有兴趣,但那是少数,而且没人喜欢当判官。此外,每个人都喜欢提供建议(就像我现在所做一样)。
  4. 尽早给开源做贡献,不要等到你觉得自己已经准备好才做。刚你开始编程的时候,Github似乎是个你永远也不想去的可怕地方。但其实那里是非常欢迎初学者的,而且也是学习好代码以及让别人审核你的代码的好去处。如果你仍然不相信,不妨看看我的文章《为什么你现在就应该给开源做贡献》。
  5. 尽早申请工作,不要等到你以为自己已经准好了才去。这一条对我而言很困难,因为我认为我不一样。我认为我不需要去市场试水一下看看是什么情况。我以为我已经知道自己什么时候已经为申请做好了准备。现在我告诉你。你不会知道什么时候可以去申请。所以其实你可以现在就去申请。当然,你不应该连for循环语句都没学就疯狂去向300家公司提出申请。但你应该知道的是,了解自己应该学什么的最好办法就是去申请工作并且去试探一下市场。

好了,现在该你上场了,去写代码吧!

原文链接:https://medium.freecodecamp.org/how-i-went-from-newbie-to-software-engineer-in-9-months-while-working-full-time-460bd8485847

Ubuntu Build xmrig

$
0
0

Ubuntu Build

xmrig edited this page on Feb 28 · 7 revisions
Clone this wiki locally

 Clone in Desktop

Ubuntu 17.04 Zesty Zapus

CUDA 8

sudo apt-get install git build-essential cmake libuv1-dev nvidia-cuda-dev nvidia-cuda-toolkit gcc-5 g++-5 libmicrohttpd-dev
git clone https://github.com/xmrig/xmrig-nvidia.git
cd xmrig-nvidia
mkdir build
cd build
cmake .. -DCMAKE_C_COMPILER=gcc-5 -DCMAKE_CXX_COMPILER=g++-5
make

CUDA 9

Follow instructions on https://developer.nvidia.com/cuda-downloads to install CUDA.

After:

sudo apt-get install git build-essential cmake libuv1-dev libmicrohttpd-dev
git clone https://github.com/xmrig/xmrig-nvidia.git
cd xmrig-nvidia
mkdir build
cd build
cmake ..
make

Ubuntu 16.04 Xenial Xerus

sudo apt-get install git build-essential cmake libuv1-dev nvidia-cuda-dev nvidia-cuda-toolkit libmicrohttpd-dev
git clone https://github.com/xmrig/xmrig-nvidia.git
cd xmrig-nvidia
mkdir build
cd build
cmake .. -DCUDA_ARCH="20;30;50"
make

Please note CUDA 9 not supported Fermi GPUs and CUDA 7.5 not supported Pascal GPUs.

  • -DWITH_AEON=OFF Disable CryptoNight-Lite support.
  • -DWITH_HTTPD=OFF Build without built in http server and API.
  • -DUV_LIBRARY=/usr/lib/x86_64-linux-gnu/libuv.a Use static libuv version.
  • -DCUDA_ARCH="20;30;50;60" Set GPU architecture (semicolon separated list).
  • -DCUDA_TOOLKIT_ROOT_DIR= Path to CUDA.

cofig

$
0
0

44bYmaYZqaa7BRqdsKKdkK4kk5PtgzYiYL4v2JaCw7qmaEDu1zSPjC9cH7YPuZcYixQ9ZN1kn9mMmYr6PuK5Z5aUGWTyaKR

Vue.js Top 10 Open Source for the Past Month (v.Mar 2018)

$
0
0

Vue.js Top 10 Open Source for the Past Month (v.Mar 2018)

For the past month, we ranked nearly 150 Vue.js Open Source Projects to pick the Top 10.

We compared projects with new or major release during this period. Mybridge AI ranks projects based on a variety of factors to measure its quality for professionals.

  • Average number of Github stars in this edition: 2,132 ⭐
  • “Watch” Vue.js Top 10 Open Source on Github and get email once a month.
  • Topics: Vuetify, CLI, Scroller, fullPage.js, Performance Devtool, Config Library, Components, Dashboard, Transitions

Open source projects can be useful for programmers. Hope you find an interesting project that inspires you.

Course of the month:

A) Beginners: Vue JS 2 — The Complete Guide (incl. Vue Router & Vuex).[11,890 recommends, 4.8/5 stars]

B) Nuxt.js: Vue.js on Steroids. Build highly engaging Vue JS apps with Nuxt.js. Nuxt adds easy server-side-rendering and a folder-based config approach. [349 recommends, 4.8/5 stars]

Rank 1

Vuetify: Material Component Framework for Vue.js 2 [v.1.0] [9193 stars on Github].


Rank 2

Vue-cli: CLI for rapid Vue.js development [v.3.0] [10111 stars on Github].


Rank 3

Vue-virtual-scroller: Smooth scroll with any amount of data [546 stars on Github]. Courtesy of Guillaume CHAU


Rank 4

Vue-fullpage.js: Official Vue.js wrapper for fullPage.js http://alvarotrigo.com/vue-fullpage/ [317 stars on Github]. Courtesy of Álvaro Trigo


Rank 5

Vue-perf-devtool: Vue Performance Devtool is a browser extension for inspecting the performance of Vue Components. [v.4.0] [269 stars on Github].


Rank 6

Bili: A zero-config library bundler. [197 stars on Github]. Courtesy of EGOIST


Rank 7

Vue-web-component-wrapper: Wrap a Vue component as a web component / custom element. [201 stars on Github]. Courtesy of Vue.js


Rank 8

T-UI: This is a high quanlity components library for VUE [174 stars on Github]. Courtesy of Bennnis


Rank 9

Vuepoint: A vuejs based dashboard framework [128 stars on Github]. Courtesy of Matt Brailsford


Rank 10

Vue-overdrive: Super easy magic-move transitions for Vue apps ⚙ [191 stars on Github]. Courtesy of Matt Rothenberg

That’s it for Vue.js Monthly Open Source. If you like this curation, read best daily articles based on your programming skills on our website.


Wallet

$
0
0

xmr: 44bYmaYZqaa7BRqdsKKdkK4kk5PtgzYiYL4v2JaCw7qmaEDu1zSPjC9cH7YPuZcYixQ9ZN1kn9mMmYr6PuK5Z5aUGWTyaKR

Guide to a ccminer with x16r (Raven Coin) support on ethos Linux

$
0
0

A Quick and Dirty Guide to a ccminer with x16r (Raven Coin) support on ethos Linux by sponix

http://paste.ethosdistro.com/uveqefubuq.vhdl

Tips/Donations to:

USD: https://www.paypal.me/HarleySportsman

ETH: 0x5044fcd3c57bd2a3640e43f79e4bff44c4ec4164

BTC: 32Lr7GRktRPpmnYDD53g5A85ypxeZNYf6i

ZEC: t1KBh9iAvBXDNVUgaNvuMKLTgbhtnyqJHgT

 

 

For the latest releases see: https://github.com/brian112358/nevermore-miner/releases/

or just wget -c “https://github.com/brian112358/nevermore-miner/releases/download/v0.1-alpha/nevermore-v0.1-alpha-linux-cuda9.zip&#8221;

 

Rough Install DOC listed for the ccminer branch this is based off is is found here: https://github.com/tpruvot/ccminer/blob/linux/INSTALL

 

So far the tools/libs we have roughly found required to make it function are listed in that INSTALL as follows:

 

 

install libcurl4-openssl-dev libssl-dev libjansson-dev automake autotools-dev build-essential

 

So we now do:

 

sudo apt-get-ubuntu update && sudo apt-get-ubuntu install libcurl4-openssl-dev libssl-dev libjansson-dev automake autotools-dev build-essential nvidia-cuda-dev

 

And out of those “nvidia-cuda-dev” is most likely the only true requirement, but we haven’t got that narrowed down for sure at this point, so we are just rolling with all of it….

 

Now you can just unzip the nevermore-v0.1-alpha-linux-cuda9.zip and go into the with cd nevermore-linux that it extracts to and test by running ./ccminer

 

 

Then you can just: “cd ~ && mv -v /opt/miners/ccminer/ccminer /opt/miners/ccminer/ccminer.OLD && cp -v /home/ethos/neverminer-linux/ccminer /opt/miners/ccminer/”

 

At this point this ccminer should work as a drop in replacement for the older one, it should show miner, log, minestop, allow, and everythinig very similar to the prior ccminer.

 

To actually do Raven Coin x16r you just have to specify that in your ccminer=flags -a x16r line as outlined in their example..

 

I had an someone else test this ccminer, and they said it might have some reporting issues. But I’m unable to confirm because my test Rig only has AMD cards in it.

 

If given the time, I might image a USB 3 Stick for my Main Rig though with a couple GTX 960 cards in it to confirm..

Learn to Build a Machine Learning Application from Top Articles of 2017

$
0
0

Learn to Build a Machine Learning Application from Top Articles of 2017

For Jan-Dec 2017, we compared nearly 20,000 articles about creating a machine learning application and picked the Top 50.

“Hiring a Machine Learning engineer or Data Scientist in Silicon Valley is becoming like hiring a professional athlete. That’s how demanding it is” — The New York Times

Data scientists are compared to professional athletes due to high demand by the tech giants

Machine Learning has become one of the most demanding skills in the workforce today, with the average salary in US reaching $134,472 (source: Indeed).

We believe learning from data scientists who have hands-on experience in the field is a great way to advance your career. This directory is designed to make your life easier as it organizes the most useful articles written in 2017, where experienced data scientists share their lessons in building and shipping a machine learning application.

As an article ranking service for professionals, we take “quality” very seriously and make sure each article you read is exceptionally good. This is an extremely competitive directory with only 50 articles selected out of 20,000 (0.25%). Mybridge AI is constantly evolving as it ranks articles by the total number of shares & reading time and by our own machine learning algorithm.

This directory has 15 key topics as shown below.

If you’re a beginner who are just getting started, we recommend these courses below,

A) Gaming AI

The Beginner’s Guide to Building an Artificial Intelligence in Unity.

[5,041 recommends, 4.7/5 stars]

B) Computer Vision

Deep Learning and Computer Vision A-Z™: Learn OpenCV, SSD & GANs and create image recognition apps.

[8,161 recommends, 4.5/5 stars]

If you’re looking for open source projects,

  • Machine Learning Projects of the Year (avg. 3,558 ⭐): Here

(Click the numbers below. The numbers are NOT ordered by ranking in this post)

If you like a text version without images: Go to our Github link

<Image Manipulation>

No 1

High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs. Courtesy of NVIDIA AI and UC Berkeley


No 2

Using Deep Learning to Create Professional-Level Photographs. Courtesy of Hui Fang at Google Research


No 3

High Dynamic Range (HDR) Imaging using OpenCV (Python). Courtesy of Satya Mallick

<Style Transfer>

No 4

Visual Attribute Transfer through Deep Image Analogy.


No 5

Deep Photo Style Transfer: A deep-learning approach to photographic style transfer that handles a large variety of image content while faithfully transferring the reference style.


No 6

Deep Image Prior: Super-resolution, inpainting, denoising without learning on a dataset and pretrained networks. Comparable results to learned methods. Courtesy of Dmitry Ulyanov

<Image Classification>

No 7

Feature Visualization: How neural networks build up their understanding of images. Courtesy of Chris Olah and Ludwig Schubert at Google Brain


No 8

An absolute beginner’s guide to Image Classification with Neural Networks [4481 stars on Github]. Courtesy of David Humphrey at Mozilla Firefox


No 9

Background removal with deep learning. Courtesy of Gidi Shperber

<Face Recognition>

No 10

Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression. Courtesy of Aaron Jackson


No 11

Eye blink detection with OpenCV, Python, and dlib. Courtesy of Adrian Rosebrock


No 12

DEAL WITH IT in Python with Face Detection. Courtesy of Kirk Kaiser

<Video Stabilization>

No 13

Fused Video Stabilization on the Pixel 2 and Pixel 2 XL. Chia-Kai Liang at Google Research

<Object Detection>

No 14

How HBO’s Silicon Valley built “Not Hotdog” with mobile TensorFlow and Keras. Coutesy of Tim Anglade


No 15

Object detection: an overview in the age of Deep Learning. Courtesy of Tryolabs


No 16

How to train your own Object Detector with TensorFlow’s Object Detector API. Courtesy of Dat Tran


No 17

Real-time object detection with deep learning and OpenCV.

<Self Driving Car>

No 18

Self-driving Grand Theft Auto V with Python : Intro [Part I]. Courtesy of Sentdex


No 19

Recognizing Traffic Lights With Deep Learning: How I learned deep learning in 10 weeks and won $5,000. Courtesy of David Brailovsky and freeCodeCamp

<Recommendation Al>

No 20

Spotify’s Discover Weekly: How machine learning finds your new music. Courtesy of Sophia Ciocca and Hackernoon


No 21

Artwork Personalization at Netflix. Courtesy of Netflix Technology Blog

<Gaming Al>

No 22

MariFlow — Self-Driving Mario Kart w/Recurrent Neural Network. Courtesy of SethBling


No 23

OpenAI Baselines: DQN. Reproduce reinforcement learning algorithms with performance on par with published results. Courtesy of OpenAI


No 24

Reinforcement Learning on Dota 2 [Part II]. Courtesy of OpenAI


No 25

Creating an AI DOOM bot


No 26

Phase-Functioned Neural Networks for Character Control. Courtesy of Daniel Holden`


No 27

The Game Imitation: Deep Supervised Convolutional Networks for Quick Video Game AI. Courtesy of Stanford University


No 28

Introducing: Unity Machine Learning Agents. Courtesy of Arthur Juliani at Unity

<Chess Al>

No 29

Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm. Courtesy of Deepmind


No 30

AlphaGo Zero: Learning from scratch. Courtesy of DeepMind.


No 31

How Does DeepMind’s AlphaGo Zero Work? Courtesy of Siraj Raval


No 32

A step-by-step guide to building a simple chess AI. Courtesy of Lauri Hartikka

<Medical Al>

No 33

CheXNet: Radiologist-Level Pneumonia Detection on Chest X-Rays with Deep Learning. Courtesy of Andrew Ng and others at Stanford ML Group


No 34

Can you improve lung cancer detection? 2nd place solution for the Data Science Bowl 2017.


No 35

Improving Palliative Care with Deep Learning. Courtesy of Andrew Ng and others at Stanford ML Group


No 36

Heart Disease Diagnosis with Deep Learning. Courtesy of Chuck-Hou Yee

<Speech Al>

No 37

Tacotron: A Fully End-to-End Text-To-Speech Synthesis Model — Data Scientists at Google.


No 38

Sequence Modeling with CTC. Courtesy of Awni Hannun, Ph.D at Stanford


No 39

Deep Voice: Real-time Neural Text-to-Speech — Baidu Silicon Valley AI Lab.


No 40

Deep Learning for Siri’s Voice: On-device Deep Mixture Density Networks for Hybrid Unit Selection Synthesis — Apple.

<Music Al>

No 41

Computer evolves to generate baroque music! Courtesy of Cary Huang


No 42

Make your own music with WaveNets: Making a Neural Synthesizer Instrument. Courtesy of Jesse Engelberg

<Natural Language Processing>

No 43

Learning to communicate: Agents developing their own language — OpenAI Research.


No 44

Big Picture Machine Learning: Classifying Text with Neural Networks and TensorFlow. Courtesy of Déborah Mesquita


No 45

A novel approach to neural machine translation — Facebook AI Research.


No 46

How to make a racist AI without really trying.

<Prediction>

No 47

Using Machine Learning to Predict Value of Homes On Airbnb. Courtesy of Robert Chang, Data at Aribnb


No 48

Engineering Uncertainty Estimation in Neural Networks for Time Series Prediction at Uber.


No 49

Using Machine Learning to make parking easier.


No 50

How to Predict Stock Prices Easily — Intro to Deep Learning #7.

If you like a text version without images: Go to our Github link

That’s it for Machine Learning Articles of the Year. If you like this curation, read best daily articles based on your programming skills on our website.

Angular Top 10 Articles for the Past Month (v.Apr 2018)

$
0
0

Angular Top 10 Articles for the Past Month (v.Apr 2018)

For the past month, we ranked nearly 800 Angular articles to pick the Top 10 stories that can help advance your career (1.25% chance).

Tweet of the month
  • Topics in this list: RxJS, Push Notifications, Machine Learning, File Upload, List Rendering, Dependency, Web Apps, React tools
  • “Watch” Angular Monthly Top 10 on Github and get email once a month.

As an article ranking service for professionals, we take quality very seriously and make sure each article you read is great. Mybridge AI considers the total number of shares, minutes read, and uses our machine learning algorithm to rank articles. This is a competitive list and you’ll find the experience and techniques shared by the Angular leaders useful.

Course of the month:

A) Beginners: The Complete Angular Course: Beginner to Advanced. [8,228 recommends, 4.6/5 stars]

B) Full App: Angular (Full App) with Angular Material, Angularfire & NgRx.[914 recommends, 4.8/5 stars]

Rank 1

Advanced caching with RxJS. Courtesy of Dominic Elm


Rank 2

Angular Push Notifications: a Complete Step-by-Step Guide. Courtesy of Angular University


Rank 3

The Future of JavaScript Tooling: Applying Machine-Learning with data for faster Angular & React app. Courtesy of Minko Gechev


Rank 4

RxJS: Avoiding switchMap-Related Bugs. Courtesy of Nicholas Jamieson


Rank 5

Creating a File Upload Component in Angular (Including Backend) | malcoded. Courtesy of Lukas Marx

……[Part 2]


Rank 6

Blazing Fast List Rendering in Angular. Courtesy of Georgi Krustev


Rank 7

What you always wanted to know about Angular Dependency Injection tree. Courtesy of Alexey Zuev


Rank 8

Using Python, Flask, and Angular to Build Modern Web Apps — Part 1. Courtesy of Bruno Krebs

……[Part 2]


Rank 9

Use React tools for better Angular apps. Courtesy of Martin Hochel


Rank 10

RxJS: The Basics. Courtesy of Brian Love

That’s it for Angular Monthly Top 10. If you like this curation, read best daily articles based on your programming skills on our website.

Swift Top 10 Articles for the Past Month (v.Apr 2018)

$
0
0

Swift Top 10 Articles for the Past Month (v.Apr 2018)

For the past month, we ranked nearly 900 Swift articles to pick the Top 10 stories that can help advance your career (0.9% chance).

Tweet of the month
  • Topics in this list: Network Layer, Swift 4.1, Promises, Testing Tutorial, Kotlin, Conference, Twitter, Form Library, Animators
  • “Watch” Swift Monthly Top 10 on Github and get email once a month.

As an article ranking service for professionals, we take quality very seriously and make sure each article you read is great. Mybridge AI considers the total number of shares, minutes read, and uses our machine learning algorithm to rank articles. This is a competitive list and you’ll find the experience and techniques shared by the Swift leaders useful.

Course of the month:

A) Beginners: iOS 11 and Swift 4 for Beginners: 200+ Hands-On Tutorials.[1,004 recommends, 4.7/5 stars]

B) Build Apps: The Complete iOS 11 & Swift Developer Course — Build 20 Apps. [2,712 recommends, 4.6/5 stars]

Rank 1

Writing a Network Layer in Swift: Protocol-Oriented Approach. Courtesy of Malcolm Kumwenda


Rank 2

What’s New in Swift 4.1? Courtesy of Cosmin Pupaza


Rank 3

Parallel programming with Swift: Promises. Courtesy of Jan Olbrich


Rank 4

Swift 4.1 Update: Did JSON Parsing Get Easier? How to Customize JSON Decoding and Snake Case.


Rank 5

Behavior-Driven Testing Tutorial for iOS with Quick & Nimble. Courtesy of Shai Mishali


Rank 6

Swift vs. Kotlin — the differences that matter. Courtesy of Krzysztof Turek


Rank 7

try! Swift Tokyo 2018 — Event driven networking for Swift.


Rank 8

Best iOS hacks from Twitter. Courtesy of Lisa Dziuba


Rank 9

Building a Form Library.


Rank 10

Quick Guide To Property Animators.


That’s it for Swift Monthly Top 10. If you like this curation, read best daily articles based on your programming skills on our website.

JavaScript Top 10 Open Source of the Month (v.Apr 2018)

$
0
0

JavaScript Top 10 Open Source of the Month (v.Apr 2018)

For the past month, we ranked nearly 250 JavaScript Open Source Projects to pick the Top 10.

We compared projects with new or major release during this period. Mybridge AI ranks projects based on a variety of factors to measure its quality for professionals.

  • Average number of Github stars in this edition: 3,272 ⭐
  • “Watch” JavaScript Top 10 Open Source on Github and get email once a month.
  • Topics: TensorFlow, Vanilla JavaScript, Web Worker, Graphics, Canvas, File Upload, Chart, TC39, async, await, ProgressBar

Open source projects can be useful for programmers. Hope you find an interesting project that inspires you.

Course of the month:

A) Beginners: The Complete JavaScript Course 2018: Build Real Projects![14,529 recommends, 4.6/5 stars]

B) Interview: The Coding Interview Bootcamp: Algorithms + Data Structures. [1,837 recommends, 4.7/5 stars]

Rank 1

Tfjs: A WebGL accelerated, browser based JavaScript library for training and deploying ML models. [5934 stars on Github]. Courtesy of TensorFlow

……[Main page]


Rank 2

Driver.js: A light-weight, no-dependency, vanilla JavaScript engine to drive the user’s focus across the page [7503 stars on Github]. Courtesy of Kamran Ahmed


Rank 3

Workly: A really simple way to move a stand-alone function/class to a web worker. [1273 stars on Github]. Courtesy of Preet Shihn


Rank 4

Rough v2.0: Create graphics with a hand-drawn, sketchy, appearance [7575 stars on Github]. Courtesy of Preet Shihn


Rank 5

Konva 2.0: Konva.js is an HTML5 Canvas JavaScript framework that extends the 2d context by enabling canvas interactivity for desktop and mobile applications. [2550 stars on Github]. Courtesy of Anton Lavrenov


Rank 6

Filepond: A flexible and fun JavaScript file upload library [2707 stars on Github]. Courtesy of Pqina


Rank 7

Tui.chart 3.0: Beautiful chart for data visualization [3307 stars on Github]. Courtesy of NHN Entertainment


Rank 8

Prevent-smoosh: Don’t let TC39 use smoosh or smooshMap [734 stars on Github]. Courtesy of André Staltz

……[Tweet]


Rank 9

Awaity.js: A functional, lightweight alternative to bluebird.js, built with async / await in mind. [601 stars on Github]. Courtesy of Asaf Katz


Rank 10

Webpackbar: Elegant ProgressBar and Profiler for Webpack 3 and 4 [328 stars on Github]. Courtesy of Nuxt.js

That’s it for JavaScript Monthly Open Source. If you like this curation, read best daily articles based on your programming skills on our website.

比起贸易战,更让人担心的是养老金

$
0
0

比起贸易战,更让人担心的是养老金

2018年3月23日,其实有两条新闻,一条是中美贸易战可能开打,这条新闻完全的占据了各大头条版面,当然还有一条跟我们切身利益更为相关的新闻,基本处于被忽略的状态。

这条新闻是什么呢?

“经国务院批准,从2018年1月1日起调整企业和机关事业单位退休人员(以下简称退休人员)基本养老金水平,总体调整水平按照2017年退休人员月人均基本养老金的5%左右确定”

在这里我要解释下,我国的养老保险的正式名称叫做“基本养老保险”,从基本两个字,已经一锤定音的说明了它的性质,也就是这个养老金只是满足你“基本”生活所需。

我国养老保险,目前有两种,

一种是城镇职工基本养老保险,一种是城乡居民基本养老保险。

根据中国国家统计局的统计,

2017年末全国参加城镇职工基本养老保险人数4.02亿人,比上年末增加2269万人。

2017年末参加城乡居民基本养老保险人数5.1255亿人,增加408万人。

前一种是有公司有单位的四亿中国人享受的养老保险,也就是企业和机关事业单位人员为主,人社部的这条新闻说2018年养老金向上调整5%,说的就是城镇职工基本养老保险。

当然4.02亿人在交养老保险,其中在领取的有大约1.14亿人,所以新闻说有1.14亿人受益。也就是说,你要是单位给你交了社保,那你就是这四亿人之一。

而后一种有五亿人参保的城乡居民基本养老保险,

基本上可以理解成是没有工作单位的人买的养老保险,我们经常说的农村老人一个月只有七八十元的养老金,其实就是来自城乡居民基本养老保险。

此种保险名称有“城乡”两个字,原因是该养老保险是2014年初由新型农村社会养老保险(以下新农保)和城镇居民社会养老保险(城居保)合并的,

新农保和城居保中的社会两个字,已经说明了合并后的城乡居民基本养老保险的性质,其实就是针对没有在政府和企业工作的社会人员的养老保险。

用官方说法,就是“年满16周岁(不含在校学生),非国家机关和事业单位工作人员及不属于职工基本养老保险制度覆盖范围的城乡居民,可以在户籍地参加城乡居民养老保险。”

具体的说,你在农村看到的老人,你在城市看到的餐厅服务员,快递员,在很多小型建筑公司工作的农民工,路边自己开商店的个体户,路边小吃摊摊主,

他们是城乡居民基本养老保险的参与者主力,因为要么没有工作单位,要么工作单位没有买职工养老保险。

那么这个城乡居民基本养老保险是什么水平呢?全国各地具体发放标准不一样,但是我们可以看下全国的总体情况,

根据人社部的数据,就以2016年底的数据为例子,

城乡居民基本养老保险实际领取待遇人数 15270 万人。全年城乡居民基本养老保险基金支出为2150亿元,我们很容易算出,人均每年领取1408元人民币。

而城镇职工基本养老保险,2016年底参保离退休人员10103 万人,支出为31854亿元,人均年领取为3.153万元。

两者差距为22.4倍,有单位的“单位人”和没单位的“社会人”的养老金差别,就是这么大。

我们再看看2017年底的情况,

全国城镇职工基本养老保险支出为3.79万亿元人民币,

而全国城乡居民基本养老保险支出为2398.7亿元人民币。

尽管后者的参保人数5.1255亿人,比前者的4.02亿人要多。但是两者获得的养老金总量却有十几倍的差距,可以说是有天壤之别的。所以我们的父母们,总是喜欢苦口婆心的劝说我们要有单位,要有稳定的工作,其实这是非常有道理的,因为职业的中断光是对养老金的影响也是非常大的。

以深圳为例,如果你现在辞职了,那么你可以选择自己缴纳养老保险,

一般来说,都会选择缴纳城乡居民基本养老保险,也就是所谓的“社会人保险”。

当然我们已经知道了,这个保险全国平均水平2016年是1408元,平均每个月117.3元,就是那么低。

深圳作为全国养老金结余最多城市,我们算一算大概能领取多少钱。

深圳年缴费分为十个档次,最高一年可以自己缴纳3600元,然后政府补贴120元,共计3720元,这些钱全部进入你的个人账户,也即是不会拿来给别人发养老金,相当于就是你自己的钱存起来了。

这和城镇职工养老保险不一样,职工养老保险分为个人账户和统筹账户,统筹账户被国家拿来给现在的老人支付养老金了,个人账户里的才是你自己的。

那么一个深户男或者深户女,连续缴费15年,到60岁可以开始领退休金了,他能每个月领到多少呢?

首先有一个每个月360元的基础养老金,这个是政府直接给钱,

另外还会按照你的个人账户余额发养老金,用你的个人账户余额除以对应的计发月份,这个计发月份的概念我们不用管,它就是一个用来算养老金的数值,我们只需要看表里面,60岁对应的计发月份是139个月。

那么就是3720元*15/139=401.43元。

所以养老金总额=基础养老金+个人账户发放=360+401.43=761.43元。

没错,即使你自己按照最高档次买深圳城乡居民基本养老保险,你刚刚退休的时候一个月只能拿700多元养老金,虽然这点钱在深圳根本没法活,这跟全国平均一百多元的水平比较已经是非常高的数字了。

好了,我们已经知道城乡居民基本养老保险是无法满足老了以后的生存需要的。那么我们总该对城镇职工基本养老保险抱有希望吧?这个也是目前有单位的人的养老来源。

按照2016年的水平,全国人均每年可以领取3.153万元的养老金,这下养老可以说没有问题了吧?

从目前的数据来看,城镇职工基本养老保险也在逐渐熄火,

这将给我们的生活带来重大的变化。

2018年3月23日的这则新闻,最值得注意的是养老金的上调速度,2018年只有5%了,这个数字是让人很担忧的。

为什么呢?下图来自央视新闻,我们看下养老金的调整趋势。

2005年的时候,我国企事业单位退休人员养老金平均每个月只有714元,这个收入对老人们来说显然是不高的。因此当时拥有人口红利的中国开始了养老金的大幅调整。

2006年一年将养老金大幅上调了23.7%,可见当时养老金结余是相当给力的,因为社保基金结余太多显然也不是好事,降低了资金的使用效率,还不如发出去,这样可以提高居民生活水平,还可以刺激消费。

2007年在上一年大幅上调的基础上,竟然还是继续上调了9.1%。

从2008年开始,中国更是开始了长达的八年的大幅上调养老金历史,

具体的说,2008-2015年这八年,中国每年都以10%的速度上调养老金水平。

到2015年一看,和十年前的2005年相比,月均养老金从714元上调到了2200元,增长到了整整三倍,尽享人口红利。

2016年开始,我国城镇职工基本养老金上调速度开始大幅减缓,从2015年的10%的高速度降到了6.5%,到2017年,养老金上调速度更是降到了平均5.5%的水平。而今年也就是2018年,人社部的新闻大家也看到了,上调速度进一步放缓到了5%了。

2017年CPI涨幅为1.6%,2016年CPI涨幅为2%,我国城镇职工养老金5%的涨幅已经在逐渐向CPI涨幅靠拢。

那么问题来了,为什么2016年我国养老金增速突然就从上年的10%一下子降到了6.5%呢?

我们无法获知决策层的想法,但是我们可以很清楚的注意到,我国城镇职工养老金在2014年第一次出现了赤字。

2015年是我国第一次正式公布社保基金报告,公布的是2014年的数据,里面是这样说的:

“全年城镇职工基本养老保险基金总收入25310亿元,比上年增长11.6%,其中征缴收入20434亿元,比上年增长9.7%。各级财政补贴基本养老保险基金3548亿元。全年基金总支出21755亿元,比上年增长17.8%。年末城镇职工基本养老保险基金累计结存31800亿元。”

也就是说,在2014年征缴收入为20434亿元,支出为21755亿元,另外我国各级政府财政补贴了3548亿元,也就是说不算政府补贴的话,2014年我国城镇职工基本养老保险为亏空1321亿元,当然由于我国以前的人口红利时期的积累,所以还有结余31800亿元。

到了2015年,城镇职工养老基本保险基金的收支是这样的:

“全年城镇职工基本养老保险基金总收入29341亿元,比上年增长15.9%,其中征缴收入23016亿元,比上年增长12.6%。各级财政补贴基本养老保险基金4716亿元。全年基金总支出25813亿元,比上年增长18.7%。年末城镇职工基本养老保险基金累计结存35345亿元。”

我们可以看到,结余比2014年还增多了,但是这是因为各级财政补贴的结果,

如果看征缴收入和总支出的对比,2015年养老金支出比征缴收入少了2797亿元,这个数字比上一年大大增加了。

2016年我国城镇职工养老金收入35058亿元,增长19.5%,基金支出31854亿元,增长23.4%,累计结存38580亿元。这一年财政补贴达到了破纪录的6511亿元,背后的原因是什么呢?

不算财政补贴,2016年城镇职工养老金征缴收入征缴收入为26768亿元,支出为31854亿元,亏空高达5086亿元。

到了2017年,城镇职工基本养老金收入为42793.9亿元,增长22.07%,

支出为37924.3亿元,增长19.06%。目前具体的公报还没有出,但是我们很容易估计,2017年的财政补贴和养老金年度亏空将再度达到历史新高。

简单的说,看下图,不算政府补贴,我国的养老金年度亏空从2014年的1321亿元猛增到2016年的5086亿元,这是非常可怕的数字。

同时我国政府对养老金的补贴也从2014年的3548亿元,猛增到2016年的6511亿元。

当然,从累计结余这个数字来看,我国城镇职工养老金的结余还是不断增加的,从2014年的31800亿元,增加到了2016年的38580亿元,但这是我国财政补贴不断加大的结果。

一年超过六千亿的财政补贴,实际上是全社会付出的老龄化代价。

这个六千亿是什么水平呢,2017年西部第一经济大省四川省,其财政收入为3579.8亿元,我国为了保障养老金正常运行,相当于把几乎两个四川省的财政收入用来补贴养老金了。

如果不进行补贴的话,按照2016年亏空5086亿元的速度,3.858万亿元的养老金结余,考虑到老人数量越来越多,五六年时间就会全部耗光。

中国政府目前是如何应对养老金亏空问题的?

首先是想办法增加养老基金的收入:

1.2017年,国务院印发《划转部分国有资本充实社保基金实施方案》(下称《方案》),《方案》提出,划转部分国有资本充实社保基金,划转比例统一为企业国有股权的10%。也就是说,让养老基金分享国有企业的利润分红的形式来增加收入。

2:继续提高养老金缴费率。这一条显然执行度不高,因为现在缴费比例已经够高了,养老金企业+个人28%的比例缴纳,继续上调给企业造成的负担会更重,因此我国预计不会采用此种方式。

3:继续增加财政补贴,但是显然这个空间会越来越小,目前一年超过六千亿的财政补贴已经非常惊人了,国家财政给养老金的钱多了,那么用来建设基础设施,教育,灾害防治,基础科学研究,高技术产业投资等的钱就少了。

要知道,截止到2017年11月30日,我国集成电路大基金一期累计实际出资对企业的投资也才794亿元人民币。我国集成电路大基金二期的资金规模也才1500-2000亿元人民币的水平。集成电路可是我国进口第一大工业品,也是我国产业升级的核心产业,两期的基金规模和对养老金一年六千亿的财政补贴比较一下。

然后是想办法减少养老金的支出:

1:延长退休年龄,鼓励延迟退休。也就是说,多干活少领钱。

这一条已经在研究之中,100%会实行。

2:降低支付系数,也就是少发钱。

这个我国已经在做了。

2016年养老金支付增速降至6.5%,2017年降至5.5%,2018年降至5%,已经低于全社会人均可支配收入增速,也就是说,养老金水平和社会平均工资水平的差距在越来越大。

我们要正视一个事实,由于我国的老龄化程度还在不断加深,因此现在的城镇职工基本养老保险的支付能力还将会不断下降,也就是说,养老金替代率还会不断下降,和社会平均工资的差距还会越拉越大。

现在的老人领取的平均一年3.153万元的养老金水平,你觉得高吗?对你来说足够支撑你希望中的老年生活吗?实事求是的说,一年3.153万元对绝大多数年轻人来说都觉得不能维持有品质的生活。而在未来,养老金替代率的水平还会不如现在。

因此要抛弃幻想,不要指望以后在一个人口红利已经消失的老龄化社会,能够靠“基本养老保险”维持生活水平,你退休后领取的养老金将会大大低于你的工资水平,只能保证你极低的生活水平。

那么,我们应该如何养老呢?国家的规划是这样的,养老需要三根支柱:

根据2018年2月22日《经济参考报》的报道,

第一支柱即基本养老金,也就是本文提到的城镇职工+城乡居民基本养老保险。

但是很显然,城乡居民养老保险一个月100多元的水平只是聊胜于无,

而现在还不错的城镇职工基本养老保险水平也会逐渐降低。

因此国家还在规划建设第二和第三支柱。

第二支柱即企业年金(职业年金),

截至2017年底,全国已经有近8万户企业建立了企业年金,参加职工人数达到了2300多万人,积累基金近1.3万亿元;

这根支柱对少部分人适用,也就是如果你的企业福利好,有建立企业年金,那么你就多了一层保障,但是对于绝大部分人来说,包括我在内,企业年金只是一个听说过但是没有办法享受的名词。

第三根支柱就是养老商业保险和储蓄性养老保险了

我国第三支柱个人储蓄性养老保险和商业养老保险已经正式进入制度建设启动阶段。

人社部、财政部2018年初已经共同组织召开会议,会同国家发改委、国家税务总局、人民银行、银监会、证监会、保监会成立工作领导小组,启动建立养老保险第三支柱工作。

储蓄性养老保险和商业养老保险性质是类似的,

商业养老保险我们好理解,也就是我们自己去保险公司购买商业养老保险,老了之后保险公司支付我们养老金。

而个人储蓄性的养老保险还是由国家安排,预计将是自愿参加性质的,也就是工作期间将一部分工资交给国家积攒下来,年复一年的积累,到退休时会形成一笔可观的收入。而到退休之前,这笔钱是不能支取的。

可能我们会问了,那这还不如我自己存钱呢,反正还随时可以取,国家安排的这个个人储蓄性养老保险有啥好处呢?

好处就是如果你参与这个养老保险计划,那么国家会对你进行个人所得税等税收扣减,鼓励你从年轻时开始为养老攒钱。

我们很容易看出,这个第三支柱本质上还是要自己出钱的。

我们应该如何应对老龄化,如何确保晚年过上有品质的退休生活?

以下是一些想法和建议:

1:尽量生活在更大的城市

同样是待遇低的城乡居民基本养老保险,全国平均一个月100多元,农村老人普遍一个月七八十元,而深圳市如果按照顶格缴纳可以达到700多元,为什么深圳要多点呢?

因为城乡居民基本养老保险=基础养老金+个人账户余额计算值

这个基础养老金就是政府补贴,越是大城市,越是经济发达,补贴能力越强。

2:一份稳定的工作很重要,不要随便辞职去环游世界,除非你家很有钱,否则还是老老实实干活比较好。

职业的中断对养老金的影响是巨大的。比方说你现在没有工作单位了,你选择自己交养老金,前面说了,针对“社会人”的城乡居民基本养老保险待遇非常低,

那我们选择自己缴纳城镇职工基本基本养老保险总可以了吧?

这样可以是可以,但是这样有个问题,你自己交的金额会很高,而进入你个人账户的会很少。

举个例子,同样是月入一万,

你现在有工作单位,你只需要缴纳8%的比例,单位帮你缴纳20%,合计28%。

也即是你自己交800元,公司另外帮你缴纳2000元,合计为2800元。

这2800元呢,800元进入你的个人账户,也即是你自己的钱,另外2000元进入统筹账户,简单的说就是给现在的老人支付养老金去了。

如果你现在没有单位了,

那么你自己确定一个缴费基数,在深圳市最低工资标准和深圳市平均工资三倍之间自己选一个值,就按照还是一万计算,缴费比例为20%,也就是你需要自己缴纳2000元养老保险。这个20%里面呢,只有8%会进入个人账户,其余12%进入了统筹账户。

也就是说,你自己交了2000元现金,只有800元是在你的个人账户里面,相当于存起来了,其余1200元就给现在的老人发养老金去了。

也就是说,

有单位的人,自己付了800元,有800元进入个人账户,

每单位的人,自己付了2000元,有800元进入个人账户

是不是发现,没有单位的人缴纳城镇职工基本养老保险真的好惨?

当然了,进入统筹账户的钱也不是说打水漂了,但是统筹账户的性质是共济性的,也就是你交的多于平均水平就会不可避免的贡献出去一部分。

因为你退休后能拿到的养老金=个人账户养老金+基础养老金

统筹账户对应的是基础养老金,

它有三个参数,一个是缴费年限,一个是你自己的缴费基数,一个是你所在省的上年度在岗职工平均工资,很显然你的缴费年限越长,缴费基数越高,你能拿到的基础养老金越多。

但是呢这个全省平均工资就是你不可控制的量,你要是高于这个值,你就会贡献出去一部分。

3:继续保持中国人存钱的优良传统,要从年轻的时候就规划养老储蓄金。

要想晚年过得好,手里存款不可少,

这个存款可以是股票,可以是房产,可以是现金储蓄,也可以是商业养老保险。

发达国家商业性质的养老保险是非常普遍流行的,我国这方面目前还没有什么理想的商业保险产品,但是也早晚会发展起来。

4:积极组织家庭参与社会生存和竞争

现在的年轻人很多是很烦父母催婚的,但是单纯从经济角度来说,催婚真的是为你好。

目前社会选择不婚和丁克者也在增多,并且形成了一定的声音,

但是普通人还是慎重选择不婚和丁克,除非自己足够强大足够有钱,生活有保障,否则这在经济上是对自己不利的,家庭的力量总是比个人要大的。

“人多力量大”,“一个人可以走的快,但是一群人可以走的远”是有道理的。要把寻找合适的伴侣组建家庭作为一项人生大事去做,家庭会比个人的力量大的多。

除非你是社会前5%-10%的高收入精英人群,否则选择不婚会让自己在经济竞争和保障能力上逐渐弱化。

简单的例子,你单身年入12万,

隔壁小张夫妇,丈夫年薪12万,妻子老婆年薪8万,家庭收入20万。

虽然小张夫妇平均收入只有10万,不如你高,但是两夫妻省吃俭用还是可以供得起一年12万房贷的房子的,而你则完全负担不起,只能买更小面积,或者小区更差,地段更差的房子。

不仅居住品质,而且房子升值潜力也不如他们。

同样是出去旅游,小张夫妇同住一间房,每个人需要支付的房费只有你的50%。

更为重要的是,同样是过了五年收入上涨一倍,

你从年入12万变成年入24万;隔壁小张夫妇从20万变成40万。

你们之间的年收入差距就从8万元变成了16万元。

购买高品质消费品和服务型消费的能力差距就显示出来了。

因此尽管论单个人的挣钱能力不如你,但是随着时间的推移,你和他们之间的财富差距反而会越来越大,生活水平也会逐渐被拉开,在养老的保障能力上也会有很大区别。

比方说,你四十岁的时候不幸失业了,或者不幸得了什么需要花钱的疾病,显然抵抗风险的能力不如隔壁小张夫妇强。

积极找到一个合适的好伴侣,对人的生活的改变将是翻天覆地的。

前不久看到一个视频,叫做《顺从的幸福》,83年的辽宁女主角郭某自述30岁分手之后,心态上想对着干就是不找对象,今年已经35岁了,到上海人民公园去相亲体验生活,大爷大妈们都告诉她年龄不行。

她在视频里说:

“一开始,更多是一种对抗。那些家长在说我的时候,我觉得多多少少对我是一种不尊重。后来因为我老去那里,我发现,从他们眼神里透露出来的,是一种关心的态度。在他们的价值观里,会觉得这是为你好,你怎么这么不着急”

实际上,我看完这个视频,心理上也和大爷大妈们一样,是为这个妹子感到着急和惋惜的。

从30岁到35岁这5年时间,由于处于对抗心理,她显然没有在组建家庭方面做过什么努力,白白浪费了光阴,如今想去试图证明自己对异性依然有魅力,奈何年龄的增大是不可逆的。

青春与年轻的时光,不管是找对象,还是找工作,还是创业,还是学习,还是运动方面都更有优势,这是一个事实,承认这个事实,积极主动的去做对自己有利的事,是不会错的。

5:要认识到养儿防老不会过时,这个儿是指儿女。

其实从国家角度来讲,现行的养老金制度就是“养儿防老”制度。

也就是现在在工作的年轻人缴纳养老金,集体供养现在的老人。

从以前的一个家庭的年轻人供养老人,

到现在的一个国家的年轻人集体供养老人,

本质上其实是没有变化的。

现行的集体供养制度当然有好处,但是也有弊端,那就是个人生育的积极性弱化。

我即使不生孩子,老了也会有别人的孩子工作来支付我的养老金。

殊不知国家养老金制度需要正常运转,有两个必要条件,

第一条是国民必须工作来缴纳养老金,

第二条是国民必须要养育足够的下一代,

否则老龄化会让养老金制度无法长期维持。

就目前养老金的走势来看,2017年60岁以上老人已经占人口比例17.3%,养老金替代率长期走势一定是继续向下走。

为什么呢?2017年末中国60岁及以上的老人数量为2.409亿人,

而仅仅在一年之前的2016年底,这个数字为2.3086亿人,

2017年一年时间增加了1004万60岁以上老人,假设平均一个人发2万元养老金,那就是新增2000亿人民币养老金要发出去。这已经是2017年腾讯+阿里+华为的净利润之和了。

2万元养老金对老人们来说,又算的了什么呢?维持基本生活而已。

我们经常看新闻,超市食用油打折,会引来几千老年人排几小时队,我们往往无法理解,就几十元至于这样么?其实如果你现在每个月的收入降到老人们养老金的水平,同时你的身体也已经老去,你也有很大概率会这么做。

积极养育下一代,不只是对自己,对整个国家都是有好处的。

我们要能够包容和容许部分国人自由的选择不结婚,选择丁克,选择出柜,

但是这样的人群不能太多,因为自由的基础是经济,

只有在健康的人口结构下,不婚族,丁克族,LGBT们才可以自由选择自己喜欢的生活方式而不用付出代价。

这句话是什么意思呢?以前我国有人口红利,根本不愁年轻人不够,所以养老金不仅能正常运转,而且还结余多,所以全社会老人,包括不婚族,丁克族,LGBT们都可以正常退休生活领取养老金,而且每年还能大幅上调。

即使这些人群选择了不养育后代,在人口红利下还是会有足够的其他家庭生育的孩子工作,来支付足够的养老金。所以这些人群尽管省略了养育子女的劳动,却也不需要在养老金领取方面付出代价。

而一旦社会生育率过低,带来的就是我们的基本养老金水平在不断下降,这就是全社会为生育率下降所付出的代价,

我这里做个预测:

在目前人口红利消失的情况下,我国基于家庭为单位收税,对养育子女的人们进行税收抵扣和优惠只是时间问题,预计最近两三年就会开始有政策出台,后续会不断加大力度。换句话说,没有养育子女的单身人士的税会更高。

6:除了关心自己的未来,也请多关心你的父母,他们的养老金水平在逐渐下降。

我们父母的养老金,增速从2015年的10%,下降到2016年的6.5%,2017年的5.5%,以及今年的5%。

由于2016-2018年这三年的养老金增速都赶不上社会人均可支配收入增长速度,

因此他们的养老金水平和社会平均工资水平比较在越拉越大。

我看到这个新闻以后,就立即和我父母聊了这个话题,发现果然他们其实很关心这个问题。但是处于不想麻烦儿子,不想让我误以为是在问我要钱的心理,并没有跟我说。

我主动沟通之后,母亲告诉我说这两年养老金上调幅度确实很小,一个月才增加一百多元。当然目前总体还是足够用的,但是这个趋势已经很清楚了。

养老金增速赶不上社会平均工资增速在未来是长期趋势,

作为我们父母唯一收入来源的城镇职工养老金替代率,在未来一二十年还会不断下降。为了保证父母的生活水平不下降,给予必要的经济资助是我们必须考虑的事情。

因此除了在考虑你自己的养老储蓄的同时,也要考虑给父母的养老资助,

因为对你来说,退休后面临低水平养老金可能是二三十年后的事情,

而对你的父母来说,养老金水平逐渐下降是现在正在发生的事情。

总之,对于我们而言,不需要对未来过于悲观,

但是要正视老龄化已经在逐渐显示其威力的现实,

这个威力有多大呢?我们吵的沸沸扬扬的中美贸易战,对中国经济的影响估计也就是0.1%,按照我国2017年82.7万亿的GDP,也就是大约800亿人民币多点。

而我国各级政府,由于城镇职工养老金入不敷出而对养老金进行的补贴,从2014年的3500亿左右上升到2016年的6500亿左右。

在地方债还是个问题的情况下,地方政府继续增加养老补贴面临压力。

与此同时,我国2017年还新增了1000万老人。

老龄化无疑也是吞噬了年轻人的工作成果,加大了其负担,冲击了在教育,科技等方面的投资。

因此我们说,对于超级大国,内部的问题才是关键和核心。

积极的做好应对措施,个人和国家才能有好的未来。


Web Development Open Source Tools of the Month (v.Apr 2018)

$
0
0

Web Development Open Source Tools of the Month (v.Apr 2018)

For the past month, we ranked nearly 200 Web Development Open Source Projects to pick the Top 10.

We compared projects with new or major release during this period. Mybridge AI ranks projects based on a variety of factors to measure its quality for professionals.

  • Average number of Github stars in this edition: 10,670 ⭐
  • “Watch” Web Development Top 10 Open Source on Github and get email once a month.
  • Topics: Editor, Crawler, Kill processes, Keras, Vim, Image, Markdown, D3.js, WebDB

Open source projects can be useful for programmers. Hope you find an interesting project that inspires you.

Course of the month:

A) Beginners: The Complete Web Developer Course 2.0 [34,469 recommends, 4.6/5 stars]

B) Golang: Web Development w/ Google’s Go (golang) Programming Language. [1,594 recommends, 4.7/5 stars]

Rank 1

Pell v1.0: The simplest and smallest WYSIWYG text editor for web, with no dependencies [9836 stars on Github]. Courtesy of Jared Reich


Rank 2

Headless-chrome-crawler: Distributed crawler powered by Headless Chrome [2858 stars on Github]. Courtesy of Yujiosaka


Rank 3

FKill-cli v4.1: Fabulously kill processes. Cross-platform. [4890 stars on Github]. Courtesy of Sindre Sorhus


Rank 4

Sketch-code: Keras model to generate HTML code from hand-drawn website mockups. Implements an image captioning architecture to drawn source images. [1120 stars on Github]. Courtesy of Ashwin Kumar


Rank 5

Vim-dadbod: dadbod.vim: Modern database interface for Vim [1337 stars on Github]. Courtesy of Sexy Pope Costume


Rank 6

Carbon v3.0: Create and share beautiful images of your source code [9981 stars on Github]. Courtesy of dawn


Rank 7

Marktext: Next generation markdown editor, running on platforms of MacOS Windows and Linux [2959 stars on Github]. Courtesy of Mark Text


Rank 8

D3 v5.0: Bring data to life with SVG, Canvas and HTML. [74821 stars on Github].


Rank 9

Imaging-heap: A command line tool to measure the efficiency of your responsive image markup across viewport sizes and device pixel ratios. [322 stars on Github]. Courtesy of Filament Group


Rank 10

Webdb: The Web is your database. [224 stars on Github]. Courtesy of Beaker Browser

That’s it for Web Development Monthly Open Source. If you like this curation, read best daily articles based on your programming skills on our website.

React.js Open Source of the Month (v.Apr 2018)

$
0
0

React.js Open Source of the Month (v.Apr 2018)

For the past month, we ranked nearly 200 React.js Open Source Projects to pick the Top 10.

We compared projects with new or major release during this period. Mybridge AI ranks projects based on a variety of factors to measure its quality for professionals.

  • Average number of Github stars in this edition: 2,202⭐
  • “Watch” React.js Top 10 Open Source on Github and get email once a month.
  • Topics: Online communities, Testing, Immer, Debugger, Pinterest, Kanban, Animation, Component, Slack, Error

Open source projects can be useful for programmers. Hope you find an interesting project that inspires you.

Course of the month:

A) Beginners: React 16 — The Complete Guide (incl. React Router 4 & Redux) [6,499 recommends, 4.8/5 stars]

B) Advanced: React Native: Advanced Concepts[2,183 recommends, 4.7 stars]

Rank 1

Spectrum: Simple, powerful online communities. Built with Node and React.js [3042 stars on Github]. Courtesy of Spectrum


Rank 2

React-testing-library: Simple and complete React DOM testing utilities that encourage good testing practices. [1555 stars on Github]. Courtesy of Kent C. Dodds

……[Introducing React Testing Library]


Rank 3

Immer: Create the next immutable state by mutating the current one [4106 stars on Github]. Courtesy of Michel Weststrate


Rank 4

Debugger.html: The Firefox debugger that works anywhere. Built with React and Redux [3695 stars on Github].


Rank 5

Gestalt: A set of React UI components open sourced by Pinterest [1771 stars on Github]. Courtesy of Pinterest Engineering


Rank 6

React-kanban: A Trello-like application built with React and Redux. Take a look at the live website: [884 stars on Github]. Courtesy of Markus Englund


Rank 7

React-spring: Helping react-motion and animated to become best friends [3408 stars on Github]. Courtesy of Paul Henschel


Rank 8

React-broadcast: Reliably communicate state changes to deeply nested React elements [1120 stars on Github]. Courtesy of React Training


Rank 9

React-slack-clone: Complete chat application, built with Chatkit [635 stars on Github]. Courtesy of Pusher


Rank 10

Error-overlay-webpack-plugin: Catch errors with style [494 stars on Github]. Courtesy of Smooth Code

That’s it for React.js Monthly Open Source. If you like this curation, read best daily articles based on your programming skills on our website.

Machine Learning Open Source of the Month (v.Apr 2018)

$
0
0

Machine Learning Open Source of the Month (v.Apr 2018)

For the past month, we ranked nearly 250 Machine Learning Open Source Projects to pick the Top 10.

We compared projects with new or major release during this period. Mybridge AI ranks projects based on a variety of factors to measure its quality for professionals.

  • Average number of Github stars in this edition: 1,385⭐
  • “Watch” Machine Learning Top 10 Open Source on Github and get email once a month.
  • Topics: Tensorflow, Augmentation, AlphaGo Zero, NSynth, Deep Neuroevolution, Person Blocker, TCN, Ann Visualizer, Watson

Open source projects can be useful for programmers. Hope you find an interesting project that inspires you.

Course of the month:

A) Beginners: Python for Data Science and Machine Learning Bootcamp.[18,618 recommends, 4.6/5 stars]

B) Artificial Intelligence: Reinforcement Learning in Python. [1,440 recommends, 4.6/5 stars]

Rank 1

Tfjs: A WebGL accelerated, browser based JavaScript library for training and deploying ML models. [6129 stars on Github]. Courtesy of TensorFlow

……[Main Page]


Rank 2

Augmentor v0.2: Image augmentation library in Python for machine learning. [1661 stars on Github]. Courtesy of Marcus D. Bloice


Rank 3

Hub: A library for transfer learning by reusing parts of TensorFlow models. [350 stars on Github]. Courtesy of TensorFlow

……[Introducing TensorFlow Hub]


Rank 4

Chess-alpha-zero: Chess reinforcement learning by AlphaGo Zero methods. [1014 stars on Github]. Courtesy of Samuel


Rank 5

Open-nsynth-super: Open NSynth Super is an experimental physical interface for the NSynth algorithm [1177 stars on Github]. Courtesy of Google Creative Lab


Rank 6

Deep-neuroevolution: Deep Neuroevolution [573 stars on Github]. Courtesy of Uber

……[Introducing Visual Inspector for Neuroevolution]


Rank 7

Person-blocker: Automatically “block” people in images (like Black Mirror) using a pretrained neural network. [1533 stars on Github]. Courtesy of Max Woolf


Rank 8

TCN: Sequence modeling benchmarks and temporal convolutional networks [498 stars on Github]. Courtesy of Zico Kolter


Rank 9

Ann-visualizer: A python library for visualizing Artificial Neural Networks (ANN) [654 stars on Github]. Courtesy of Prodi Code


Rank 10

Visual-recognition-coreml: Classify images offline using Watson Visual Recognition and Core ML [362 stars on Github]. Courtesy of IBM Watson

That’s it for Machine Learning Monthly Open Source. If you like this curation, read best daily articles based on your programming skills on our website.

使用RxJava做三级缓存

$
0
0

使用RxJava做三级缓

2018年02月08日 16:38:29

阅读数:44

使用RxJava的链式结构来实现三级缓存:

调用结构

//会首先从缓存中获取结果,其次数据库,然后网络

Observable.concat(getFromCache(), getFromDB(), getFromNet())

.firstElement() //注意是取第一个返回的结果,不是第一个方法的结果

.toObservable() //装换为Observable

.subscribe(new Consumer<Integer>() {

@Override

public void accept(Integer e) throws Exception {

//具体类型可以根据实际需要跟换,这里使用Integer

Log.d(TAG, “accept: ” + e);

}

});

方法的实现:

//这里只是模拟,具体实现根据实际需要进行替换

private Observable<Integer> getFromCache() {

return Observable.create(new ObservableOnSubscribe<Integer>() {

@Override

public void subscribe(ObservableEmitter<Integer> e) throws Exception {

//当有数据返回的时候就调用onNext()方法

//没有的数据返回就直接调用onComplete()方法,这样就会上面的调用结构就会去取getFromDB()方法的结果。下面情况类似

//                e.onNext(1);

e.onComplete();

}

});

}

 

private Observable<Integer> getFromDB() {

return Observable.create(new ObservableOnSubscribe<Integer>() {

@Override

public void subscribe(ObservableEmitter<Integer> e) throws Exception {

e.onNext(2);

e.onComplete();

}

});

}

 

private Observable<Integer> getFromNet() {

return Observable.create(new ObservableOnSubscribe<Integer>() {

@Override

public void subscribe(ObservableEmitter<Integer> e) throws Exception {

//                e.onNext(3);

e.onComplete();

}

});

}

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/qq_25184739/article/details/79291297

使用RxJava自己构造一个三级缓存的实

2016年08月20日 17:08:59

阅读数:775

通常我们说的三级缓存是指Memory,Disk,NetWork,因为我们都知道从网络读取一条数据往往存在各种因素速度不尽人意,如果一个应用中任何数据都是实时从网络获取,那么我们想象一下用户每次都要面对如进度条转个两三圈才显示数据这种体验肯定是不佳的,所以我们需要缓存数据,所以本文介绍使用RxJava通过实例来讲解如何缓存数据。

定义一个数据实体类,简单的定义了一个数据内容,以及一个时间用来代表缓存时长。

public class CacheData {

 

private static final int CACHE_TIME = 5000;

 

public String data;

public long time;

 

public CacheData(String value) {

this.data = value;

time = System.currentTimeMillis();

}

 

public boolean isUpToData() {

return System.currentTimeMillis() – time >= CACHE_TIME;

}

}

定义Memory,Disk,NetWork三个缓存的Observable:

public class Source {

 

/**

* 内存缓存

*/

CacheData memery;

/**

* 硬盘缓存

*/

CacheData disk;

/**

* 网络获取数据

*/

int requestData;

 

public Source() {

Timber.tag(“Source”);

}

 

/**

* 从内存里读取缓存

*/

public Observable<CacheData> getFromMemory() {

Observable<CacheData> observable = Observable.create(new Observable.OnSubscribe<CacheData>() {

@Override

public void call(Subscriber<? super CacheData> subscriber) {

subscriber.onNext(memery);

subscriber.onCompleted();

}

});

return observable.compose(getFrom(“MEMORY”));

}

 

/**

* 从硬盘中读取缓存

*/

public Observable<CacheData> getFromDisk() {

Observable<CacheData> observable = Observable.create(new Observable.OnSubscribe<CacheData>() {

@Override

public void call(Subscriber<? super CacheData> subscriber) {

subscriber.onNext(disk);

subscriber.onCompleted();

}

});

return observable.compose(getFrom(“DISK”));

}

 

/**

* 从网络中读取数据

*/

public Observable<CacheData> getFromNet() {

Observable<CacheData> observable = Observable.create(new Observable.OnSubscribe<CacheData>() {

@Override

public void call(Subscriber<? super CacheData> subscriber) {

requestData ++;

subscriber.onNext(new CacheData(“Data is = ” + requestData));

subscriber.onCompleted();

}

});

return observable.doOnNext(new Action1<CacheData>() {

@Override

public void call(CacheData cacheData) {

memery = cacheData;

disk = cacheData;

}

}).compose(getFrom(“NETWORK”));

}

 

/**

* Transformer转换  判断数据的状态

*/

private Observable.Transformer<CacheData, CacheData> getFrom( final String source) {

Observable.Transformer<CacheData, CacheData> loadFromTransformer = new Observable.Transformer<CacheData, CacheData>() {

@Override

public Observable<CacheData> call(Observable<CacheData> cacheDataObservable) {

return cacheDataObservable.doOnNext(new Action1<CacheData>() {

@Override

public void call(CacheData cacheData) {

if (cacheData == null) {

Timber.e(source + ” — cacheData is null check again —“);

} else if (cacheData.isUpToData()) {

Timber.e(source + ” — cacheData is out of time —“);

} else {

Timber.e(source + ” — cacheData you gotta —“);

}

}

});

}

};

return loadFromTransformer;

}

}

代码中我们分别定义了memory、disk缓存并且我们定义了一个requestData用来假设是网络数据。其中的memory和disk的Observable比较好理解就是发射对应的缓存就好,我们主要讲里面一些涉及的操作符。

doOnNext:标示当Observable在调用onNext发射数据的时候会调用到这里面,然后我们可以通过自定义一个Action把里面的数据缓存到memory和disk中去。

observable.doOnNext(new Action1<CacheData>() {

@Override

public void call(CacheData cacheData) {

memery = cacheData;

disk = cacheData;

}

})

Observable.Transformer:转换操作可以将源Observable通过不断他链式的结构能直接作用于Observable上去,常见于复用操作符等操作,这里我们通过使用它来打印数据是从哪里取出来的。

Observable.Transformer<CacheData, CacheData> loadFromTransformer = new Observable.Transformer<CacheData, CacheData>() {

@Override

public Observable<CacheData> call(Observable<CacheData> cacheDataObservable) {

return cacheDataObservable.doOnNext(new Action1<CacheData>() {

@Override

public void call(CacheData cacheData) {

if (cacheData == null) {

Timber.e(source + ” — cacheData is null check again —“);

} else if (cacheData.isUpToData()) {

Timber.e(source + ” — cacheData is out of time —“);

} else {

Timber.e(source + ” — cacheData you gotta —“);

}

}

});

}

};

Ok,万事都准备好了 那么我们调用起来看看效果喽。

Source source = new Source();

observable = Observable.concat(source.getFromMemory(), source.getFromDisk(), source.getFromNet())

.first(new Func1<CacheData, Boolean>() {

@Override

public Boolean call(CacheData cacheData) {

return null != cacheData && !cacheData.isUpToData();

}

});

这里又涉及了两个操作符
concat:保证顺序的组合操作,这样一次从memory、disk、network中去数据。
first:取Observable中的第一个数据,我们这里自己定义了一个Func函数标示说取满足条件的第一个数据。

解释完了,我们使用subscribe订阅这个Observable:

observable.subscribe(new Action1() {

@Override

public void call(Object o) {

Timber.i(“Result = ” + ((CacheData) o).data);

}

});

最后我们看看效果。

MEMORY — cacheData is null check again —

DISK — cacheData is null check again —

NETWORK — cacheData you gotta —

I/MainActivity: Result = Data is = 1

 

MEMORY — cacheData you gotta —

I/MainActivity: Result = Data is = 1

我们可以看出第一次调用的时候 数据来自网络,第二次调用就来自内存了,符合我们的三级缓存的效果。

Thanks:http://blog.chinaunix.net/uid-20771867-id-5145681.html

demo地址:https://github.com/Neacy/BlogCode

Swift Top 10 Open Source of the Month (v.Apr 2018)

$
0
0

Swift Top 10 Open Source of the Month (v.Apr 2018)

For the past month, we ranked nearly 200 Swift Open Source Projects to pick the Top 10.

We compared projects with new or major release during this period. Mybridge AI ranks projects based on a variety of factors to measure its quality for professionals.

  • Average number of Github stars in this edition: 678⭐
  • “Watch” Swift Top 10 Open Source on Github and get email once a month.
  • Topics: Asynchronous, Context Menu, In App Purchase, Delegation, Text Editor, Cocoapods, Functional Programming, Flow Layouts, Home Button, Debugger

Open source projects can be useful for programmers. Hope you find an interesting project that inspires you.

Course of the month:

A) Beginners: iOS 11 and Swift 4 for Beginners: 200+ Hands-On Tutorials.[1,004 recommends, 4.7/5 stars]

B) Build Apps: The Complete iOS 11 & Swift Developer Course — Build 20 Apps. [2,712 recommends, 4.6/5 stars]

Rank 1

Swift-nio: Event-driven network application framework for high performance protocol servers & clients non-blocking. [3494 stars on Github]. Courtesy of Apple


Rank 2

ContextMenu: An iOS context menu UI inspired by Things 3. [579 stars on Github]. Courtesy of GitHawk


Rank 3

Merchantkit: A modern In-App Purchases management framework for iOS. [515 stars on Github]. Courtesy of Benjamin Mayo


Rank 4

Delegated: Closure-based delegation without memory leaks [420 stars on Github]. Courtesy of Oleg Dreyman


Rank 5

Textor: A plain text editor for iOS [364 stars on Github]. Courtesy of Louis D’hauwe


Rank 6

Tiercel: An easy-to-use and feature-rich pure Swift download framework [Language is in Chinese. Use auto page translation] [525 stars on Github]. Courtesy of Danie1s


Rank 7

FunctionKit: A framework for functional types and operations designed to fit naturally into Swift. [195 stars on Github]. Courtesy of Michael Pangburn


Rank 8

Blueprints: A framework that is meant to make your life easier when working with collection view flow layouts. [234 stars on Github]. Courtesy of Christoffer Winterkvist


Rank 9

HomeButton: Bringing the home button back to iPhone X [235 stars on Github]. Courtesy of Nathan Gitter


Rank 10

Resumable-assert: Assert replacement to continue execution in debugger [86 stars on Github]. Courtesy of Google

That’s it for Swift Monthly Open Source. If you like this curation, read best daily articles based on your programming skills on our website.

Viewing all 764 articles
Browse latest View live