IT |
気になる、記になる… |
「Twitter Blue」の年間プラン、iOSアプリからも申し込み可能に |
https://taisy0.com/2023/02/27/168983.html
|
twitter |
2023-02-27 13:25:22 |
AWS |
AWS Japan Blog |
Amazon FSx for NetApp ONTAP の IT チャージバックモデルの設計 |
https://aws.amazon.com/jp/blogs/news/designing-chargeback-models-for-amazon-fsx-for-netapp-ontap/
|
amazonfsxfornetappontap |
2023-02-27 13:36:19 |
python |
Pythonタグが付けられた新着投稿 - Qiita |
AI技術をを使ってキャラの画像をラフ画に戻してみた。 |
https://qiita.com/Lapinna/items/b86dca385c734ce489c6
|
通り |
2023-02-27 22:37:37 |
技術ブログ |
Developers.IO |
Boto3에서 S3 버켓의 오브젝트가 1000개 이상일 때 리스트 조회하기 |
https://dev.classmethod.jp/articles/boto3_s3_object_more_then_1000_kr/
|
Boto에서S 버켓의오브젝트가개이상일때리스트조회하기안녕하세요DA사업본부송영진입니다 오늘은Python의SDK인Boto를사용하여S 버켓의오브젝트가개이상일때오브젝트의리스트를조회하는방법에대해알아보겠습니다 Bot |
2023-02-27 13:19:04 |
海外TECH |
MakeUseOf |
The 6 Best Monero (XMR) Wallets |
https://www.makeuseof.com/best-monero-xmr-wallets/
|
manage |
2023-02-27 13:16:16 |
海外TECH |
DEV Community |
Essential Linux Commands Every DevOps Engineer Should Know - Part 1 |
https://dev.to/aradwan20/essential-linux-commands-every-devops-engineer-should-know-part-1-5e86
|
Essential Linux Commands Every DevOps Engineer Should Know Part Linux is a powerful and versatile operating system that is widely used in many industries including software development data analysis and web hosting As a Linux engineer it s important to have a good understanding of the essential Linux commands that can help you manage your systems and perform common daily tasks quickly Additionally with the goal of increasing collaboration and streamlining processes between software development and IT operations teams DevOps has become an integral part of successful software development projects A key aspect of DevOps is the use of Linux the open source operating system that has become the backbone of many modern applications and software systems For DevOps engineers mastering Linux is critical to effectively managing and deploying software in a variety of environments In this article we ll explore some of the most important Linux commands you should know as a DevOps engineer or to use Linux efficiently But first let us learn what these signs mean in Linux and answer some common questions What does do in Linux In Linux is a syntax for command substitution It allows you to use the output of one command as an argument to another command or as part of a larger command This is a powerful feature of Linux shell scripting that allows you to chain commands together and automate tasks Here s an example of how works echo Today is date In this example the date command is substituted with the current date and time The output of the date command is then used as an argument to the echo command resulting in the following output Today is Thu Feb UTC You can also use command substitution to assign the output of a command to a variable like this output ls l In this example the ls l command is substituted with the output of the ls l command which is a list of files and directories in the current directory The output is then assigned to the output variable You can then use the output variable in another command or script like this echo output This will display the output of the ls l command that was stored in the output variable What does do in Linux The symbol is used in various ways depending on the context Here are a few common uses Prompt In the Linux command line interface CLI the symbol is often used to indicate the prompt which is the point where the user enters commands Variables The symbol is used to reference variables in shell scripts When a variable is referenced the symbol is placed before the variable name For example if a variable named NAME contains the value John you can reference the variable like this echo NAMEThis will display the value of the NAME variable which is John Environment variables In Linux there are many predefined environment variables that contain system information or user preferences These variables can be referenced using the symbol For example the HOME variable contains the path to the current user s home directory You can reference the HOME variable like this cd HOMEThis will change the current directory to the home directory of the current user Process ID The symbol followed by a number can be used to reference the process ID PID of a running process For example if you want to kill a process with a PID of you can use the kill command like this kill This will send a signal to the process with the PID of to terminate it Now Let us start with the most used commands System InformationunameThe uname command is used to display information about the system such as the kernel version and system architecture You can use this command to check if you re running the latest version of the Linux kernel Here s an example uname aLinux myserver amd SMP Debian x GNU Linuxlsb releaseThe lsb release command displays Linux Standard Base LSB information about the distribution This can be useful when you need to know the exact version of your Linux distribution Here s an example lsb release aNo LSB modules are available Distributor ID UbuntuDescription Ubuntu LTSRelease Codename focalhostnameThe hostname command is used to display or set the system s host name The host name is a label that identifies the system in a network By default the host name is set during installation but you can change it using the hostname command To display the current host name run the command with no arguments hostnamemyhostTo set a new host name use the b option followed by the new host name sudo hostname b newhostTipYou can add the new host name to the etc hosts file to make the change permanent topThe top command is used to display system process information and monitor system resources It shows a real time list of the processes running on the system and their resource usage such as CPU and memory usage To launch the top command simply type top in the terminal The default view shows the processes sorted by the percentage of CPU usage topYou can use various keys to interact with the top command For example you can press q to quit k to kill a process and f to change the displayed fields TipTo sort the processes by a specific field press the corresponding key For example press P to sort by CPU usage M to sort by memory usage and T to sort by total CPU time File and Directory ManagementlsThe ls command is used to list the contents of a directory By default it lists the files and directories in the current working directory You can also use it to list the contents of a specific directory by specifying the directory path as an argument You can use the l flag to get more detailed information about each file such as the file size and permissions To list the contents of the current working directory run the ls command with no arguments lsfile txt file txt dirTo list the contents of a specific directory specify the directory path as an argument ls home user documentsfile txt file txt dirTo list the contents of a directory in long format use the l flag ls l rw r r user user Sep file txt rw r r user user Sep file txtdrwxr xr x user user Sep dircdThe cd command is used to change the current working directory You can use it to navigate the file system To change the current working directory to a specific directory specify the directory path as an argument cd home user documentsTo change to the parent directory use cd cd To change to the home directory use cd with no arguments cdmkdirThe mkdir command is used to create a new directory To create a new directory in the current working directory specify the directory name as an argument mkdir newdirTo create a new directory with multiple levels of subdirectories use the p flag mkdir p newdir subdir subdirrmdirThe rmdir command is used to remove a directory To remove an empty directory specify the directory name as an argument rmdir newdirtouchThe touch command is used to create a new file or update the modification time of an existing file To create a new file in the current working directory specify the file name as an argument touch newfile txtTo update the modification time of an existing file specify the file name as an argument touch existingfile txtrmThe rm command is used to remove files To remove a file specify the file name as an argument rm file txtTo remove multiple files specify the file names as arguments separated by spaces rm file txt file txtcpThe cp command is used to copy files or directories To copy a file to a new location specify the source file and the destination directory as arguments cp file txt home user documentsTo copy a directory and all its contents to a new location use the r flag cp r dir home user documentsmvThe mv command is used to move or rename files or directories To move a file to a new location specify the source file and the destination directory as arguments mv file txt home user documentsTo rename a file specify the old file name and the new file name as arguments mv oldfile txt newfile txtTo move a directory and all its contents to a new location use the r flag mv r dir home user documentsTipBe careful when using the rm command as it can permanently delete files and directories without confirmation Always double check the list of files you re about to delete before running the command System MaintenancerebootThe reboot command is used to restart the system To restart the system simply run the reboot command sudo rebootTipBefore running the reboot command make sure to save any unsaved work and close any running applications shutdownThe shutdown command is used to shut down the system To shut down the system simply run the shutdown command with the h flag sudo shutdown h nowTipBefore running the shutdown command make sure to save any unsaved work and close any running applications dfThe df command is used to show disk space usage It displays the file system usage for all mounted file systems To display the disk space usage run the df command with no arguments dfFilesystem K blocks Used Available Use Mounted on dev sda tmpfs dev shm You can use the h flag to display the sizes in a human readable format df hFilesystem Size Used Avail Use Mounted on dev sda G G G tmpfs G G dev shm duThe du command is used to show disk usage of a file or directory To display the disk usage of a file or directory run the du command followed by the file or directory path du home user documents home user documents dir subdir home user documents dir subdir home user documents dir home user documents file txt home user documents file txt home user documents sizes in a human readable format du h home user documentsK home user documents dir subdirK home user documents dir subdirM home user documents dirK home user documents file txtK home user documents file txtM home user documentspsThe ps command is used to show the current processes running on the system To display the current processes run the ps command ps PID TTY TIME CMD pts bash pts psYou can use the aux flag to display all the processes in a full format ps auxUSER PID CPU MEM VSZ RSS TTY STAT START TIME COMMANDuser pts Ss bashuser killThe kill command is used to send a signal to a process to terminate it To kill a process you first need to identify its process ID PID using the ps command Then you can use the kill command with the PID as an argument ps aux grep processnameuser pts Ss processname sudo kill You can also use the pkill command to kill a process by its name pkill processnameTipWhen killing a process use the kill command if the process is not responding to the regular kill command User and Group ManagementuseraddThe useradd command is used to create a new user account To create a new user account run the useradd command followed by the desired username sudo useradd usernameYou can also specify additional options such as the home directory and login shell sudo useradd m s bin bash usernameusermodThe usermod command is used to modify an existing user account To modify an existing user account run the usermod command followed by the desired options and username sudo usermod d new home dir s bin zsh usernameYou can use various options to modify different attributes of the user account such as the home directory login shell and group membership userdelThe userdel command is used to delete an existing user account To delete an existing user account run the userdel command followed by the username sudo userdel usernamepasswdThe passwd command is used to set or change the password for a user account To set or change the password for a user account run the passwd command followed by the username sudo passwd usernameYou will be prompted to enter the new password and then confirm it groupaddThe groupadd command is used to create a new group To create a new group run the groupadd command followed by the desired group name sudo groupadd groupnamegroupmodThe groupmod command is used to modify an existing group To modify an existing group run the groupmod command followed by the desired options and group name sudo groupmod n newgroupname groupnameYou can use various options to modify different attributes of the group such as the group name groupdelThe groupdel command is used to delete an existing group To delete an existing group run the groupdel command followed by the group name sudo groupdel groupnameTipWhen adding or modifying a user account make sure to assign the user to the appropriate group to grant the appropriate permissions Package Managementapt getThe apt get command is used for package management on Debian based systems To install a package using apt get run the command followed by the package name sudo apt get install packagenameTo remove a package using apt get run the command followed by the package name sudo apt get remove packagenameTo update the package list using apt get run the command with the update option sudo apt get updateTo upgrade all installed packages using apt get run the command with the upgrade option sudo apt get upgradeyumThe yum command is used for package management on Red Hat based systems To install a package using yum run the command followed by the package name sudo yum install packagenameTo remove a package using yum run the command followed by the package name sudo yum remove packagenameTo update the package list using yum run the command with the update option sudo yum updateTo upgrade all installed packages using yum run the command with the upgrade option sudo yum upgradedpkgThe dpkg command is used for package management on Debian based systems To install a package using dpkg run the command followed by the package name sudo dpkg i packagename debTo remove a package using dpkg run the command followed by the package name sudo dpkg r packagenameTo list all installed packages using dpkg run the command with the l option sudo dpkg lTo search for a package using dpkg run the command followed by the package name sudo dpkg s packagenameTipWhen managing packages make sure to only install packages from trusted sources to avoid potential security risks pacmanThe pacman command is used for package management on Arch Linux systems To install a package using pacman run the command followed by the package name sudo pacman S packagenameTo remove a package using pacman run the command followed by the package name sudo pacman R packagenameTo update the package list using pacman run the command with the Sy options sudo pacman SyTo upgrade all installed packages using pacman run the command with the Syu options sudo pacman SyuTo search for a package using pacman run the command followed by the search term sudo pacman Ss searchtermTipWhen managing packages make sure to only install packages from trusted sources to avoid potential security risks Text Editorsnanonano is a simple text editor for the terminal It is easy to use and requires no prior knowledge of command line text editors To open a file in nano simply run the command followed by the file name nano filenameYou can then use the keyboard to edit the file Press Ctrl X to save and exit the file vimvim is a powerful text editor that can be used in the terminal or in a GUI It is a modal editor which means it has different modes for editing and navigation To open a file in vim simply run the command followed by the file name vim filenameYou can then use the keyboard to edit the file Press Esc to enter command mode and i to enter insert mode To save and exit the file type wq and press Enter emacsemacs is another powerful text editor with extensive customization options It is also a modal editor but with a different set of modes than vim To open a file in emacs simply run the command followed by the file name emacs filenameYou can then use the keyboard to edit the file Press Ctrl X followed by Ctrl S to save the file and Ctrl X followed by Ctrl C to exit Emacs TipWhen using vim or emacs it can be helpful to learn some of the basic keyboard shortcuts to increase your efficiency Network Managementifconfigifconfig is a command line tool used to show information about network interfaces on a Linux system To display information about all network interfaces simply run the command without any options ifconfigYou can then see information such as the IP address netmask and MAC address of each interface ip don t work for mac ip is a more modern tool used to show and configure network interfaces and routing tables on a Linux system To display information about all network interfaces run the command with the address option ip addressYou can then see information such as the IP address netmask and MAC address of each interface netstatnetstat is a command line tool used to display network connections routing tables and network interface statistics on a Linux system To display all open network connections run the command with the a and n options netstat anYou can then see information such as the protocol local address foreign address and state of each connection pingping is a command line tool used to test network connectivity to a host by sending ICMP echo request packets and waiting for ICMP echo reply packets To test network connectivity to a host run the command followed by the host name or IP address ping hostnameYou can then see information such as the number of packets sent and received and the round trip time for each packet traceroutetraceroute is a command line tool used to show the path that packets take to reach a destination host To show the path to a destination host run the command followed by the host name or IP address traceroute hostnameYou can then see information such as the IP addresses and round trip times for each hop along the path nslookupnslookup is a command line tool used to query the DNS Domain Name System to obtain information about a domain or hostname To look up the IP address of a domain or hostname run the command followed by the domain or hostname nslookup domainnameYou can then see information such as the IP address and DNS server used for the lookup digdig is a command line tool similar to nslookup that is used to query the DNS to obtain information about a domain or hostname To look up the IP address of a domain or hostname run the command followed by the domain or hostname dig domainnameYou can then see information such as the IP address and DNS server used for the lookup ifup and ifdownifup and ifdown are command line tools used to bring up or take down a network interface on a Linux system To bring up a network interface run the ifup command followed by the interface name sudo ifup interfacenameTo take down a network interface run the ifdown command followed by the interface name sudo ifdown interfacenamerouteroute is a command line tool used to view and configure the routing table on a Linux system To display the current routing table run the command with the n option route nYou can then see information such as the destination network gateway and interface for each route iptablesiptables is a command line tool used to configure the Linux kernel s firewall rules It can be used to block or allow incoming or outgoing network traffic based on a variety of criteria To view the current firewall rules run the command with the L option sudo iptables LYou can then see information such as the chain target and protocol for each rule TipWhen managing network connections use a combination of these tools to diagnose and troubleshoot network issues Conclusion learning Linux is critical for any engineer or technical professional regardless of their specific field Here are a few reasons why Linux is widely used in the industry Linux is one of the most widely used operating systems in the tech industry particularly in server and cloud environments Learning Linux can give you a strong foundation in the skills and tools used by many companies and organizations Linux is open source Linux is open source software which means that its source code is freely available to anyone This allows developers and engineers to modify improve and extend the operating system to suit their specific needs Linux is highly customizable Linux is highly customizable and can be configured to suit a wide range of use cases This makes it a popular choice for developers and engineers who need to build custom solutions for their organizations Linux offers a powerful command line interface Linux is well known for its powerful command line interface which provides a high degree of control and flexibility for users This can be particularly useful for engineers who need to automate tasks manage networks or work with servers Linux skills are in high demand Linux skills are in high demand in the tech industry particularly in fields like cloud computing network administration and software development By learning Linux you can increase your career opportunities and earning potential In summary learning Linux can provide a strong foundation in the skills and tools used by many organizations in the tech industry Its open source nature customizability and powerful command line interface make it a popular choice for developers and engineers With the high demand for Linux skills in the tech industry learning Linux can also provide significant career benefits |
2023-02-27 13:31:19 |
海外TECH |
DEV Community |
Strategy is delivery: Scaling 10x through ownership and trust |
https://dev.to/finnauto/strategy-is-delivery-scaling-10x-through-ownership-and-trust-232p
|
Strategy is delivery Scaling x through ownership and trustAt FINN we are determined to build the most popular car subscription platform We are on a promising path and hit million annualized recurring revenues ARR in in our third year of existence Supporting this immense growth we need technology But as the company changed so much in only three years our technological needs changed just as much As my colleague Ish Zafar outlined in his article No code isn t scalable we were facing a range of technical challenges that were a loud cry for action For in order to enable the business to grow as fast and ambitiously as we were planning to we had to make our technical foundation scalable So we decided to build a next generation car subscription platform standing on a foundation of pro code Now imagine a growing company that is busy as a bee hive And then you come to realize you need to do this tiny change of turning the core tech platform upside down while the business is running ever faster How do you manage a project like this I was visiting the OMR Festival in Hamburg in May last year and listened to a talk by the Delivery Hero CTO Christian von Hardenberg He was presenting their approach to unifying all Delivery Hero s acquisitions technical systems This talk gave me two key insights Think x a Google paradigm to innovate and create moonshotsA centralized approach may not win over a decentralized oneMoonshot mindsetThinking xーthis refers to shifting the mindset and aim for improving x rather than by The idea behind it is that people get way more excited about an opportunity to make something times better The goal becomes to create breakthroughs and to be radical An accelerator is the ability to detach from existing solutions and old assumptions Discovering x thinking triggered another thought process In my view it in addition emphasizes the iterative nature of evolving a minimal viable product MVP Building an MVP requires some kind of agreement of what s minimal So when I thought about our goalーto create a scalable car subscription platform that serves cars having that number in mind and discovering the x thinkingーsuddenly I knew how to structure this project we would start with an MVP serving cars and iterate x the number of cars in each cycle going from to to …and eventually to k cars Let s go decentralizedFINN s organization is split into vertical departments that are very independent autonomous and follow their own departmental missions The sum of its parts results in the company mission The Engineering department however is an enabling function which means that Engineering teams are mostly distributed across all other departments When starting the new subscription platform project it quickly became obvious that it was going to be a cross department effort involving teams from all departments A decentralized organization can hold a lot of complexity Holding the complexity of a cross departmental project that would reach the size of coordinating ten streams plus guiding the technical side of things would simply have been too much for one person alone I am very grateful for my colleague Andrea Perrizato for joining me and taking ownership of the technical guidance throughout this project Having two perspectives on the same situations is incredibly valuable and can elevate outcomes to a higher level I am convinced A project principleAfter having the basic project structure and approach defined we added one simple project principle for everyone to keep in mind and use as a decision aid The principle is “strategy is delivery For me it has one very clear meaning to prioritize shipping features fast Not in order to rush the processーto the contrary We wanted to use this project to do it right To review processes and workflows that grew organically and adjust them if we learned how to do things better in the meantime The principle s meaning underscores the sense of building an MVP This MVP not only aims to do things better in the long run but also during short term implementation iterations aims to ship fast to maximize feedback cycles You could argue that the principle “strategy is delivery has another meaning at least in the beginning After all we are delivering cars that have been subscribed to be delivered at our customers doorsteps For the very first car and probably the following too serving the car delivery was very much the goal On reaching every new x milestone we had a special sticker counting the number of cars delivered We just got the cars version added to the collection Zooming out to zoom inOkay I hear you asking but how do you get going My personal preference on doing things is to get context and see the bigger picture so that I know what I am working towards I d like to think about it as zooming out in order to be able to zoom in In our first scoping workshop for our MVP Cars people from all teams came together to do exactly that zoom out to zoom in The tricky part about having a decentralized organization is the question of how to access distributed knowledge and make it available Bringing relevant people onto the same figurative table is step one Step two is pouring out the knowledge My biggest objective was to understand what the whole lifecycle of a car and a subscriber at FINN looks like I knew every department works on parts of this cycle but I couldn t visualize the whole process Everyone drew their core parts on a Miro board and we could stitch it together having one flow We could break each step down into features and prioritize these features to match the MVP iteration s focus We would repeat this process for every MVP iteration and refine the overall flow as well as the next prioritized features Give out trust and ownership instead of managing risk When you google for project management it is highly likely that you ll find articles on managing risk In the context of software development I refuse to understand this concept Building software is inherently risky because you ll never really be able to predict the exact outcome and timeline So let s just accept that there is risk Instead I want to give people trust and ownership After choosing and defining the scope for every iteration collectively I trust people will pick up the right things to work on in order to reach our joint goals In a decentralized organization like ours they effectively know their domain best I like to give people true ownership because I want to avoid micromanagement at all costs Never forget that with ownership comes freedom and responsibility I strongly believe that when giving out trust first and foremost adding ownership on top most people won t risk you pulling the plug because they enjoy their radius of operation and know their impact See the gaps For following through it is essential to have an overview at all times and to never lose track of the target picture Establish a weekly stage to exchange updates challenges and successes between teams This will provide two opportunities It creates accountability It can uncover gaps You want to have week by week accountability to encourage progress to be made in a timely manner on the defined scope More importantly I think it is crucial to see gaps when connecting the dots week by week This way you can course correct without a lot of delay and manage the project s successful progress effectively You are by default not waiting for crashes to occur and adjust direction only after they happened but instead you are trying to read the ocean and navigate it based on your observations which still leaves room for crashes Communicate interdependenciesLastly and this is especially true for a cross department project communicating interdependencies right from the beginning is key Make this step mandatory prior to any line of code being written or any automated workflow being built For whenever there are dependencies between multiple teams it is most important to get back onto that figurative table with the teams involved and get clarity on each other s requirements and dependencies We aim to design solutions for each other because every team has stakeholders to serve and we highly value being customer first at FINN Originally published on LinkedIn |
2023-02-27 13:20:59 |
海外TECH |
DEV Community |
Building a forum with React, NodeJS |
https://dev.to/novu/building-a-forum-with-react-nodejs-6pe
|
Building a forum with React NodeJS TL DRIn this article you ll learn how to build a forum system that allows users to create react and reply to post threads In the end we will also send a notification on each reply on a thread with Novu you can skip the last step if you want only the technical stuff I know there are no forums today like before it s all about the Reddit Facebook communities and smaller ones like Devto and Mastodon but Once upon a time when I was a boy I was addicted to forums I have actually created a few with PHPBB and vBulletin back when PHP was a thing being so nostalgic made me write this blog post A small request I am trying to get Novu to k stars can you help me out by starring the repository it helps me to create more content every week Project SetupHere I ll guide you through creating the project environment for the web application We ll use React js for the front end and Node js for the backend server Create the project folder for the web application by running the code below mkdir forum systemcd forum systemmkdir client server Setting up the Node js serverNavigate into the server folder and create a package json file cd server amp npm init yInstall Express Nodemon and the CORS library npm install express cors nodemonExpressJS is a fast minimalist framework that provides several features for building web applications in Node js CORS is a Node js package that allows communication between different domains and Nodemon is a Node js tool that automatically restarts the server after detecting file changes Create an index js file the entry point to the web server touch index jsSet up a Node js server using Express js The code snippet below returns a JSON object when you visit the http localhost api in your browser index jsconst express require express const cors require cors const app express const PORT app use express urlencoded extended true app use express json app use cors app get api req res gt res json message Hello world app listen PORT gt console log Server listening on PORT Configure Nodemon by adding the start command to the list of scripts in the package json file The code snippet below starts the server using Nodemon In server package json scripts test echo Error no test specified amp amp exit start nodemon index js Congratulations You can now start the server by using the command below npm start Setting up the React applicationNavigate into the client folder via your terminal and create a new React js project cd clientnpx create react app Install React Router a JavaScript library that enables us to navigate between pages in a React application npm install react router domDelete the redundant files such as the logo and the test files from the React app and update the App js file to display “Hello World as done below function App return lt div gt lt p gt Hello World lt p gt lt div gt export default App Copy the CSS file required for styling the project here into the src index css file Building the app user interfaceHere we ll create the user interface for the forum system to enable users to create reply and react to various threads Create a components folder within the client src folder containing the Home js Login js Nav js Register js and Replies js files cd client srcmkdir componentstouch Home js Login js Nav js Register js Replies jsFrom the code snippet above The Login js and Register js files are the authentication pages of the web application The Home js file represents the dashboard page shown after authentication It allows users to create and react to the post threads The Replies js file displays the response on each post and allows users to reply to the post thread The Nav js is the navigation bar where we will configure Novu Update the App js file to render the components using React Router import React from react import BrowserRouter Route Routes from react router dom import Register from components Register import Login from components Login import Home from components Home import Replies from components Replies const App gt return lt div gt lt BrowserRouter gt lt Routes gt lt Route path element lt Login gt gt lt Route path register element lt Register gt gt lt Route path dashboard element lt Home gt gt lt Route path id replies element lt Replies gt gt lt Routes gt lt BrowserRouter gt lt div gt export default App The Login pageCopy the code below into the Login js file to render a form that accepts the user s email and password import React useState from react import Link useNavigate from react router dom const Login gt const email setEmail useState const password setPassword useState const handleSubmit e gt e preventDefault console log email password setEmail setPassword return lt main className login gt lt h className loginTitle gt Log into your account lt h gt lt form className loginForm onSubmit handleSubmit gt lt label htmlFor email gt Email Address lt label gt lt input type text name email id email required value email onChange e gt setEmail e target value gt lt label htmlFor password gt Password lt label gt lt input type password name password id password required value password onChange e gt setPassword e target value gt lt button className loginBtn gt SIGN IN lt button gt lt p gt Don t have an account lt Link to register gt Create one lt Link gt lt p gt lt form gt lt main gt export default Login The Register pageUpdate the Register js file to display the registration form that allows users to create an account using their email username and password import React useState from react import Link useNavigate from react router dom const Register gt const username setUsername useState const email setEmail useState const password setPassword useState const handleSubmit e gt e preventDefault console log username email password setEmail setUsername setPassword return lt main className register gt lt h className registerTitle gt Create an account lt h gt lt form className registerForm onSubmit handleSubmit gt lt label htmlFor username gt Username lt label gt lt input type text name username id username required value username onChange e gt setUsername e target value gt lt label htmlFor email gt Email Address lt label gt lt input type text name email id email required value email onChange e gt setEmail e target value gt lt label htmlFor password gt Password lt label gt lt input type password name password id password required value password onChange e gt setPassword e target value gt lt button className registerBtn gt REGISTER lt button gt lt p gt Have an account lt Link to gt Sign in lt Link gt lt p gt lt form gt lt main gt export default Register The Nav componentUpdate the Nav js file to render a navigation bar that shows the application s title and a sign out button Later in this article I ll guide you through adding Novu s notification bell within this component import React from react const Nav gt const signOut gt alert User signed out return lt nav className navbar gt lt h gt Threadify lt h gt lt div className navbarRight gt lt button onClick signOut gt Sign out lt button gt lt div gt lt nav gt export default Nav The Home pageIt is the home page after the user s authentication They can create and react to posts threads within the Home component Copy the code below into the Home js file import React useState from react import Nav from Nav const Home gt const thread setThread useState const handleSubmit e gt e preventDefault console log thread setThread return lt gt lt Nav gt lt main className home gt lt h className homeTitle gt Create a Thread lt h gt lt form className homeForm onSubmit handleSubmit gt lt div className home container gt lt label htmlFor thread gt Title Description lt label gt lt input type text name thread required value thread onChange e gt setThread e target value gt lt div gt lt button className homeBtn gt CREATE THREAD lt button gt lt form gt lt main gt lt gt export default Home The code snippet above displays the navigation bar and an input field for the posts We ll update the component in the upcoming sections The Replies pageThis page is a dynamic route that allows users to reply and view comments on a post thread Update the Replies js file with the code snippet below import React useState from react const Replies gt const reply setReply useState const handleSubmitReply e gt e preventDefault console log reply setReply return lt main className replies gt lt form className modal content onSubmit handleSubmitReply gt lt label htmlFor reply gt Reply to the thread lt label gt lt textarea rows value reply onChange e gt setReply e target value type text name reply className modalInput gt lt button className modalBtn gt SEND lt button gt lt form gt lt main gt export default Replies Congratulations You ve designed the application s user interface Next you ll learn how to register and log users into the application User authentication with React and Node jsHere I ll guide you through authenticating users and how to allow only authorised users to access protected pages within the web application PS In a real world application passwords are hashed and saved in a secure database For simplicity purposes I ll store all the credentials in an array in this tutorial Creating new usersAdd a POST route on the server that accepts the user s credentials email username and password holds all the existing usersconst users generates a random string as IDconst generateID gt Math random toString substring app post api register async req res gt const email password username req body holds the ID const id generateID logs all the user s credentials to the console console log email password username id Create a signUp function within the Register js file that sends the user s credentials to the endpoint on the server const signUp gt fetch http localhost api register method POST body JSON stringify email password username headers Content Type application json then res gt res json then data gt console log data catch err gt console error err Call the function when a user submits the form as done below const handleSubmit e gt e preventDefault Triggers the function signUp setEmail setUsername setPassword Update the api register route to save the user s credentials and return a response to the front end app post api register async req res gt const email password username req body const id generateID ensures there is no existing user with the same credentials const result users filter user gt user email email amp amp user password password if true if result length const newUser id email password username adds the user to the database array users push newUser returns a success message return res json message Account created successfully if there is an existing user res json error message User already exists The code snippet above accepts the user s credentials from the React js application and checks if there is no existing user with the same credentials before saving the user to the database array Finally display the server s response by updating the signUp function as done below React Router s useNavigate hookconst navigate useNavigate const signUp gt fetch http localhost api register method POST body JSON stringify email password username headers Content Type application json then res gt res json then data gt if data error message alert data error message else alert Account created successfully navigate catch err gt console error err The code snippet above displays a success or error message from the Node js server and redirects the user to the login page after successfully creating the account Logging users into the applicationAdd a POST route on the server that accepts the user s email and password and authenticates the users before granting them access to the web application app post api login req res gt const email password req body checks if the user exists let result users filter user gt user email email amp amp user password password if the user doesn t exist if result length return res json error message Incorrect credentials Returns the id if successfuly logged in res json message Login successfully id result id Create a loginUser function within the Login js file that sends the user s email and password to the Node js server React Router s useNavigate hookconst navigate useNavigate const loginUser gt fetch http localhost api login method POST body JSON stringify email password headers Content Type application json then res gt res json then data gt if data error message alert data error message else alert data message navigate dashboard localStorage setItem id data id catch err gt console error err The code snippet above sends the user s credentials to the Node js server and displays the response on the front end The application redirects authenticated users to the Home component and saves their id to the local storage for easy identification Update the signOut function within the Nav js file to remove the id from the local storage when a user logs out const signOut gt localStorage removeItem id redirects to the login page navigate Creating and retrieving post threads within the applicationHere you ll learn how to create and retrieve the posts from the Node js server Add a POST route within the index js file that accepts the post title and the user s id from the React js application app post api create thread async req res gt const thread userId req body const threadId generateID console log thread userId threadId Next send the user s id and the post title to the server Before then let s ensure the Home js route is protected Add a useEffect hook within the Home component to determine whether the user is authenticated import React useEffect useState from react import useNavigate from react router dom const Home gt const navigate useNavigate The useEffect Hook useEffect gt const checkUser gt if localStorage getItem id navigate else console log Authenticated checkUser navigate return lt gt the UI elements lt gt When users sign in to the application we save their id to the local storage for easy identification The code snippet above checks if the id exists otherwise the user is redirected to the login page Add a function within the Home component that sends the user s id and the post title to the Node js server when the form is submitted const createThread gt fetch http localhost api create thread method POST body JSON stringify thread userId localStorage getItem id headers Content Type application json then res gt res json then data gt console log data catch err gt console error err Triggered when the form is submittedconst handleSubmit e gt e preventDefault Calls the function createThread setThread Save the post and send all the available posts to the client for display holds all the posts createdconst threadList app post api create thread async req res gt const thread userId req body const threadId generateID add post details to the array threadList unshift id threadId title thread userId replies likes Returns a response containing the posts res json message Thread created successfully threads threadList The code snippet above accepts the user s id and post title from the front end Then save an object that holds the post details and returns a response containing all the saved posts Displaying the post threadsCreate a state that will hold all the posts within the Home component const threadList setThreadList useState Update the createThread function as done below const createThread gt fetch http localhost api create thread method POST body JSON stringify thread userId localStorage getItem id headers Content Type application json then res gt res json then data gt alert data message setThreadList data threads catch err gt console error err The createThread function retrieves all the posts available within the application and saves them into the threadList state Update the Home js file to display the available posts as done below return lt gt lt Nav gt lt main className home gt lt h className homeTitle gt Create a Thread lt h gt lt form className homeForm onSubmit handleSubmit gt form UI elements lt form gt lt div className thread container gt threadList map thread gt lt div className thread item key thread id gt lt p gt thread title lt p gt lt div className react container gt lt Likes numberOfLikes thread likes length threadId thread id gt lt Comments numberOfComments thread replies length threadId thread id title thread title gt lt div gt lt div gt lt div gt lt main gt lt gt From the code snippet above All the posts are displayed within the Home component I added two new components Likes and Comments They both contain SVG icons from Heroicons The Likes component accepts the post id and the number of likes on a post length of the likes array on each post The Comments component accepts the length of the replies array the post id and its title Create a utils folder containing both components cd client srcmkdir utilstouch Likes js Comments jsCopy the code below into the Likes js file import React from react const Likes numberOfLikes threadId gt return lt div className likes container gt lt svg xmlns viewBox fill currentColor className w h likesBtn gt lt path d M c A c a c a Va c hc a c Hc l a h zM a c Hc a c Hc z gt lt svg gt lt p style color gt numberOfLikes numberOfLikes lt p gt lt div gt export default Likes The code snippet above contains the SVG element for displaying the Like icon The component also renders the number of likes on a post Copy the code below into the Comments js file import React from react import useNavigate from react router dom const Comments numberOfComments threadId gt const navigate useNavigate const handleAddComment gt navigate threadId replies return lt div className likes container gt lt svg xmlns viewBox fill currentColor className w h likesBtn onClick handleAddComment gt lt path fillRule evenodd d M A a c s c a zM a zM a zm a z clipRule evenodd gt lt svg gt lt p style color gt numberOfComments numberOfComments lt p gt lt div gt export default Comments The code snippet contains the SVG element for the Comments button and the number of comments on the post The handleAddComment function is triggered when a user clicks the comment icon It redirects the user to the Replies component where they can view and add to the replies on each post So far we ve been able to display the available posts only when we create a new post Next let s retrieve them when the component is mounted Add a GET route on the server that returns all the posts app get api all threads req res gt res json threads threadList Update the useEffect hook within the Home component to fetch all the posts from the server useEffect gt const checkUser gt if localStorage getItem id navigate else fetch http localhost api all threads then res gt res json then data gt setThreadList data threads catch err gt console error err checkUser navigate Congratulations on making it this far Next you ll learn how to react and reply to the posts How to react and reply to each postsIn this section you ll learn how to react and reply to each post Users will be able to drop a like or comment on each post Reacting to each postCreate a function within the Likes js file that runs when a user clicks on the Like icon const Likes numberOfLikes threadId gt const handleLikeFunction gt alert You just liked the post return lt div className likes container gt lt svg xmlns viewBox fill currentColor className w h likesBtn onClick handleLikeFunction gt other UI elements lt svg gt lt div gt Create a POST route on the server that validates the reaction app post api thread like req res gt accepts the post id and the user id const threadId userId req body gets the reacted post const result threadList filter thread gt thread id threadId gets the likes property const threadLikes result likes authenticates the reaction const authenticateReaction threadLikes filter user gt user userId adds the users to the likes array if authenticateReaction length threadLikes push userId return res json message You ve reacted to the post Returns an error user has reacted to the post earlier res json error message You can only react once From the code snippet above The route accepts the post id and the user s id from the React js application and searches for the post that received a reaction Then validates the reaction before adding the user to the likes array Update the handleLikeFunction to send a POST request to the api thread like endpoint whenever a user reacts to the post const handleLikeFunction gt fetch http localhost api thread like method POST body JSON stringify threadId userId localStorage getItem id headers Content Type application json then res gt res json then data gt if data error message alert data error message else alert data message catch err gt console error err Displaying the replies on each postHere I ll guide you through displaying the replies on each post within the React app Add a POST route on the server that accepts a post ID from the front end and returns the title and all the responses under such post app post api thread replies req res gt The post ID const id req body searches for the post const result threadList filter thread gt thread id id return the title and replies res json replies result replies title result title Next update the Replies component to send a request to the api thread replies endpoint on the server and display the title and replies when the page loads import React useEffect useState from react import useParams useNavigate from react router dom const Replies gt const replyList setReplyList useState const reply setReply useState const title setTitle useState const navigate useNavigate const id useParams useEffect gt const fetchReplies gt fetch http localhost api thread replies method POST body JSON stringify id headers Content Type application json then res gt res json then data gt setReplyList data replies setTitle data title catch err gt console error err fetchReplies id This function when triggered when we add a new reply const handleSubmitReply e gt e preventDefault console log reply setReply return lt main className replies gt UI elements lt main gt From the code snippet above The useEffect hook sends a request to the server s endpoint and retrieves the post title and its replies The title and replyList states hold both the title and replies respectively The variable id holds the post ID retrieved from the URL via dynamic routing in React Router Display the replies on each post as done below return lt main className replies gt lt h className repliesTitle gt title lt h gt lt form className modal content onSubmit handleSubmitReply gt lt label htmlFor reply gt Reply to the thread lt label gt lt textarea rows value reply onChange e gt setReply e target value type text name reply className modalInput gt lt button className modalBtn gt SEND lt button gt lt form gt lt div className thread container gt replyList map reply gt lt div className thread item gt lt p gt reply text lt p gt lt div className react container gt lt p style opacity gt by reply name lt p gt lt div gt lt div gt lt div gt lt main gt The code snippet above shows the layout of the Replies component displaying the post title replies and a form field for replying to a post Creating the post reply functionalityCreate an endpoint on the server that allows users to add new replies as done below app post api create reply async req res gt accepts the post id user id and reply const id userId reply req body search for the exact post that was replied to const result threadList filter thread gt thread id id search for the user via its id const user users filter user gt user id userId saves the user name and reply result replies unshift userId user id name user username text reply res json message Response added successfully The code snippet above accepts the post id user id and reply from the React app searches for the post via its ID and adds the user s id username and reply to the post replies Create a function that sends a request to the api create reply endpoint const addReply gt fetch http localhost api create reply method POST body JSON stringify id userId localStorage getItem id reply headers Content Type application json then res gt res json then data gt alert data message navigate dashboard catch err gt console error err const handleSubmitReply e gt e preventDefault calls the function addReply setReply Congratulations on making it thus far In the upcoming sections you ll learn how to send notifications to multiple users using the Topics API provided by Novu How to send notifications via the Topic API in NovuIn this section we ll use the Novu Topic API to send notifications to multiple users simultaneously To do this the API allows us to create a unique topic assign subscribers to the topic and send a bulk notification to the subscribers at once Setting up your Novu admin panelNavigate into the client folder and create a Novu project by running the code below cd clientnpx novu initSelect your application name and sign in to Novu The code snippet below contains the steps you should follow after running npx novu init Now let s setup your account and send your first notification What is your application name Forum App Now lets setup your environment How would you like to proceed Create a free cloud account Recommended Create your account with Sign in with GitHub I accept the Terms and Conditions and have read the Privacy Policy YesCreated your account successfully We ve created a demo web page for you to see novu notifications in action Visit http localhost demo to continueVisit the demo page copy your subscriber ID from the page and click the Skip Tutorial button Create a notification template with a workflow as shown below Update the In App notification template to send this message to the post creator when there is a new reply Someone just dropped a reply to the thread Install the Novu Notification package within your React project npm install novu notification centerUpdate the components Nav js file to contain the Novu notification bell according to its documentation import React from react import NovuProvider PopoverNotificationCenter NotificationBell from novu notification center import useNavigate from react router dom const Nav gt const navigate useNavigate const onNotificationClick notification gt navigate notification cta data url const signOut gt localStorage removeItem id navigate return lt nav className navbar gt lt h gt Threadify lt h gt lt div className navbarRight gt lt NovuProvider subscriberId lt YOUR SUBSCRIBER ID gt applicationIdentifier lt YOUR APP ID gt gt lt PopoverNotificationCenter onNotificationClick onNotificationClick colorScheme light gt unseenCount gt lt NotificationBell unseenCount unseenCount gt lt PopoverNotificationCenter gt lt NovuProvider gt lt button onClick signOut gt Sign out lt button gt lt div gt lt nav gt The code snippet above adds Novu s notification bell icon to the Nav component enabling us to view all the notifications in our app Replace the Subscriber ID variable with yours Select Settings on your Novu Admin Panel and copy your App ID and API key Ensure you add the App ID into its variable within the Nav js file Configuring Novu on the serverInstall the Novu SDK for Node js into the server folder npm install novu nodeImport Novu from the package and create an instance using your API Key Replace the API Key variable with your API key copied earlier const Novu require novu node const novu new Novu lt YOUR API KEY gt Sending notifications via the Novu Topic APITo begin with you ll need to add the users as subscribers when they login to the application Therefore update the api register route to add the user as a Novu subscriber app post api register async req res gt const email password username req body const id generateID const result users filter user gt user email email amp amp user password password if result length const newUser id email password username add the user as a subscriber await novu subscribers identify id email email users push newUser return res json message Account created successfully res json error message User already exists The code snippet above creates a Novu subscriber via the user s email and id Next add each new post as a Novu topic and add the user as a subscriber to the topic app post api create thread async req res gt const thread userId req body let threadId generateID threadList unshift id threadId title thread userId replies likes creates a new topic from the post await novu topics create key threadId name thread add the user as a subscriber await novu topics addSubscribers threadId subscribers userId replace with your subscriber ID to test run subscribers lt YOUR SUBSCRIBER ID gt res json message Thread created successfully threads threadList Finally send notifications to the subscriber when there is a new response on the threadapp post api create reply async req res gt const id userId reply req body const result threadList filter thread gt thread id id const user users filter user gt user id userId result replies unshift name user username text reply Triggers the function when there is a new reply await novu trigger topicnotification to type Topic topicKey id res json message Response added successfully Congratulations You ve completed the project for this tutorial ConclusionSo far you ve learnt how to authenticate users communicate between a React and Node js app and send bulk notifications using the Novu Topic API Novu is an open source notification infrastructure that enables you to send SMS chat push and e mail notifications from a single dashboard The Topic API is just one of the exciting features Novu provides feel free to learn more about us here The source code for this tutorial is available here Thank you for reading |
2023-02-27 13:18:36 |
Apple |
AppleInsider - Frontpage News |
Amazon's $249 iPad deal is back, but supply is limited |
https://appleinsider.com/articles/23/02/27/amazons-249-ipad-deal-is-back-but-supply-is-limited?utm_medium=rss
|
Amazon x s iPad deal is back but supply is limitedApple s iPad th Generation is back on sale at Amazon with an price drop bringing the cost down to just Save on Apple s iPad If you ve been waiting for Apple s iPad th Generation to dip back to today is the day ーwith the standard GB WiFi model in Space Gray eligible for the discounted price Read more |
2023-02-27 13:36:11 |
Apple |
AppleInsider - Frontpage News |
If you're having trouble with Gmail, you're not alone |
https://appleinsider.com/articles/23/02/27/if-youre-having-trouble-with-gmail-youre-not-alone?utm_medium=rss
|
If you x re having trouble with Gmail you x re not aloneUsers of the highly subscribed Gmail may not be able to access their emails on Monday with an outage making access to the Alphabet communications service intermittent GmailA number of visitors to Gmail are discovering they cannot get onto the site at all on Monday just as businesses in the United States get to work Rather than seeing emails they re instead greeted by a error and temporarily unable to get to their messages Read more |
2023-02-27 13:31:35 |
Apple |
AppleInsider - Frontpage News |
OLED iPads might be a lot more expensive than predicted |
https://appleinsider.com/articles/23/02/27/oled-ipads-might-be-a-lot-more-expensive-than-expected?utm_medium=rss
|
OLED iPads might be a lot more expensive than predictedThe retail price of an OLED iPad is rumored to be considerably higher than current models with one key component likely costing Apple three times more than what it pays now iPad ProApple is thought to be working on a update to the iPad Pro line introducing OLED displays to the range sometime in While the use of the technology could result in an even thinner design than the current miniLED backlit models it could end up being quite expensive to consumers Read more |
2023-02-27 13:34:58 |
海外TECH |
Engadget |
Honor’s exciting folding phone finally makes it to Europe |
https://www.engadget.com/honor-magic-vs-europe-price-availability-133824755.html?src=rss
|
Honor s exciting folding phone finally makes it to EuropeBack in December I got to play with Honor s second foldable the Magic VS but the first one it will sell in the West It was a Chinese market prototype with several rough edges but even so it made a fairly compelling case for its own existence Now three months later the company has rocked up to MWC with the finished version that s intended to be sold on this side of the equator The big news is the price which is pegged at € around for the one model with GB RAM and GB storage the same as Samsung s Z Flip The only difference is that with Samsung s handset you ll get GB RAM but only GB storage When I spent a few days with the handset I found plenty of features that merited praise like the fact it folds flat Certainly Honor feels that its second generation hinge which keeps the handset tidy in your pocket is worthy of shouting about And it has promised that the hinge will withstand folds before conking out and you ll find yourself gravitating towards that internal screen more than you might expect While not as well equipped as the inch exterior screen the inch foldable OLED is good enough to sit back and enjoy a movie or your emails with And it s fast enough to run pretty much anything you d want to throw at it without breaking much of a sweat If there s one wrinkle it s that these devices may not be the future of foldables as much as the narrower more fashionable clamshells Devices like Oppo s Find N and Samsung s latest Z Flip are both more pocket and wallet friendly than their swole counterparts And that counts for a lot for folks who don t feel the need to whip out a small tablet when they re scrolling Instagram But for the sort of people who like me are nerdy enough to want a machine they could theoretically do some work from while on the go the meatier versions are still king |
2023-02-27 13:38:24 |
海外TECH |
Engadget |
Honor’s Magic 5 Pro offers a polished alternative for Android connoisseurs |
https://www.engadget.com/honor-magic-5-pro-mwc-2023-first-look-133059255.html?src=rss
|
Honor s Magic Pro offers a polished alternative for Android connoisseursAfter breaking from Huawei Honor has made the case that in Europe at least it is Samsung s true rival in the Android space In the last three years it has offered flagship phones that are spec for spec the equal of whatever that year s S series is packing Sadly it s also doing this at a time when the spec arms race is all but done and it s harder than ever to actually stand out amongst the crowd The Magic Pro doesn t deviate from the template laid down by its two predecessors so Honor can t play on your neophilia as a reason to buy it But there might be something in the sheer muscularity of its offering that could tempt you into making the switch The Magic Pro is making its debut at MWC in Barcelona and will be sold in both Europe and China Design wise it s close to its predecessor but Honor says the new handset apes the sweeping organic curves favored by Catalan architect Antoni Gaudí Where the Magic Pro had a fairly hard line around its camera hump sorry Eye of Muse here the back cover pours itself into the bump quite seamlessly It s comfortable enough in your hand and light enough to hold but you ll need the case to keep things pristine It s available in fingerprint magnet piano Black and Meadow Green which looks nicer in person than it does in photos HonorA sense of evolution rather than revolution continues along the rest of the spec list with little major difference between the Magic and its replacement The “Quad Curved Floating Screen is like the Magic a inch Hz LTPO OLED display with a x resolution that curves into the frame Honor says that the enhancements are mostly behind the scenes with a new discrete display chipset for better video quality and better brightness Whereas the Magic could muster up nits its successor can crank out nits or nits at peak Nestled inside is a Snapdragon Gen up from the Gen found on the Magic matching the silicon inside the S which is paired with GB RAM and GB storage Although Honor can t call upon the same overclocking magic found in Samsung s handset it does say its AI infused performance software will do a similar job Sadly I had all of ten minutes to spend with the handset and so there wasn t the chance to do any serious stress testing But history tells us that a handset this chock full of gear is hardly going to be a slouch A mAh battery is powering the show here a significantly bigger battery than the found on the This I suspect is the reason this handset is four grams heavier than the last one but what s a couple of grams between friends eh That cell will accept W wired or W wireless charging if you have the necessary Honor SuperCharge stand in your home As I said above this is more or less what you d expect with any Android flagship these days The major selling point for a handset like this is the camera and Honor is doing its usual job here Magic Pro comes with a “Star Wheel version of its “Eye of Muse camera ring packed with three beefy lenses jutting out from the back First is a megapixel f lens with a custom inch sensor the manufacturer of which I don t yet know That s paired with a megapixel f ultra wide camera with a degree field of view and a megapixel f periscope telephoto with a x optical zoom and x digital zoom connected to Sony s IMX image sensor Less attention is given to the forward facing camera which is probably the same megapixel f unit paired with a D depth camera as found in the Magic Pro Those with long memories or access to Google will recall that the Magic Pro s telephoto lens had a quoted resolution of megapixels An Honor spokesperson said that the switch is down to an improvement in sensor size and the new image engine will offer “far better light sensing Daniel CooperSupporting the headline trio is again an x Direct Time of Flight Sensor for laser focusing a multi spectrum color temperature and flicker sensor Those will all add muscle to the handset s upgraded image engine promising faster capture better HDR and higher quality computational photography The company hinted about further improvements to the stills shooting and while the video shooting abilities garnered nary a mention it ll still output compressed “Log footage using Honor s proprietary Magic Log format As for what you can do with those lenses Honor is making the same noises it s always made about its class leading imaging As well as a Dxomark score of the company ーbefore the handset was even announced bragged that the Magic Pro s camera was good enough to capture a Guinness World Record in the making And that its AI smarts were capable of plucking a single perfect frame of a basketballer mid dunk that was worthy of sharing Congrats HONORGlobal The HONORMagic Pro captures a record breaking moment with its AI technology UnleashThePowerofMagic MWC adpic twitter com dzwMTfNEーGuinness World Records GWR February Now we must always treat these pledges as they re intended knowing that they mean nothing until we ve tried to replicate those results ourselves As we learned last year when we really tested the Magic Pro s promise of K video shooting promises are cheaper than delivering One thing that s clear about so many handsets these days is that companies are looking for marginal gains all over the package For instance Honor says the Magic Pro has discrete Bluetooth and WiFi antennas which should boost download speeds and improve the reliability of your Bluetooth connection It s hard to see if those are current gripes with a wide number of users but it s good to see some thought put to improving matters And Honor has also revived a much ballyhooed rarely loved gimmick feature in the form of air gestures Now you can control elements of your phone s UI from a foot over the top of the front facing camera when you re trying to browse recipes with messy hands Honor says that their return is thanks to the Snapdragon Gen s additional power which is capable of watching your hand movements without putting too much pressure on the system on chip Now I only had about ten minutes of time with the handset and there wasn t a whole lot of stuff I could do to put it through its paces I will say that I m expecting the imaging performance to be a lot snappier than what was available on the demo unit which felt a little sluggish And that while nobody s expecting any smartphone maker to reinvent the wheel there s fewer marks on offer for polish As I said at the top my initial impression of Honor s Magic Pro is of a handset that doesn t deviate from the template laid down by its two immediate predecessors but one that s been polished to a very high shine As well as the Magic Pro the company also announced the European arrival of the Magic a less expansive version of the same handset Both will be available at some point in the second quarter of the year with the Magic ーwith GB RAM and GB storage priced at € while the Magic Pro with GB RAM and GB storage will set you back € But I suspect that Honor might need to trim that asking price down a little if it really wants to tempt away folks who right now have sworn their brand allegiance to Samsung |
2023-02-27 13:30:59 |
Cisco |
Cisco Blog |
Bridge to Possible: A Cybersecurity Career Journey |
https://feedpress.me/link/23532/15995160/bridge-to-possible-a-cybersecurity-career-journey
|
community |
2023-02-27 13:00:40 |
ニュース |
BBC News - Home |
First woman Commons Speaker Betty Boothroyd dies |
https://www.bbc.co.uk/news/uk-politics-64786680?at_medium=RSS&at_campaign=KARANGA
|
nonsense |
2023-02-27 13:47:56 |
ニュース |
BBC News - Home |
Ofgem sets new price cap prompting calls for energy bill help |
https://www.bbc.co.uk/news/business-64748135?at_medium=RSS&at_campaign=KARANGA
|
shows |
2023-02-27 13:43:28 |
ニュース |
BBC News - Home |
Nigeria election results 2023: Peter Obi wins Lagos against Bola Tinubu - provisional |
https://www.bbc.co.uk/news/world-africa-64783411?at_medium=RSS&at_campaign=KARANGA
|
election |
2023-02-27 13:08:53 |
コメント
コメントを投稿