AWS |
AWS Government, Education, and Nonprofits Blog |
How MTI tracks social distancing efforts with the AWS Cloud and big data |
https://aws.amazon.com/blogs/publicsector/how-mti-tracks-social-distancing-efforts-with-aws-cloud-big-data/
|
How MTI tracks social distancing efforts with the AWS Cloud and big dataMaryland Transportation Institute MTI an interdisciplinary research and education organization based out of the University of Maryland focuses on solving complex transportation problems When COVID hit MTI was presented with an urgent new problem the organization was tasked with gathering processing and reporting daily transportation data from nearly of the US population To keep the public safe they needed more computing powerーquickly They used the AWS Cloud |
2021-11-08 15:53:08 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
java springboot 使用されているポート番号についてerror |
https://teratail.com/questions/368367?rss=all
|
javaspringboot使用されているポート番号についてerror前提・実現したいことeclipsenbspspringbootにてアプリを作成しAWSへデプロイする段階なのですがポート番号をserverportnbspに変更したところエラーが発生してしまいました。 |
2021-11-09 00:56:43 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
androidでactivityを定期起動 |
https://teratail.com/questions/368366?rss=all
|
androidでactivityを定期起動androidでactivityの定期起動を考えています。 |
2021-11-09 00:42:02 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
Tweepyで日本語のリスト名で抽出できない |
https://teratail.com/questions/368365?rss=all
|
Tweepyで日本語のリスト名で抽出できない前提・実現したいことpython初心者です。 |
2021-11-09 00:13:14 |
AWS |
AWSタグが付けられた新着投稿 - Qiita |
AWS認定 ソリューションアーキテクトアソシエイト(SAA)に合格するまで |
https://qiita.com/hiyanger/items/d41fdfb2eca6b05b8ad5
|
クラウドプラクティショナーのときも書きましたが、単純な暗記ではなく、各サービスを正しく理解して自分の中で確実に消化しきることがより重要だと感じました。 |
2021-11-09 00:52:58 |
Docker |
dockerタグが付けられた新着投稿 - Qiita |
「docker-compose exec php-fpm /bin/bash」でコンテナにログインできない |
https://qiita.com/railgun-0402/items/2b9d6923aef783874a24
|
「dockercomposeexecphpfpmbinbash」でコンテナにログインできないLaravelやdockerの練習がしたかったLaraveldockerの環境を構築していたらコンテナに入れない事件が発生しました。 |
2021-11-09 00:37:22 |
海外TECH |
MakeUseOf |
The Top 10 Highest-Rated Reddit Posts of All Time |
https://www.makeuseof.com/tag/10-top-rated-reddit-posts-time/
|
reddit |
2021-11-08 15:45:12 |
海外TECH |
MakeUseOf |
How to Underclock a GPU With MSI Afterburner |
https://www.makeuseof.com/how-underclock-gpu/
|
afterburnermore |
2021-11-08 15:45:12 |
海外TECH |
MakeUseOf |
7 Types of Public Records That Data Brokers Collect |
https://www.makeuseof.com/types-public-records-data-brokers-collect/
|
Types of Public Records That Data Brokers CollectWhat you share online is your business But data brokers can find much more information about you than you might expect often without your knowledge |
2021-11-08 15:30:22 |
海外TECH |
MakeUseOf |
Square's Cash App for Teenagers: What You Can and Can't Do With It |
https://www.makeuseof.com/teens-can-use-cash-app/
|
online |
2021-11-08 15:15:23 |
海外TECH |
MakeUseOf |
What VPNs Support WireGuard? |
https://www.makeuseof.com/wireguard-supported-vpns/
|
communication |
2021-11-08 15:01:12 |
海外TECH |
DEV Community |
Get started with Medusa Part 2: Make the Server Your Own |
https://dev.to/medusajs/get-started-with-medusa-part-2-make-the-server-your-own-gka
|
Get started with Medusa Part Make the Server Your OwnIn the first part of this tutorial series I compared Medusa and Shopify to showcase how Medusa is the open source alternative to Shopify Where Shopify lacks when it comes to its pricing plans minimal customization abilities and inability to fit for every business use case Medusa can compensate for it Medusa is an open source headless commerce solution that allows you to own your stack and make it fit into whatever use case your business needs It is fast and very flexible In the previous tutorial you learned about Medusa s components and how you can install and run each of them It is a very easy process that can get your store up and running in seconds In this tutorial you will start making changes to the server to make it your own You will learn how to create new API endpoints services and subscribers The API you will create will retrieve the products with the most sales and you will create a service and subscriber to help us do that The code for this tutorial is on this GitHub repository PrerequisitesThis tutorial assumes you have already read and followed along with part In the first part you learn how to setup the Medusa store which you will make changes to in this tutorial as well as the Medusa storefront and the admin If you have not went through it yet please do before continuing with this tutorial In addition you need to have Redis installed and running on your machine to be able to use subscribers So if you do not have it installed and you want to follow along with the tutorial you should go ahead and install it Add a ServiceAs mentioned earlier you will be creating an API endpoint that allows you to get the top products i e the products with the most sales In Medusa services generally handle the logic of models or entities in one place They hold helper functions that allow you to retrieve or perform action on these models Once you put them in a service you can access the service from anywhere in your Medusa project So in this tutorial you will create a service TopProductsService that will hold all the logic needed to update products with their number of sales and to retrieve the products sorted by their number of sales To create a service start by creating the file src services top products js with the following content import BaseService from Medusa interfaces class TopProductsService extends BaseService constructor productService orderService super this productService productService this orderService orderService Here are a few things to note about this service When this service is retrieved in other places in your code the service should be referred to as the camel case version of the file name followed by “Service In this case the file name is top product so to access it in other places we use topProductsService Similarly to how you will use this service we inject as dependencies the productService and orderService in the constructor When you create classes in Medusa you can use dependency injection to get access to services Implement getTopProductsThe next step is to add the method getTopProducts to the TopProductsService class This method will retrieve the products from the database sort them by their number of sales then return the top products Inside TopProductsService class add the new method async getTopProducts const products await this productService list status published relations variants variants prices options options values images tags collection type products sort a b gt const aSales a metadata amp amp a metadata sales a metadata sales const bSales b metadata amp amp b metadata sales b metadata sales return aSales gt bSales aSales lt bSales return products slice You first use this productService to retrieve the list of products Notice that the list method can take optional parameters The first one specifies where conditions and the second parameter specifies the relations on this products to retrieve Then you sort the array with the sort Array method giving it a compare function In the compare function you compare the number of sales stored inside the metadata field In Medusa most entities have the metadata field which allows you to easily add custom attributes in the default entities for your purposes Here you use the metadata field to store the number of sales You are also sorting the products descending Finally you use the splice Array method to retrieve only the first items Implement updateSalesNext you will implement the updateSales method in the TopProductsService This method receives an order ID as a parameter then retrieves this order and loops over the items ordered Then the sales property inside metadata is incremented and the product is updated Add the new method in TopProductsService async updateSales orderId const order await this orderService retrieve orderId relations items items variant items variant product if order items amp amp order items length for let i i lt order items length i const item order items i retrieve product by id const product await this productService retrieve item variant product id relations variants variants prices options options values images tags collection type const sales product metadata amp amp product metadata sales product metadata sales update product await this productService update product id metadata sales sales You first use this orderService to retrieve the order by its ID The retrieve method takes the order ID as the first parameter and a config object as the second parameter which is similar to the ones you used in the previous method You pass it the relations array to retrieve the ordered items and their products Then you loop over the items and use the product id inside each item to retrieve the product Afterward you increment the number of sales and update the product using the update method on this productService This service is now ready to update product sales numbers and retrieve products ordered based on their sales number Add an API EndpointNow you will add an API endpoint to retrieve the top products To add an API endpoint you can do that by creating the file src api index js with the following content import Router from express export default gt const router Router router get store top products async req res gt const topProductsService req scope resolve topProductsService res json products await topProductsService getTopProducts return router Creating an endpoint is easy You just need to export an Express Router This router can hold as many routes as you want In this code you add a new GET route at the endpoint store top products The reason you are using store here as a prefix to top products is that Medusa prefixes all storefront endpoints with store and all admin endpoints with admin You do not need to add this prefix but it is good to follow the conventions of the Medusa APIs In this route you retrieve the service you created in the previous section with this line const topProductsService req scope resolve topProductsService You can retrieve any service inside routes using req scope resolve As explained in the services section you need to use the camel case version of the file name followed by Service when referencing a service in your code After retrieving the service you can then use the methods you created on it So you return a JSON response that has the key products and the value will be the array of top products returned by getTopProducts Let us test it out You can access this endpoint at localhost store top products As this is a GET request you can do it from your browser or using a client like Postman or Thunder Client You should see an array of products in the response At the moment nothing is sorted as you have not implemented the subscriber which will update the sales number Add a SubscriberFinally you will add a subscriber which will update the sales number of products when an order is placed Before creating the subscriber you need to make sure that Redis is installed and running on your machine You can test that by running the following command in your terminal redis cli pingIf the command returns “PONG then the Redis service is running Then go to Medusa config js in the root of your project You will see that at the end of the file inside the exported config there is this line commented out redis url REDIS URL Remove the comments This uses the variable REDIS URL declared in the beginning of the file Its value is either the Redis URL set in env or the default Redis URL redis localhost If you have a different Redis URL add the new variable REDIS URL in env with the URL Then restart the server This will take the updated configuration and connect to your Redis server Now you will implement the subscriber Create the file src subscribers top products js with the following content class TopProductsSubscriber constructor topProductsService eventBusService this topProductsService topProductsService eventBusService subscribe order placed this handleTopProducts handleTopProducts async data gt this topProductsService updateSales data id export default TopProductsSubscriber Similar to how you implemented TopProductsService you pass the topProductsService in the constructor using dependency injection You also pass eventBusService This is used to subscribe a handler to an event in the constructor You subscribe to the order placed event with this line eventBusService subscribe order placed this handleTopProducts The subscribe method on eventBusService takes the name of the event as the first parameter and the handler as the second parameter You then define in the class the handleTopProducts method which will handle the order placed event Event handlers in Medusa generally receive a data object that holds an id property with the ID of the entity this event is related to So you pass this ID into the updateSales method on this topProductsService to update the number of sales for each of the products in the order Test It OutYou will now test everything out Make sure the server is running If not run it with the following command npm startThen go to the Medusa storefront installation and run npm run devGo to the storefront and place an order This will trigger the TopProductsSubscriber which will update the sales of the products in that order Now send a request to store top products like you did before You should see that sales inside the metadata property of the products in that order has increased Try to add a new product from the admin panel or use the database in the GitHub repository of this tutorial which has an additional product Then try to make more orders with that product You will see that the sorting in the endpoint has changed based on the number of sales ConclusionIn this tutorial you learned how to add custom API endpoint service and subscriber You can use these to implement any custom feature or integration into your store In the next tutorial you will use the API endpoint you created in this part to customize the frontend and add a product slider that showcases the top selling products on your store In the meantime should you have any issues or questions related to Medusa then feel free to reach out to the Medusa team via Discord |
2021-11-08 15:41:34 |
海外TECH |
DEV Community |
How to Add a Default Value to an Existing Column in MySQL |
https://dev.to/bobbyiliev/how-to-add-a-default-value-to-an-existing-column-in-mysql-28dk
|
How to Add a Default Value to an Existing Column in MySQL IntroductionIn this quick tutorial you will learn how to add a default value to an existing column in MySQL PrerequisitesYou always need to be careful when changing the structure of an existing column in your database Make sure to always have backups of your database before making such changes For MySQL you could use the following script to generate a backup of your database Script to backup a MySQL MariaDB database Add a default value to an existingWhen making changes to a column in your database you can use the ALTER TABLE statement followed by the ALTER COLUMN statement The syntax is the following ALTER TABLE name of the table ALTER name of the column SET DEFAULT your new default value Let s say that we had a table called users and a column called is admin We want all new users to have the is admin value set to To do so we would use the following query ALTER TABLE users ALTER COLUMN is admin SET DEFAULT Now if you were to use the DESCRIBE users statement you will get the following output describe users Field Type Null Key Default Extra is admin int NO Add a default value to a new columnIn case that you wanted to actually create a new table with a default value you would again use the ALTER TABLE statement followed by the ADD keyword and the name of the column that you wanted to create Syntax ALTER TABLE name of the table ADD name of the column INT NOT NULL DEFAULT your new default value Let s say that you did not yet have the is admin column form the example above and wanted to create it with a default value of the query would look like this ALTER TABLE users ADD is admin INT NOT NULL DEFAULT Now if you were to create a new record in the users table it would have a default value without you having to specify it ConclusionThis is pretty much it Now you know how to add a default value to both an existing column and to a new column in MySQL To learn more about SQL make sure to check out this free eBook here Introduction to SQL eBookIf you already know the basics and wanted to take your data infrastructure to the next level I would recommend checking out Materialize Materialize is a Streaming Database for Real time Analytics Materialize is a reactive database that delivers incremental view updates and it helps developers easily build with streaming data using standard SQL |
2021-11-08 15:33:31 |
海外TECH |
DEV Community |
30 Projects Ideas! |
https://dev.to/mrdanishsaleem/30-projects-ideas-3e0g
|
Projects Ideas To do list appNote taking appCalendar ApplicationChat SystemWeather applicationPortfolio websiteImage searchChess gameDonation websiteBudget trackerTic Tac Toe gameForm validatorWeb ScraperSimple FTP clientPort ScannerMP PlayerTetris gameNetflix cloneDiscord botVideo chat systemPacman gameAlarm clockStock trading appIssue trackerMusic Store AppTwitter BotSpam ClassifierContent AggregatorSnake gameFile manager Let s connect You can follow me on Twitter LinkedIn amp GitHubIf you like this post Kindly support me by Buying Me a Coffee |
2021-11-08 15:15:06 |
海外TECH |
DEV Community |
SIM Card Based Mobile Authentication with iOS |
https://dev.to/tru-id/sim-card-based-mobile-authentication-with-ios-11n6
|
SIM Card Based Mobile Authentication with iOStru ID SubscriberCheck offers both mobile phone number verification and SIM swap detection SubscriberCheck achieves this by combining the workflows of PhoneCheck which confirms the ownership of a mobile phone number by verifying the possession of an active SIM card with the same number with SIMCheck which provides information on when a SIM card associated with a mobile phone number was last changed SubscriberCheck can be used when augmenting existing FA or anti fraud workflows If you d prefer to go directly to the completed code it s in the sim card auth ios Github repository Before you beginFor development you ll need Xcode An Apple developer account via the Apple Developer PortalAn iPhone or an iPad with a SIM card with an active data connectionNode js installed for the tru ID CLIWith the above in place let s dive straight into adding SubscriberCheck functionality to your iOS applications Set up the tru ID CLI and Run a Development Servertru ID provides a tru ID CLI to quickly set up a development environment and provide a development server on your machine The development server acts as a proxy in between your mobile app and the tru ID servers It also opens up a local tunnel that makes the server publicly accessible over the Internet so your mobile device can still connect to it when on cellular data This architecture means you can focus on the mobile application development during this tutorial Your production architecture should mirror this client server architecture but may not be the same API with your servers acting as a secure proxy to the tru ID APIs See the SubscriberCheck Workflow Integration guide for more details With the background information out of the way sign up for a tru ID account account The account comes with some free credits which you can use during the development and to test your app against the production environment when it is ready Next install the tru ID CLI npm install g tru id cliRun the tru setup credentials command with the credentials you can copy from the tru ID console Install the CLI development server plugin tru plugins install tru id cli plugin dev serverCreate a new tru ID project tru projects create iOSAuthDemoServerThis saves a tru json tru ID project configuration to iosauthdemoserver tru json Run the development server by pointing it to the newly created project directory and configuration tru server t project dir iosauthdemoserverCheck that the URL that is shown in the terminal is accessible in your web browser The URL is in the format https subdomain loca lt This is the public accessible URL to your local development server Create a New iOS ProjectWith the tru ID account created and the development server up and running we can make a start with the application You can skip this step if you already have an iOS project Otherwise Launch your XcodeFile gt New gt ProjectIn the Choose a template for your new project modal select App and click NextSet sim card auth ios as the Product Name however you can use whatever the name of your project isSelect your Team and make sure to assign an organization identifier using a reverse domain notationKeep it simple and use a Storyboard UIKit App Delegate and Swift as the development languageUncheck Use Code Data if it is checked and click NextSelect the folder you want to store your project in and click NextAs you see it is a pretty simple project with a single ViewControlller At this point you do not need to worry about the AppDelegate or SceneDelegate This is enough to demonstrate SubscriberCheck If you already have Xcode and have added your developer account Xcode gt Preferences gt Accounts Xcode takes care of generating necessary certificates and provisioning profiles in order to install the app on the device Build the User InterfaceNavigate to the Main storyboard You need to add a few UI components to receive input from the user and provide feedback Add a UILabel to the View Controller s view as a title with a text Verification A UIActivityIndicator Large to show hide progress when you perform a SubscriberCheckA UILabel with a text Phone number to indicate what the next text field is forA UITextField so that the user can enter their phone numberA UIButton to trigger the SubscriberCheck requestA UImageView to show whether SubscriberCheck is successful or notAll UI components are Horizontally aligned in the container using constraints You should also need to define constraints to anchor the components as well Start with the top Verification UILabel and specify the alignment between the Safe Area and the label Do the same for all other components define a constraint for the Top space and where necessary add additional constraints for width and height The view layout should look like this There are a few configuration options you should add for these UI components Phone number UITextField Select the text field and on the Attributes Inspector scroll to Text Input Traits and change the Content Type to Telephone Number Also change the Keyboard Type to Phone Pad UIActivityIndicator Select the activity indicator and on the Attributes Inspector check Hides When StoppedUIImageView Select the UIImageView and on the Attributes Inspector scroll to Drawing and check HiddenNow you need to define Outlets in the ViewController so that you can control the UI state Let s select ViewController in Xcode and then by using the ⌥ select Main storyboard file Both ViewController swift and Main storyboard should be opened side by side Select the UIActivityIndicator you inserted to the storyboard and with ⌃ key pressed drag a connection from the storyboard to the ViewController swift Xcode indicates possible places in the Editor where you can create an Outlet When you are happy release the keys and mouse trackpad You will be prompted to enter a name for the variable type busyActivityIndicator You need to connect the UITextField UIButton and the UIImageView as well Let s perform the above steps for these as well respectively and name them as follows phoneNumberTextFieldnextButtoncheckResultsThis allows you to retrieve the phone number entered by the user and control the state to provide feedback You now have one last task to do related to the storyboard Let s insert an action When a user taps on the Next button you want the ViewController to know that the user wants to initiate the SubscriberCheck So select the Next button and with your ⌃ key pressed drag a connection from the storyboard to the ViewController swift Xcode indicates possible places where you can create an IBAction When you are happy release the keys and mouse trackpad You will be prompted to enter a name for the method type next and Xcode will insert the method with a IBAction annotation It is time to write some code to manage the UI state The first method you are going to add is controls enabled Bool This method helps us show or hide the checkResults and busyActivityIndicator You should also disable the phoneNumberTextField when the SubscriberCheck flow is in progress MARK UI Controls Configure Enable Disableprivate func controls enabled Bool if enabled busyActivityIndicator stopAnimating else busyActivityIndicator startAnimating phoneNumberTextField isEnabled enabled nextButton isEnabled enabled checkResults isHidden enabled private func configureCheckResults match Bool noSimChange Bool if match let image UIImage systemName person fill checkmark self checkResults image image withRenderingMode alwaysTemplate self checkResults tintColor green else let image UIImage systemName person fill xmark self checkResults image image withRenderingMode alwaysTemplate self checkResults tintColor red You will use these methods later in the next sender Any that is triggered by the user tapping the Next button Models Structs amp ProtocolsNow is the time to create a new group called service in the Project Navigator In here you ll implement Model layer classes structs protocols and enums Note that none of the files in this group should be importing UIKit Create a Swift file in the service group called SessionEndpoint swift In this file we define a protocol called Endpoint and NetworkError of type Enum and a class which implements the protocol Let s define the protocol Endpoint and NetworkError enum as in the following in this file import Foundationprotocol Endpoint var baseURL String get func makeRequest lt U Decodable gt urlRequest URLRequest handler escaping Result lt U NetworkError gt gt Void func createURLRequest method String url URL payload String String gt URLRequest enum NetworkError Error case invalidURL case connectionFailed String case httpNotOK case noData The purpose of the Endpoint protocol is to hide implementation details from the client of this protocol It has two methods and a variable baseURL It represents one REST API endpoint We ll come back to this in more detail later Next define our model object which holds SubscriberCheck results Create a Swift file called SubscriberCheck swift in the service and implement a struct with the same name as below import Foundation Response model based on operation create subscriber checkstruct SubscriberCheck Codable let check id String let check url String let status SubscriberCheckStatus let match Bool let no sim change Bool enum SubscriberCheckStatus String Codable case ACCEPTED case PENDING case COMPLETED case EXPIRED case ERROR tru ID REST API documentation provides us the basis for this struct In production your architecture and servers may expose a different REST response model Also important to note that SubscriberCheck implements the Codable protocol as this will help JSONSerialization data to decode the json response to the SubscriberCheck easily Next define a protocol which will help the View layer to talk to the Model layer implementation The View layer of our application is concerned about what the user is going to request At this layer you shouldn t be concerned about how it is going to be done Since it is all about SubscriberCheck simple Subscriber protocol which defines a function to receive a phone number and provides a closure for the SubscriberCheck results should be sufficient Create a Swift file in the service group called SubscriberCheckService swift In this file define the Subscriber protocol as the following protocol Subscriber func check phoneNumber String handler escaping Result lt SubscriberCheck NetworkError gt gt Void Create a class called SubscriberCheckService in the existing SubscriberCheckService swift file which implements the Subscriber protocol final class SubscriberCheckService Subscriber let path subscriber check init public func check phoneNumber String handler escaping Result lt SubscriberCheck NetworkError gt gt Void Implement the workflow A variable called path is defined to hold the path for the development server endpoint to perform the necessary calls The path is subscriber check for the local development server The check phoneNumber method will contain the logic for the workflow Implement the User ActionAt this point the UI is almost ready to execute the SubscriberCheck workflow Let s first define a variable of Subscriber type in our ViewController and then implement the next sender Any IBAction we previously created Add the following code to the ViewController var subscriberService Subscriber override func viewDidLoad super viewDidLoad subscriberService SubscriberCheckService This initialises subscriberService with a concrete implementation SubscriberCheckService which you defined in the previous section SubscriberCheckService knows how to execute the workflow and all ViewController needs to do is to call check phoneNumber String method and control the UI state It is time to implement the next sender Any It looks as follows IBAction func next sender Any guard let phoneNumber phoneNumberTextField text else return if phoneNumber isEmpty Ideally you should validated phone number against e spec Without leading or s For example country code number Remove double s var strippedPhoneNumber phoneNumber trimmingCharacters in whitespacesAndNewlines if let range strippedPhoneNumber range of strippedPhoneNumber replaceSubrange range with controls enabled false subscriberService check phoneNumber strippedPhoneNumber weak self checkResult in DispatchQueue main async switch checkResult case success let subscriberCheck self configureCheckResults match subscriberCheck match false noSimChange subscriberCheck no sim change false case failure let error print error self controls enabled true The implementation of the next method first checks whether there is text in the phoneNumberTextField and whether it is empty or not Note that in a production code you should validate the phone number against the E specification We are keeping it simple for the purposes of this tutorial by only removing from the beginning of the phone number if it exists and trimming The second step is to disable parts of the user interface show the activity indicator and let it spin when the user taps the Next button The third step is to call the check phoneNumber method of the subscriberService The handler will provide a checkResult which is of type Result lt SubscriberCheck NetworkError gt Note that this closure will not be called in the main queue therefore you need to wrap any code which accesses UIKit in a DispatchQueue main async If the workflow executes successfully then you can access the model details and reconfigure the UI Note that the success case doesn t necessarily mean that validation is successful it is simply an indication that workflow executed without encountering any network errors In order to understand if you validated the phone number you need to inspect the success payload which is of type SubscriberCheck The following line will ensure that validation results are reflected in the UI self configureCheckResults match subscriberCheck match false noSimChange subscriberCheck no sim change false In any case you restore the UI controls back to their original state with the following code so that the user can re execute the workflow if needed self controls enabled true Setup the Network and Define EndpointsYour app may have its own ways for defining and access external service URLs and these endpoints may be stored in configuration files such as a plist or in your Swift code In this tutorial you store the development and production base URLs in a plist called TruIdService Info plist These server endpoints proxy some of the requests through to the tru ID API Create a group called util in the Project Navigator Next create the Property List File gt New gt FileSelect Property List in the dialogClick NextSelect where you want to store the file default selected folder should be fine Type TruIdService Info as the file nameClick CreateYou should see this file created in the util group Now let s add two keys to this plist file one for the development endpoints and one for the production endpoints The values should be String type development server base urlproduction server base urlYou must ensure to assign the correct value to the development server base url in order to complete this tutorial and successfully run the app on your device This value is the one you are provided from the Terminal when you set up and ran your development server at the beginning of this tutorial e g https subdomain loca lt For production setup you should implement your own backend and add this URL here in the production server base url In order to read the plist create a struct called AppConfiguration which deals with loading the correct endpoint so you do not have to worry when you are implementing the use cases import Foundationstruct AppConfiguration let defaultConfigurationName TruIdService Info var configuration String Any mutating func loadServerConfiguration if let path Bundle main path forResource defaultConfigurationName ofType plist let xml FileManager default contents atPath path self configuration try PropertyListSerialization propertyList from xml options mutableContainersAndLeaves format nil as String Any func baseURL gt String var key production server base url if DEBUG key development server base url endif return configuration key as String The AppConfiguration struct simply reaches into the main bundle and searches for a plist called TruIdService Info If found it reads the plist as a dictionary and binds that to the configuration variable This URL is provided to the clients of the struct via the baseURL gt String method Now implement a class called SessionEndpoint within the existing service SessionEndpoint swift file This is our implementation of simple network requests using URLSession You can implement this protocol using URLSession or with Alamofire For the purposes of this tutorial let s keep it simple and implement the protocol using URLSession final class SessionEndpoint Endpoint let baseURL String private let session URLSession init var configuration AppConfiguration configuration loadServerConfiguration baseURL configuration baseURL Fail early so that you know there is something wrong session SessionEndpoint createSession private static func createSession gt URLSession let configuration URLSessionConfiguration ephemeral you do not want OS to cache or persist configuration allowsCellularAccess true configuration waitsForConnectivity true configuration networkServiceType responsiveData return URLSession configuration configuration MARK Protocol Implementation func makeRequest lt U Decodable gt urlRequest URLRequest handler escaping Result lt U NetworkError gt gt Void let task session dataTask with urlRequest data response error in if let error error handler failure connectionFailed error localizedDescription return guard let httpResponse response as HTTPURLResponse contains httpResponse statusCode else handler failure connectionFailed HTTP not OK return guard let data data else handler failure noData return print Response String describing String data data encoding utf if let dataModel try JSONDecoder decode U self from data handler success dataModel return task resume func createURLRequest method String url URL payload String String gt URLRequest var urlRequest URLRequest url url urlRequest setValue application json charset utf forHTTPHeaderField Content Type urlRequest httpMethod method if let payload payload let jsonData try JSONSerialization data withJSONObject payload options prettyPrinted urlRequest httpBody jsonData return urlRequest The init method of the class loads a base URL from the AppConfiguration which you defined earlier It returns a URL for either a development server or a production server depending on the build scheme The final line of the init creates a URLSession using a private static method Note that the createSession method creates a session configuration which doesn t cache or persist network related information it is ephemeral for additional security The rest of the file contains the Endpoint protocol implementation The first method makeRequest lt gt creates a data task using the URLRequest provided and initiates the call When the response is received the method calls the handler closure for success or failure cases If data exists and there are no error scenarios it attempts to decode the data to the model type provided The Result lt gt generic type refers to a model object and an Enum which provides error cases The createURLRequest method receives three parameters HTTP method name the URL and an optional payload if the request is a POST request for instance The method returns a URLRequest object which is then used by the makeRequest lt gt method during the execution of the workflow Implement the WorkflowNow that you have defined the user interface and network request response mechanics let s bridge the two and implement the business logic It is time to talk about the SubscriberCheck workflow before you dive more into the coding The SubscriberCheck workflow has steps Create a SubscriberCheck via the server This will return a check id and check url Then request the check url retrieved in step using the tru ID iOS SDKAs soon as check url request returns retrieve the SubscriberCheck results using the check id retrieved in step The following sequence diagram shows each step including the server to tru ID API interactions Let s implement the workflow in SubscriberCheckService using some helper methods and the classes you created in the previous sections First let s add a variable called endpoint to the SubscriberCheckService and initiate it in the init method The SubscriberCheckService class uses a concrete implementation of Endpoint protocol called SessionEndpoint which you defined in the previous sections This class makes it easier to execute network calls final class SubscriberCheckService Subscriber let path subscriber check let endpoint Endpoint init self endpoint SessionEndpoint Let s also define three methods each corresponding to the steps mentioned above Later we will stitch the steps of the workflow in check phoneNumber method The first method is createSubscriberCheck phoneNumber It makes a POST request to the server to create a SubscriberCheck This call can be made over any type of network cellular wifi The server should return a SubscriberCheck check url Add the following method to the SubscriberCheckService class private func createSubscriberCheck phoneNumber String handler escaping Result lt SubscriberCheck NetworkError gt gt Void let urlString endpoint baseURL path guard let url URL string urlString else handler failure invalidURL return let phoneNumberDict phone number phoneNumber let urlRequest endpoint createURLRequest method POST url url payload phoneNumberDict endpoint makeRequest urlRequest urlRequest handler handler This method receives a phone number constructs the full URL using the endpoint baseURL and the SubscriberCheck path which is defined by the server It creates a payload just the phone number and a URLRequest using the endpoint createURLRequest method Then the method uses the makeRequest method of the endpoint and passes the urlRequest and the handler Our next method is called retrieveSubscriberCheck Add it to the SubscriberCheckService class private func retrieveSubscriberCheck checkId String handler escaping Result lt SubscriberCheck NetworkError gt gt Void let urlString endpoint baseURL path checkId guard let url URL string urlString else handler failure invalidURL return let urlRequest endpoint createURLRequest method GET url url payload nil endpoint makeRequest urlRequest urlRequest handler handler This is very similar to the first method you defined with a few differences You are now calling the endpoint with an extra checkId parameter and this time it is a GET call This method will get the results of the check performed The third method we need to create is doing the heavy lifting using the tru ID SDK Let s create a method called requestSubscriberCheckURL private func requestSubscriberCheckURL subscriberCheckURL String handler escaping gt Void This method requests the check url which will be returned by the createSubscriberCheck In order to do that you need the tru Id iOS SDK Let s add it to our project The tru ID iOS SDK ensures that certain network calls are done on a Cellular network type which is needed to run SubscriberCheck workflow You have two options to add the SDK to your project Using Swift Package ManagerXcode integrates well with Github and you can add Swift Packages very easily In your Xcode go to File gt Swift Packages gt Add Package Dependency Type and tap Next Xcode will find the package select the latest version and then tap Finish to add it Now that the SDK is added you can import it when you are implementing the workflow Using CocoaPodsWhile we recommend using Swift Package Manager tru ID iOS SDK also supports adding your dependencies via CocoaPods If you are familiar with CocoaPods and prefer using it all you need to do is to create a Podfile and add the tru ID pod the following way target MyApp do pod tru sdk ios endMake sure to run pod install in your project directory After the CocoaPods install all necessary pods and configure your project don t forget to open the workspace rather than the project file Request the check urlLet s go back to the SubscriberCheckService and import the TruSDK import TruSDKThen use the SDK within requestSubscriberCheckURL to request the check url private func requestSubscriberCheckURL subscriberCheckURL String handler escaping gt Void let tru TruSDK tru openCheckUrl url subscriberCheckURL something in handler It s that simple As discussed the SDK will ensure that this call will be made over the cellular network When the openCheckUrl calls the closure you call the handler as well You are yet to implement the SubscriberCheckService check phoneNumber method and chain the methods in our check phoneNumber String method So let s do that public func check phoneNumber String handler escaping Result lt SubscriberCheck NetworkError gt gt Void createSubscriberCheck phoneNumber phoneNumber createResult in var checkURL var checkID switch createResult case success let subscriberCheck The server returns the SubscriberCheck results to the device checkURL subscriberCheck check url checkID subscriberCheck check id print Got the subscriber check URL String describing subscriberCheck check url case failure let error handler failure error return print Using the SDK to request check URL over mobile network self requestSubscriberCheckURL subscriberCheckURL checkURL weak self in guard let self self else return print SDK successfully returned let s call our server to retrieve check results self retrieveSubscriberCheck checkId checkID checkResult in switch checkResult case success let checkResultModel handler success checkResultModel case failure let error handler failure error First you make a call using the createSubscriberCheck phoneNumber phoneNumber method The callback to this method inspects the Result lt gt If it is a success it fetches the checkURL and checkID and stores them in local variables which will be used later Within the callback you execute the second step using requestSubscriberCheckURL This method uses the tru ID iOS SDK and makes a call to check url The SDK makes this call over the cellular network so the user must have a data plan Behind the scenes this call will redirect and eventually return OK All this will be handled by the SDK The third step is to make a final request to the server using the checkID that you ve got as a result of making the first call This call will return the SubscriberCheck result whether the check is successful or not Perform your first SubscriberCheckNow that our code is complete you can run the application on a real device Bear in mind that SIM card based authentication is not possible on a Simulator as you require a SIM Card with an active data connection You ve now integrated SubscriberCheck into an iOS application enabling you to both verify a phone number and check if the SIM card associated with the phone number has changed recently All powered by SIM card based mobile authentication Where next The completed sample app can be found in the tru ID sim card auth ios Github repository Take a look at the tru ID iOS SDK on GitHub TroubleshootingIf you have any questions please raise an issue on the GitHub repo Mobile Data is RequiredDon t forget that the SubscriberCheck validation requires your mobile device to have a data plan from your network operator and that you should enable mobile data Get in touchIf you have any questions get in touch via help tru id Or throw me a message on Twitter |
2021-11-08 15:11:00 |
海外TECH |
DEV Community |
Is Crypto More than NFT Scams? |
https://dev.to/fllstck/is-crypto-more-than-nft-scams-1o8p
|
Is Crypto More than NFT Scams Two months ago I started looking into NFTs and crypto in general The hype for NFTs was so high that a client of mine asked if I could write a piece for them to get more exposure in that space I saw the hype too and as with all tech a client asks me to write about I did it Getting paid to learn new tech is pretty awesome and the whole reason why I m doing this writing business anyway Right at the start I saw the first problem with that topic The internet is plastered with investment advice and scammers who wanna sell you their latest media NFT I dug through the crap and decided to buy two books instead of just doing research online Token Economy by Shermin Voshmgir and Hands On Smart Contract Development with Solidity amp Ethereum by Kevin Solorio Randall Kanna and David H Hoover They both gave me some insights into the crypto space in general with its fungible and non fungible tokens and how to implement systems in that space with Solidity It helped that the authors weren t your run of the mill crypto dudes Next I started following some people on Twitter to be up to date on my research and rather quickly I got a taste of the fact that many people hate blockchains I ve been in the IT industry for over a decade and as a JavaScript React and serverless developer I experienced quite some resentment in my time It s nothing new for me to use a promising new technology and find out many people don t like it I wouldn t consider these critics dumb just because they don t understand that specific topic in all its depth I don t understand many things and still can help people with the knowledge I have Also I was in that place myself I saw people I hold in high regard moving into the crypto and I was sad that they would do such a dumb thing How could they support all these scammers with their hideous jpegs How Can Smart People Do This What does “smart people even mean in that context I have the feeling smart doesn t mean smart in the classical sense here The type of people we talk about here are influencers somewhat prominent people in an industry that are either good at marketing or consistent enough to improve their luck with “the algorithm So we re not talking about “people I consider smart but “people whose opinion I like They can be dumb as they come on both sides On a side note I see it as a good sign if I like one opinion of a person and disagree with their other views That way I m sure I m not just doing it because I like that person too much Why did I Leave for Crypto First of all I didn t leave I only got one NFT related article paid for by a client and still make almost all of my money with non crypto related writing But I thought I m fresh in the space and it would remove many assumptions if I just write about my personal experience Next I wouldn t consider myself particularly smart I had many experiences that showed me I m a slow learner Learned swimming with biking with took me years to grasp functions in programming But I made things work with persistence and after some time I figured out what helped me learn better I might not be one of these “smart people who are leaving “the old world for crypto blockchain or web But we also learned that we re not talking about “smart people but just “people whose opinions we value so I don t think it s too far fetched to extrapolate my own experience on other people Why do I spend so much time with crypto Is it more than just a bunch of dudes shilling their JPEG NFTs Is it destroying the environment or could it help society It s FunIt s pretty fun I joined a community of developers that are interested in that space Like many things in this young crypto world the community is just forming and it s just lovely to be part of something that feels new and significant I like to learn about new technology and this is the newest of the new It s InclusiveI also had the impression that the communities I interacted with were pretty inclusive I m a white dude so I m biased but in the two months in that space the books that gave me the most crucial insights were written by women Also I regularly talked with queer people people of color and women I bought and read their books got advice from them and helped them out when they had problems themselves This experience felt like crypto is open for everyone who wants to learn I ve been in IT for over a decade and I encountered that kind of inclusion only recently in communities like one of the Rust programming language It has a Low Entry BarrierThe entry barrier is low for a developer in that space You don t have to sign up for a cloud provider To get started you can just open your browser and use a blockchain There are free blockchain gateways that allow you to connect to a chain from a browser and all the test networks are basically free too and they re already up and running In terms of backend development I m coming from the serverless side of things where things are straightforward but even that feels quite a bit complicated compared to blockchain development Sure signing up for a blockchain gateway service is a good idea when you get into developing smart contracts but it isn t necessary to get started and I d say you can go by for the first one or two weeks without doing it A counterargument here is that the learning resources are a bit cumbersome As an educator I think most people who create learning resources in that space could do a bit better Also the whole security aspect is something that throws people off at the beginning Asymmetric cryptography usually isn t something a developer learns on the side It s a New ParadigmThe next point unique to the blockchain is that it s a new paradigm of doing things Decentralization and protocol level payment integration might seem incredible but not that important Critics say blockchain is like AWS but more expensive slow and bad for the environment And it s already alienating people who are curious about crypto A private message I got on Twitter asked “is this something i should do or is this like a earth harming fracking thing lol i m desperately looking for a developer tech job period Which I found sad It feels a bit like the anti serverless arguments to me Sure a Lambda function is more expensive per execution than a container or VM that s always under full load But that isn t the point Lambda removes much of the work running low level infrastructure brings and in turn removes the costs of that work You might pay more per execution but you can also do with less personnel The same goes for blockchain based infrastructure All the critics are correct but it might be that the points they deem unimportant are so much more valuable in the long run DecentralizationWhile not in full gear with younger blockchains decentralization might be a killer feature alone We ve all seen what happened with Tumblr or how OnlyFans wanted to rid themselves of sex workers We ve all seen the power that payment providers have Even everyday services like social networks are prone to censorship so the whole “is decentralization really needed might not be answered with “yes but only in a very few special cases While decentralized technology is in its infancy and desperately needs improvements especially in terms of energy consumption I think it could be a step in the right direction I don t know how things will go and it probably won t be a utopia in years from now Still decentralized systems could swing the pendulum more to the masses not single entrepreneurs who blow it on space holidays Now you might ask “Why does it have to be blockchain There are decentralized systems out there that are more efficient than blockchains why shouldn t we use those which is an excellent question that brings us to the next point Payment at Protocol LevelWhile payment providers like Stripe made “getting paid for your service simpler in recent years it still feels like payment isn t an integral part of software architectures If it s ad financed you integrate an ad provider it pays you for the ads your users viewed and then you pay your employees cloud provider and hopefully yourself in the end If it s subscription based you integrate a payment provider users pay them for a subscription the provider pays you and you pay what you have to pay etc There are many ways you could make money with your service some more offline some more online but overall they all feel like grafted on a software that could work perfectly well without payment It seems at least to me that blockchains are the first mainstream ish technology that includes payment as an integral part of its design You can t write or execute things on chain without paying for it Heck you can t even deploy your programs on chain without paying for it This makes it obvious right from the start who will pay for all that decentralized infrastructure Smart ContractsSmart contracts are what make decentralization and protocol level payment accessible for the everyday developer While cryptography might not be the most accessible concept to grasp Solidity isn t much more complicated than let s say Python or JavaScript JavaScript gave us much good on the web but it was also used for popups and user tracking I realize that many people out there still think JavaScript is a stain on the internet But I think it s a net plus with all the rich applications I use daily without a need to consider if I have the right operating system or have synchronized my data to all my machines People use them to build cryptocurrencies and now to make NFTs and both have good and bad applications NFTs aren t just about media ownership certificates stored on a blockchain They can be much more proof of access knowledge or membership etc I own two NFTs one for a DAO membership and one for an ENS domain and they have nothing to do with jpeg shilling They can t be “right clicked and saved because the ownership gives me more options than looking at them or listening to them Smart contracts don t solve scamming and their “code is law pledge doesn t fix bad laws in any way They make applying such rules more transparent and remove steps between creating such a law and enforcing it SummaryThe points above work together and set the “like AWS but more expensive slower and worse for the environment and “Is Crypto More than just JPEG NFTs in context Are blockchains more expensive than AWS Sure but you re buying something that is just similar to AWS infrastructure but not the same Depending on your circumstances what you buy can have much more value than what AWS is selling Are blockchains slower than AWS Sure they have limited application and in many cases you might not be able to wait for the execution of a transaction If you need blockchain specific features waiting might not seem bad Are blockchains bad for the environment I don t know They might be but this question isn t trivial to answer It s not that you replace AWS with Ethereum and everything else stays the same A blockchain gets you rid of payment providers and banks which all have a pretty hefty CO footprint themselves With every update these systems get more efficient and some layer two solutions for Ethereum already claim to be carbon neutral Is there more to it than JPEG shilling I very much think so NFTs are a way for artists to make money and where money can be made scammers aren t far This is what s in the news right now but NFTs isn t just about media ownership they can be so much more and already are “Code is law might not lead to just laws but it removes much of the interpretations between the creation of law and its application which can help eliminate some amount of human bias What Does the Future Bring Just to make things clear I don t know if the upsides will play out in the long run In the end it might very well be that the old wealthy class will take over the blockchain space and distribute it between themselves like they always did At least right now the whole blockchain space feels like in the s when the internet was in its infancy What about me Will I keep using non blockchain technology Of course I love serverless tech and for many workloads spinning up a Lambda function or a Cloudflare Worker is more than enough But blockchain technology opened my eyes to solutions to problems I knew existed but had no idea how to solve them So when I now try to build something I ask myself which part of the system should better live on chain |
2021-11-08 15:10:45 |
海外TECH |
DEV Community |
A Web Developer's Guide to Making Your First Personal Website and Blog |
https://dev.to/rossettiquette/a-web-developers-guide-to-making-your-first-personal-website-and-blog-22j2
|
A Web Developer x s Guide to Making Your First Personal Website and BlogI struggled for a really long time to create a website for myself and start writing online I had a list of all the features my site just had to have before launch I d start working on it but as a junior dev I learned new things at a crazy pace And whenever I learned a new tool or acquired a new skill or improved my design abilities my list of must have features grew The bar kept moving up and up and the personal website project kept getting scrapped and started again from scratch with the latest and shiniest tech stack that I d just picked up In the end a shift in mentality gave me the push I needed to launch my blog in early access mode an MVP that I can build up gradually and share the growth process with my readers In this article I want to show you a practical step by step guide on taking that same leap yourself Why you should start writing onlineAs a fellow software engineer you re probably already sold on the idea that having a personal website is a great investment for your career Unlike a social media account you have full control over both the platform and the content Any prospective client or employer will google your name and if your website is a top search result it gives you an opportunity for a genuine first impression not one that is curated by some company s discovery algorithm or advertising interests Making a habit of writing about your professional niche on your own blog helps you become a better writer and a better communicator The ability to document the things you learn and to explain how a block of code works are highly sought after skills in the tech world There are few things more frustrating than working with a framework or tool that doesn t have well written documentation or clear examples Writing about your work is an excellent way to have a wider impact in your profession Even if you re not the most authoritative figure on a subject when you share the challenges you ve faced and the things you ve learned it s from your unique point of view And that s very relatable and valuable to someone who is new to a problem that you ve only recently solved When you start building up a significant body of written work you ll find yourself exposed to interesting opportunities for consulting and speaking engagements It leads to professional connections and invaluable networking opportunities Alternatives to coding the website yourselfWebsite builders like Squarespace Wix Ghost and Wordpress are great tools for most developers looking to start a personal website They re very quick to set up start off at affordable prices and allow you to focus on writing rather than worrying about design accessibility infrastructure maintenance and security All of the previously mentioned options allow you to own your content and publish on your own domain In addition you can also consider an online publishing platform Hashnode Medium Dev To etc Some allow you to publish using your own domain and all have the advantage of built in discoverability since they re platforms used by like minded developers to share and learn In fact a great strategy is to cross publish to these online publications to increase your reach And if you research web content syndication and understand cannonical links you ll make sure that your own website s search rankings aren t affected by duplicate content across the web Coding your own websiteIf you re just starting out with learning web development if you have limited time that you can spend tinkering with your website or if you re in an ancillary role such as developer advocacy or management then going with an online publication or a website builder is probably a better option than coding your own Most of your readers are going to care about the content and quality of your writing rather than your technology stack Choosing an off the shelf website builder as a web developer can feel a bit awkward but it s important to prioritize putting your writing out there And if you lack the time or technical ability than starting out with an off the shelf solution is better than having no web presence at all With those disclaimers out of the way I do think that coding your own website can be really rewarding and fulfilling It allows for endless customization options the choice for any technology stack and the opportunity to experiment with new tools on a real world project And if you do decide to code your own my advice is to ship your website as quick as possible starting with a small MVP and building it up in public while sharing that process with your readers Tools and technology stacksWhen it comes to coding your own website there are so many tools available to streamline that process You could opt to use plain HTML CSS and JS and that s a fantastic choice for someone who hasn t yet dabbled in JS frameworks like React Vue or Angular As your project grows in time you may run into problems maintaining and scaling your website the very problems those frameworks were made to solve But focusing on the fundamentals is a great way to get practice and start building a writing habit If you re familiar with a framework I recommend that you research and pick a static site generator that s built on it In this guide I m going to show you how to bootstrap a project using GatsbyJS which is built on React As a React developer I think you d be hard pressed to find a better tool for building a personal website It s even mentioned in React s official documentation as their recommended solution for building static content oriented websites How to code and deploy your own website using Gatsby V amp NetlifyThe following guide should take around an hour to complete and is written for web developers who have at least some basic knowledge of command line version control and a modern Javascript framework preferably React You don t need to have advanced experience with any of the these but if you re very new to web development hello welcome it s so nice to have you here I would recommend that you skip this guide and set up your site using a developer friendly publication I personally endorse Hashnode since they allow you to publish on your own domain but Dev to and Medium are also very popular with developers Before you get started it s good to have a look at what you re going to be building towards You re going to be working from the Gatsby official starter template to create a simple page with a list of blog posts and personal bio It s a great little MVP to add to over time and today you can customize all your personal details and even write your first post Ready Let s beginGo through the following checklist and make sure you have NodeJS installed on your computer v or newer A modern code editor I love VS Code Your preferred flavour of version control and an account with a repo hosting service I ll be using git and GitHub An account with a website hosting service capable of deploying a Gatsby project I use Netlify but other popular options are Gatsby Cloud Vercel GitHub Pages etc An hour of uninterrupted timeA soothing cup of your favourite hot beverage I m going to have an Earl Grey To create a Gatsby project you ll need to install the Gatsby CLI Open up the command line I use the integrated terminal inside VS Code and run the following command npm install g gatsby cliThis will also update you to the latest version if you have an older one installed To make sure you re on version or newer type the following gatsby versionNext use the command line to navigate into the folder where you want to create your new project I ll be using a folder called Tutorial which is located on my Desktop cd Desktop TutorialAs mentioned you re going to be working from the official starter template provided by the Gatsby team which already has the boilerplate and configuration to create a basic blog Run the command gatsby new followed by the name of the folder where you want the site to be created followed by the name of the repo where the starter files are hosted I ll choose to name my folder my tutorial site gatsby new my tutorial site Depending on your internet speed it may take up to a few minutes for the project to be downloaded and set up You ll know that Gatsby has finished doing its magic when you see the success messages in your terminal Navigate into your newly created folder cd my tutorial siteNow start a local development server by running the following command gatsby developWait for Gatsby to finish making your dev build and start up your development server You ll know that s done when you see the following output in the console You can now view gatsby starter blog in the browser ⠀ http localhost ⠀View GraphiQL an in browser IDE to explore your site s data andschema⠀ http localhost graphqlOpen a new browser tab and navigate to https localhost And there s your website You should be able to see changes you make and save in your codebase in real time on your website as long as your development server is running To quit type CTR C in your terminal Remember that you can start your development server again at any time using the gatsby develop command Before you start making modifications to the template you should back up this project with version control You ll need that set up to deploy it to a hosting service anyway so you might as well do it now Create a new repository with your repo hosting service If you re using GitHub click the plus icon on the top navigation bar and select New repository from the dropdown On the new repo creation form I like to match the repository name to the name of the project folder on my local drive You can choose to make the repo private or public that s up to your personal choice and it won t affect your ability to follow along with the rest of this guide I prefer to keep my personal website closed source but I ll leave this example project open source so that anyone can have a look at the code Leave the rest of the options unchecked and press the Create repository button Next copy the remote URL from the top of the Quick Setup page You re going to return to you terminal to push your local code to the newly created GitHub repository Stop your development server by using CTR C in the terminal then type the following commands and make sure you insert the URL you just copied instead of lt YOUR REPO URL gt git remote add origin lt YOUR REPO URL gt git push u origin mainRefresh your GitHub repo page and check to make sure your files have been uploaded It should look something like this While you re still on the repo page take a moment to look at the readme info to familiarize yourself with the file structure and make sure you understand roughly how the project is laid out Next comes the fun part you re going to start customizing the template to make your own unique website Open the gatsby config js file that s located in the root of your project folder Edit the siteMetadata object to replace the starter data with your own Here s my progress siteMetadata title Jane Doe s Blog author name Jane Doe summary who lives and works in London building awesome things description Jane Doe s blog about web development siteUrl social twitter janedoedev Fill out the summary with your own mini bio information Then if you get stuck filling the siteUrl because you don t have a domain name yet this is a great time to take a break and go purchase one from any reputable registrar I use Google domains but you can shop around to get the best offer If your own name isn t available with the com extension try looking for a popular alternative like dev io tech or me Save your progress and check to see the changes reflected on the website Whenever changes are made to the gastby config file the development server needs to be restarted in your terminal use CTR C to stop the process then type gatsby develop to start it up again Your page should now look different from the starter Now it s time to swap out the image assets for your own I created an avatar using Hexatar but if you already have a profile picture you can place a copy of it in the src images folder Open the bio js file it s located in the src components folder which exports the React component that renders the profile image Find the lt StaticImage gt component and change the src prop to match your own image path Save your work and check out the progress You also need to replace the Gatsby logo with your own favicon The image that s included in the starter is a xpx png file so I recommend you stick with this If you don t have a personal brand logo that you usually use I recommend going with your initials over a solid background I ve taken inspiration from the javascript logo and created this template in Figma for you to customize and download you may need an account with Figma to access the file There s also a version on Canva if you prefer it Once you re done editing the file click the export button in the right pane make sure nothing is selected in order to get the correct context menu Place a copy of your logo file into the src images folder then reopen the gatsby config js file and search for the website manifest information use CTR F in the IDE to search for the keyword manifest Change the name and short name to your own data and replace the gatsby icon image path with your own logo path Save the file restart your development server and refresh your browser window You can now delete the original profile pic png and gatsby icon png from src images folder that are no longer needed The next step is tackling the blog posts located in content blog To automate a lot of the heavy lifting Gatsby programmatically creates HTML from files that are written in markdown text files with the md extension If you haven t written in markdown before check out this guide It s a friendlier alternative to HTML that supports links images and basic text styling like headings bold italic bullet points etc Every folder inside content blog contains a markdown file named index md Go ahead and open up the markdown file inside the hello world folder The first part of the file contains frontmatter which is metadata that can be used by Gatsby in a few different ways In this example the dates are used to sort the posts chronologically on the front page The details about how Gatsby uses frontmatter are beyond the scope of this guide but you can read more about it including how to add your own fields in the official documentation For now leave the title and description unchanged but update the date to the current day Next delete the rest of the post and try your hand at writing your first article Make it short and sweet It doesn t need to be your best writing If you re lacking inspiration try jotting down some notes about the reasons why you chose to code your own website over going with a website builder or publishing platform the struggles you ve faced up to this point and what you hope the blog will blossom into When you re done save your work and delete the other two blog post folders When you go back to write your next posts keep in mind that Gatsby uses the folder names to create the slugs in my example a folder named my second entry will create a page available at janedoe com my second entry while the title displayed on the pages comes from the frontmatter Save your work and double check that all links work that your profile image displays correctly that the favicon is picked up by the browser and that you ve updated all the personal information with your own When you re satisfied that everything is as it should be commit your changes with git git add git commit m Changed personal info and added first blog post git push That s it All you need to do now is share it with the world I ve been using Netlify to host static websites as they have a generous free tier and their terms of service allow commercial use on their unpaid package Log in to your Netlify account and click the New site from Git button on your dashboard On the next page select your git host and follow the directions to authorize Netlify to access your account Next select your project repository from the list of all repos hosted on your account On the Settings Configuration page set your deployment branch to main the build command to gatsby build and the publish directory to public When you re done hit the Deploy site button It takes a few minutes for Netlify to build the site so get up and have a stretch Every time you push a new change to your main branch Netlify will automatically trigger a new build so it s worth getting used to experimenting with new features on different git branches rather than committing everything to main When you come back you should have a live website Netlify provisions a temporary site name so go ahead and add your own domain And that s it Your website is live so go check it out and share it with the world That s a wrap Congratulations Make a plan to regularly come back to your website to post new articles and continue to add features If you re new to Gatsby start by reading their brilliant documentation Try your hand at changing the styling adding support for MDX and create a few more pages like an about or contact page Document your journey building up your website by writing articles for your blog I hope you found this guide useful and if you followed all the way through share your new website with me on twitter I d love to see it Cheers |
2021-11-08 15:07:07 |
Apple |
AppleInsider - Frontpage News |
How to turn your iPhone into an image scanner in iOS 15, and when you shouldn't |
https://appleinsider.com/articles/21/11/08/how-to-turn-your-iphone-into-an-image-scanner-in-ios-15-and-when-you-shouldnt?utm_medium=rss
|
How to turn your iPhone into an image scanner in iOS and when you shouldn x tApple wants you to scan documents with your iPhone and has given us all very good tools for doing so ーbut there are more and sometimes much better alternatives Adobe Scan is a particularly good scanning app for iPhoneYou do already have a document scanner in your iPhone with its regular camera and you always have had So even without using Apple s newer tools and features there is nothing to stop you just taking a normal photograph of a page There s nothing to stop you doing it on an iPad either except that it s substantially harder to hold one of those steady over a document and without casting a shadow Read more |
2021-11-08 15:59:07 |
Apple |
AppleInsider - Frontpage News |
Cubii Pro Under-Desk Elliptical Review: Keep yourself active while working or watching TV |
https://appleinsider.com/articles/21/11/08/cubii-pro-under-desk-elliptical-review-keep-yourself-active-while-working-or-watching-tv?utm_medium=rss
|
Cubii Pro Under Desk Elliptical Review Keep yourself active while working or watching TVIf you don t want to entirely rearrange your desk setup to accommodate an under desk treadmill nor to balance precariously on a bike desk all day Cubii gives you a quiet low impact way to stay active at your desk Sitting all day isn t good for you This isn t a controversial take by any means but if you work a desk job chances are it s an unfortunate thing you ve got to contend with Sure there are standing desks but as it turns out standing all day isn t great either ーjust ask your local cashier Read more |
2021-11-08 15:19:46 |
Apple |
AppleInsider - Frontpage News |
Best deals Nov. 8: $430 AirPods Max, Intel iMacs on sale, buy two books get one free, and more |
https://appleinsider.com/articles/21/11/08/best-deals-nov-8-430-airpods-max-intel-imacs-on-sale-buy-two-books-get-one-free-and-more?utm_medium=rss
|
Best deals Nov AirPods Max Intel iMacs on sale buy two books get one free and moreAlongside big savings on the Intel iMac Monday s best deals include savings on rugged LaCie drives and Elgato streaming gear There are a lot of sales each day but only a handful are worth pursuing So rather than sifting through miles of advertisements we ve hand picked a bunch just for the AppleInsider audience If an item is out of stock it may still be able to be ordered for delivery at a later date These deals won t last long so act fast for anything that might be of interest to you Read more |
2021-11-08 15:16:06 |
海外TECH |
Engadget |
The best digital gifts to send your friends and family |
https://www.engadget.com/holiday-gifts-digital-and-subscription-gifts-160041638.html?src=rss
|
The best digital gifts to send your friends and familyIn a world where so much of our lives revolve around digital services giving someone a virtual gift no longer has a stigma attached to it For gadget lovers who seemingly have everything or someone getting an exciting new piece of hardware this holiday digital gifts can help them get even more out of things they own and love This year we re including time tested music and TV streaming services some game subscriptions and practical options like learning services to keep your brain both calm and limber just as the new year gets here Apple OneAppleIf you know someone with multiple Apple devices chances are good they re already paying for a little bit of iCloud storage and maybe a few other Apple services like Music or Arcade as well If that s the case consider gifting them an Apple One subscription In a single monthly charge Apple offers a combo of Apple Music Apple TV Apple Arcade and either GB GB or TB of iCloud storage If you spring for the Family plan that GB can be shared with five other family members The plan adds subscriptions to Apple News and Apple Fitness too At this point all of Apple s offerings are pretty good Arcade has a load of fun games with no ads TV has Ted Lasso and Music is second only to Spotify in the streaming world Buy Apple One starting at Xbox Game Pass img alt Microsoft Xbox Game Pass Ultimate src MicrosoftGetting an Xbox Series X or Series S this holiday season is likely going to be difficult But if you know someone who managed to get their hands on Microsoft s latest console Xbox Game Pass is an outstanding addition to their new console A month subscription offers more than games that can be played on the Xbox or PC and they can be streamed to phones and tablets as well Xbox Game Pass Ultimate also includes a number of other perks including Xbox Live Gold That s usually a month on its own and it s a requirement if you want to play games online It also includes EA Play which opens up access to more games for the Xbox and PC Perhaps the best part of Xbox Game Pass though is that it offers access to first party Xbox Game Studios titles the day they re released so you don t even have to purchase them For an Xbox owner it s a no brainer If the person you re shopping for is a PlayStation owner PlayStation Now offers access to hundreds of streaming games for year or month while Nintendo s Switch Online unlocks online play and a large selection of NES Super NES Sega Genesis and N games for year Buy Xbox Game Pass at Microsoft monthBuy PS Now months at Amazon Buy Switch Online months at Amazon YouTube Premium img alt YouTube Premium src Will Lipman Photography for Engadget YouTubeThere s something for everyone on YouTube ーand there are also enough ads to make watching it pretty painful Shrewdly YouTube offers a solution A month subscription removes the ads but there are a number of other benefits as well If you re watching on a phone or tablet you can download basically any video and save it for offline playback Videos also can play in the background which means you can switch to other apps without stopping This comes in handy for picture in picture or if you just want to hear the audio while you switch away to send a text message Premium also comes with a subscription to YouTube Music the company s competitor to Spotify and Apple Music It s a pretty solid service and it does a few things that Apple and Spotify can t offer For example all of YouTube s music video content lives alongside its standard streaming catalog which means users can build playlists that combine videos uploaded to YouTube alongside official artist releases For the combination of a better YouTube experience and a full fledged music streaming app is a pretty good deal Buy YouTube Premium monthThe Disney BundleDisneyDisney s month video bundle that includes Disney ESPN and Hulu is a great digital gift for basically anyone who likes good entertainment The appeal of Disney is well known at this point it includes basically all of Disney and Pixar s classic animated films alongside basically everything in the Marvel cinematic universe the entire Star Wars saga and new original shows like WandaVision The Mandalorian The Bad Batch and more Hulu offers a vast slate of current and classic TV shows a solid rotating selection of feature films and a growing roster of originals Those include The Handmaid s Tale Little Fires Everywhere Veronica Mars Shrill Pen and plenty more ESPN meanwhile offers a host of live sports including MLB games every day of the season a wide variety of soccer leagues golf tennis and college games across multiple sports Add in ESPN s for documentary library and a smattering of originals and the Disney bundle ends up being a great option for almost anyone ーand it s only more than Disney on its own Buy Disney Bundle monthHBO MaxHBO MaxHBO Max might not have the best app we ve ever used but it does have one of the biggest and best video libraries you can find Its collection of original shows and films is still unrivaled in a lot of ways from classics like The Wire and The Sopranos to newer hits like Mare of Easttown and Succession The service also has a huge movie library and lately it s offered a number of movies at the same time as their theatrical release For example The Matrix Resurrections is going to hit HBO Max just a few days before Christmas and will stream there for a month Speaking of new HBO content Curb your Enthusiasm is coming back to HBO for an th season this fall And if you re a DC fan HBO Max has all of the classic Batman movies including the Dark Knight Trilogy and Michael Keaton s two films as well as more recent films like Aquaman Wonder Woman and of course the infamous Synder Cut of Justice League Oh yeah it has Friends too Buy HBO Max starting at monthHeadspaceHeadspaceChances are good that after the year we ve all had you know someone whose mental health could use a little bit of a boost The Headspace app is a great option for adding some peace and quiet to the day It features a wide variety of guided meditations including sessions for beginners as well as specific exercises that focus on reducing anxiety learning breathing techniques increasing your compassion and so on It also has sleep tools like soothing music and quot sleepcasts while other audio programs center on focusing moving more and starting your day For month or year Headspace can be a great tool to bring someone much needed peace of mind Buy Headspace monthEndel premium subscription img alt Endel src EndelEndel is a unique app in the focus and mental wellness space In a nutshell it plays algorithmically generated soundscapes for a variety of different scenarios Whether you re actively on the go want to get some work done need to relax or get some sleep Endel will produce a soundtrack to help you achieve your goal If you give it permission to collect data from your phone and Apple Watch if you have one it can adjust its soundscapes based on things like your heart rate time of day location weather and so on Endel is also frequently adding scenarios ーrecently the company added study and recovery and it also has something called an AI Lullaby that was created in partnership with Grimes At per month or per year it s a solid relaxation tool and I ve also found it to be particularly useful as a soundtrack when you want to just sit down and focus on a craft like writing or art Buy Endel Premium monthCodecademy img alt Code Academy for the Engadget Holiday Gift Guide src Will Lipman Photography for Engadget Code AcademyIf you know someone interested in making a jump into coding or a coder looking to augment their existing knowledge a subscription to Codecademy could be a big help A annual subscription or month opens up a huge catalog of courses including things like a career path for front end engineering learning JavaScript or Python digging into development or data science and many other options Along with these courses Codecademy also connects you with a large community for support and feedback gives you real world projects to test your skills on and offers completion certificates It s a bit of an investment but helping someone you care about invest in themselves is very much in the spirit of the holidays Buy Codecademy yearSkillshare img alt Skillshare src SkillshareIn the same vein as Code Academy Skillshare is a great option if you know someone who wants to jumpstart their abilities in a creative field The service offers thousands of classes in topics like animation creative writing graphic design photography web development and music as well as courses to improve skills like leadership and management marketing or business analytics A annual subscription or month each with a free month included unlocks ad free classes with unlimited access to everything Skillshare has to offer The subscription also includes access to Skillshare s community and offline courses for your phone or tablet Finally a subscription includes some perks of its own like percent off Squarespace and percent off Adobe Creative Cloud Buy Skillshare monthParallels Toolbox img alt Parallels Toolbox src ParallelsParallels Toolbox is a great gift for the tinkerer in your life You know the kind of person who wants to tweak and optimize everything they can on their computer so that everything works just right For year Parallels Toolbox offers a surprisingly wide variety of utilities for macOS and Windows including shortcuts to see your clipboard history capture screens shots convert video files download audio from websites resize images and and many more Most of these things can be done using built in utilities or other apps but having such a wide variety of quick and useful tools right in one place can be a major productivity boon especially for the power user in your life Buy Parallels Toolbox yearPasswordPasswordIf you know someone who doesn t use a password manager do them a huge favor and get them set up with Password this holiday season It s one of the best options available it works on unlimited devices and is available on pretty much any platform you can think of Naturally it features two factor authentication for additional security and gives you days to restore any passwords you may have deleted It s a year for an individual or a year for a family of five That family membership can be particularly useful if you need to share account passwords between members of a household securely It s not the flashiest gift but I wager that once you get someone on board they ll wonder how they went so long without using it Buy Password yearAdobe Creative Cloud Photography plan img alt Adobe Photography Lightroom plans for the Engadget Holiday Gift Guide src Will Lipman Photography for Engadget AdobeFor the budding photographer in your life Adobe s photography plans are a natural fit Adobe has been in this game for years and Lightroom remains an excellent tool for managing and editing photos anywhere you are The company offers a few different plans For month you can get both Lightroom and Photoshop along with GB of cloud storage to sync images and edits across your devices For the same price you can also get Lightroom only but with a whopping TB of storage If the person you re gifting this to has been really good you can spend and get them both Photoshop and Lightroom alongside TB of storage which is ideal for anyone shooting photos in RAW The plans with Photoshop also include Photoshop for the iPad so keep that in mind if you re getting this for someone who loves Apple s tablet Buy Adobe CC Photography plan starting at month |
2021-11-08 15:30:32 |
海外TECH |
Engadget |
Anova's Sous Vide Precision Cooker Pro is half price at Amazon |
https://www.engadget.com/anova-sous-vide-precision-cooker-pro-half-price-amazon-good-deal-150721840.html?src=rss
|
Anova x s Sous Vide Precision Cooker Pro is half price at AmazonIf you re looking for a holiday gift for that budding chef in your life or if you want another useful tool in your own kitchen it s worth taking a look at Anova s Sous Vide Precision Cooker Pro The gadget which aims to make sous vide cooking a breeze is currently on Amazon ー off the regular price It s not quite the lowest price we ve ever seen for the gizmo which was but it s not far off at all Buy Anova Precision Cooker Pro on Amazon The sous vide cooking method requires putting food in a sealed bag and placing it in water The Precision Cooker Pro which attaches to your pot maintains precise temperatures and keeps circulating the water to ensure your food cooks evenly The idea is that you should have perfectly cooked food every time without having to keep a close eye on it You can adjust the settings using Anova s companion app or the on device controls The app has thousands of free recipe suggestions as well so you ll always have something new to try The Precision Cooker Pro is Anova s most powerful sous vide device It can heat up to gallons of water using watts of power Anova says the device can run for up to hours before shutting down It s a fairly sturdy machine too The Precision Cooker Pro is made with stainless steel and should withstand accidental drops It s IPX rated as well so if you dunk it in water by mistake it should still work Get the latest Black Friday and Cyber Monday offers by visiting our deals homepage and following EngadgetDeals on Twitter |
2021-11-08 15:07:21 |
海外TECH |
The Apache Software Foundation Blog |
The Apache News Round-up: week ending 5 November 2021 |
https://blogs.apache.org/foundation/entry/the-apache-news-round-up251
|
The Apache News Round up week ending November Welcome November we ve closed October with another great week Here are the latest updates on the Apache community s activities ASF Board nbsp management and oversight of the business affairs of the corporation in accordance with the Foundation s bylaws nbsp Next Board Meeting November Board calendar and minutes ApacheCon nbsp the ASF s official global conference series bringing Tomorrow s Technology Today since nbsp Our events are complete thanks to all speakers sponsors participants and planners for their great turnout nbsp Presentations for ApacheCon Asia and ApacheCon Home are available on the ASF YouTube channel ASF Infrastructure nbsp our distributed team on three continents keeps the ASF s infrastructure running around the clock nbsp M weekly checks yield uptime at Performance checks across different service components spread over more than machines in data centers around the world View the Apache Infrastructure Uptime site to see the most recent averages Apache Code Snapshot nbsp Over the past week Apache Committers changed lines of code over commits Top contributors in order are Jean Baptiste Onofré Claus Ibsen Yuan Tian Andrea Cosentino and Sebastian Rühl nbsp Apache Project Announcements nbsp the latest updates by category Big Data nbsp Apache Arrow released nbsp Apache Avro releasedContent nbsp Apache POI releasedEnterprise Processes Automation ERP nbsp Apache OFBiz releasedLibraries nbsp Apache Commons CLI releasedNetwork Client Server nbsp Apache MINA and released nbsp nbsp CVE HTTP listener DOSObservability nbsp Apache SkyWalking Java Agent releasedServers nbsp Apache Traffic Server and released nbsp Apache HttpComponents Client alpha releasedWeb Frameworks nbsp Apache Wicket releasedWorkflow nbsp Apache Airflow released nbsp Apache DolphinScheduler CVE mysql jdbc connector parameters deserialize remote code executionDid You Know nbsp Did you know that the following Apache Projects are celebrating anniversaries this month Congratulations to Apache Ant years HttpComponents years Attic Buildr CouchDB and Qpid years ComDev years OODT and ZooKeeper years Kafka and Syncope years Ambari years BookKeeper and Drill years Brooklyn Groovy Kylin and REEF years Geode years Guacamole and Impala years Griffin years Petri years as well as Superset and TVM year nbsp Did you know that Druid Summit Americas and EMEA events and watch parties start on November Secure your spot today nbsp Did you know that Ignite Summit Cloud Edition kicks off on November Learn more at Apache Community Notices The Apache Month in Review October nbsp nbsp and video highlights nbsp Watch quot Trillions and Trillions Served quot the documentary on the ASF full feature min quot Apache Everywhere quot min quot Why Apache quot min nbsp “Apache Innovation min nbsp nbsp ASF Annual Report FY Press release nbsp and Report PDF nbsp The Apache Way to Sustainable Open Source Success nbsp nbsp Foundation Reports and Statements nbsp Presentations from ApacheCon Asia are available on YouTube nbsp quot Success at Apache quot focuses on the people and processes behind why the ASF quot just works quot nbsp nbsp Inside Infra the new interview series with members of the ASF infrastructure team meet nbsp nbsp nbsp Chris Thistlethwaite nbsp nbsp nbsp Drew Foulks nbsp nbsp nbsp Greg Stein Part I nbsp nbsp nbsp nbsp Part II nbsp nbsp and Part III nbsp nbsp nbsp Daniel Gruno Part I nbsp nbsp and Part II nbsp nbsp nbsp nbsp Gavin McDonald Part I nbsp nbsp and Part II nbsp nbsp nbsp nbsp Andrew Wetmore Part I nbsp nbsp and Part II nbsp nbsp nbsp Chris Lambertus Part I nbsp nbsp nbsp and Part II nbsp nbsp Follow the ASF on social media TheASF on Twitter nbsp and The ASF page LinkedIn nbsp nbsp Follow the Apache Community on Facebook nbsp and Twitter nbsp nbsp Are your software solutions Powered by Apache Download amp use our quot Powered By quot logos Stay updated about The ASFFor real time updates sign up for Apache related news by sending mail to announce subscribe apache org and follow TheASF on Twitter For a broader spectrum from the Apache community nbsp nbsp provides an aggregate of Project activities as well as the personal blogs and tweets of select ASF Committers |
2021-11-08 15:31:47 |
海外科学 |
NYT > Science |
Lights Out: 5 New ‘Dark-Sky Places’ for Top-Shelf Stargazing |
https://www.nytimes.com/2021/11/06/us/dark-sky-parks-us.html
|
Lights Out New Dark Sky Places for Top Shelf StargazingThe International Dark Sky Association awards certifications to sites with exceptionally high quality night skies including national parks sanctuaries and reserves |
2021-11-08 15:40:23 |
海外科学 |
NYT > Science |
Young Women Are Leading Climate Protests. Guess Who Runs Global Talks? |
https://www.nytimes.com/2021/11/06/climate/climate-activists-glasgow-summit.html
|
Young Women Are Leading Climate Protests Guess Who Runs Global Talks There s a clear gender and generation gap at the Glasgow talks and the two sides have very different views on how to address global warming |
2021-11-08 15:41:48 |
海外科学 |
NYT > Science |
Greta Thunberg, at COP26, Says Talks Are Becoming a ‘Greenwash Campaign’ |
https://www.nytimes.com/2021/11/04/climate/greta-thunberg-cop26.html
|
Greta Thunberg at COP Says Talks Are Becoming a Greenwash Campaign Ms Thunberg and other activists also spoke about the critical role that young women have played in pressuring world leaders to take action on climate change |
2021-11-08 15:39:07 |
金融 |
RSS FILE - 日本証券業協会 |
J-IRISS |
https://www.jsda.or.jp/anshin/j-iriss/index.html
|
iriss |
2021-11-08 15:34:00 |
金融 |
金融庁ホームページ |
審判期日の予定を更新しました。 |
https://www.fsa.go.jp/policy/kachoukin/06.html
|
期日 |
2021-11-08 16:00:00 |
金融 |
金融庁ホームページ |
三信建設工業(株)株式に係る仮装売買及び公開買付者との契約締結交渉者による三信建設工業(株)株式に係る内部者取引審判事件の第1回審判期日開催について公表しました。 |
https://www.fsa.go.jp/news/r3/shouken/20211108.html
|
三信建設工業 |
2021-11-08 16:00:00 |
ニュース |
BBC News - Home |
Azeem Rafiq: Yorkshire's new chair Lord Patel says ex-player should be praised as 'whistleblower' |
https://www.bbc.co.uk/sport/cricket/59206664?at_medium=RSS&at_campaign=KARANGA
|
Azeem Rafiq Yorkshire x s new chair Lord Patel says ex player should be praised as x whistleblower x Azeem Rafiq should be praised for his bravery and should never have been put through the Yorkshire County Cricket Club racism scandal says the club s new chair Lord Patel |
2021-11-08 15:51:41 |
ニュース |
BBC News - Home |
David Fuller: Independent investigation announced into mortuary abuse |
https://www.bbc.co.uk/news/uk-england-kent-59207611?at_medium=RSS&at_campaign=KARANGA
|
investigator |
2021-11-08 15:52:53 |
ニュース |
BBC News - Home |
Eddie Howe: Newcastle United appoint former Bournemouth boss as new head coach |
https://www.bbc.co.uk/sport/football/59172217?at_medium=RSS&at_campaign=KARANGA
|
coach |
2021-11-08 15:36:26 |
ニュース |
BBC News - Home |
Eddie Howe: What can Newcastle expect from new manager? |
https://www.bbc.co.uk/sport/football/56625105?at_medium=RSS&at_campaign=KARANGA
|
newcastle |
2021-11-08 15:13:44 |
北海道 |
北海道新聞 |
親イラン民兵が暗殺未遂か イラク首相標的、緊張も |
https://www.hokkaido-np.co.jp/article/609431/
|
首都 |
2021-11-09 00:12:00 |
北海道 |
北海道新聞 |
ベラルーシ国境に移民多数 ポーランドが軍派遣、警戒 |
https://www.hokkaido-np.co.jp/article/609430/
|
警戒 |
2021-11-09 00:02:00 |
コメント
コメントを投稿