AWS |
AWS Database Blog |
Document modeling with Amazon DocumentDB and Hackolade |
https://aws.amazon.com/blogs/database/document-modeling-with-amazon-documentdb-and-hackolade/
|
Document modeling with Amazon DocumentDB and HackoladeAmazon DocumentDB with MongoDB compatibility is a fast scalable highly available and fully managed document database service that supports MongoDB workloads You can use the same MongoDB and application code drivers and tools to run manage and scale workloads on Amazon DocumentDB without worrying about managing the underlying infrastructure As a document database … |
2022-03-28 18:00:55 |
AWS |
AWS - Webinar Channel |
Building High-Performance Geospatial Applications with Amazon DynamoDB and Amazon ElastiCache |
https://www.youtube.com/watch?v=599xYhZ3V0Q
|
Building High Performance Geospatial Applications with Amazon DynamoDB and Amazon ElastiCacheModernize your data infrastructure with the most scalable trusted and secure cloud provider Choose the right database for the job among purpose built databases in the cloud to help you build use case driven highly scalable distributed applications to fit your needs Amazon DynamoDB is a fully managed serverless key value NoSQL database designed to run high performance applications at any scale Amazon ElastiCache is a fully managed in memory caching service supporting flexible real time use cases You can use ElastiCache for caching which accelerates application and database performance Join us for this hands on workshop and learn how to implement a scalable resilient high performance architecture for geospatial applications using both DynamoDB and ElastiCache for Redis Learning objectives Understand the types of workloads for which DynamoDB and ElastiCache for Redis are best suited as purpose built databases How to use DynamoDB Streams and AWS Lambda to stream Amazon DynamoDB updates to Amazon ElastiCache for Redis How to use Amazon ElastiCache for Redis for high performance geospatial queries To learn more about the services featured in this AWS Virtual Workshop please visit |
2022-03-28 18:10:50 |
海外TECH |
Ars Technica |
Samsung’s new 4K smart monitor has a magnetic wireless webcam |
https://arstechnica.com/?p=1843872
|
magnetic |
2022-03-28 18:16:05 |
海外TECH |
MakeUseOf |
How to Customize Any Icon in Windows 10 (or 11) |
https://www.makeuseof.com/tag/customize-icon-windows/
|
folders |
2022-03-28 18:30:14 |
海外TECH |
DEV Community |
What's One Thing You'd Tell Your Younger (Dev) Self? |
https://dev.to/jeremyf/whats-one-thing-youd-tell-your-younger-dev-self-3nke
|
What x s One Thing You x d Tell Your Younger Dev Self I ve been a professional programmer for years and often wish I could go back and talk to my younger self to give him some words of advice What s one thing you d tell your younger developer self And how would you know they listened |
2022-03-28 18:35:44 |
海外TECH |
DEV Community |
2 años como Front-End Developer, ¿Qué he aprendido? |
https://dev.to/jeanroa/2-anos-como-front-end-developer-que-he-aprendido-16fo
|
años como Front End Developer ¿Quéhe aprendido No debes saberlo todoEstábien equivocarse estábien cometer errores todos lo hacen estábien sentirte perdido esta bien aprende a perdonarte por los errores esto va mas alla del codigo es un consejo personal No tengas miedo a preguntarEsta es una continuación al punto anterior aprende a perdonarte por no saber algo y no tengas miedo de preguntarle a tus compañeros todos podemos aprender de todos yo he enseñado cosas nuevas a mis seniors y ellos mucho más a mi eso esta bien es lo mas lindo de nuestra profesión NO hagas cursos practica cada cosa que aprendasEsto es un problema que solemos tener los Juniors sobretodo los que somos autodidactas tendemos a devorar cursos como dulces sin probar ni practicar lo que vamos aprendiendo poco a poco horas de prueba y error te pueden salvar de min de leer documentación Esto nos ha pasado a todos y es una consecuencia de los dos primeros puntos la documentación es muy importante y generalmente no es tomada en cuenta por los Juniors pero es una herramienta indispensable para cualquier desarrollador Descansa¿Has pasado horas probando el mismo código sin éxito ¿Cansado de leer StackOverflow documentación y ver tutoriales Entonces es momento de descansar Ve a dormir juega una partida camina hazte un café Para relájate y vuelve al rato tu yo futuro te lo agradecerá |
2022-03-28 18:30:36 |
海外TECH |
DEV Community |
Jual Viagra Asli, 081377773378 Harga Ciri Viagra Asli Dan Palsu Terbaru Di Apotik |
https://dev.to/jualviagraasli/jual-viagra-asli-081377773378-harga-ciri-viagra-asli-dan-palsu-terbaru-di-apotik-2m0l
|
Jual Viagra Asli Harga Ciri Viagra Asli Dan Palsu Terbaru Di Apotik Jual Viagra Asli Pil Biru Usa Mg Di Apotik Indoneisa Menjual Obat Viagra Asli Di Apotik Harga Grosir Dan Jual Viagra Eceran Jual Viagra Asli Viagra Eceran Viagra Asli Usa Jual Viagra Jual Obat Viagra Asli Viagra Usa Harga Viagra Per Butir Di Apotik Jual Viagra Di Apotik Kimia Farma Harga Viagra Di Apotik Viagra Original Harga Viagra Di Apotik Umum Harga Viagra Di Apotik Century Harga Viagra Eceran Di Apotik K Harga Butir Viagra Di Apotik Harga Viagra Di Apotik Kimia Farma Tentang Viagra Asli Klik Website Jual Viagra AsliJual Viagra Asli yang di produksi oleh Pfizer Usa adalah perusahaan farmasi terbesar di usa ataupun seluruh dunia sejak tahun Viagra Asli sangat populer di dunia bahkan banyak di pakai oleh pemeran pria dalam industri film dewasa Ciri Viagra Asli Dan Palsu Di Apotik Indonesia Terbaru Ciri Viagra Asli Dan Palsu dengan Tablet Viagra Asli sangat mudah di kenali dari segi warna kemasan dan tablet Pil Biru yang menjadi Ciri khas Viagra Asli Jual Pil Biru Asli Obat sildenafil sitrat yang dikenal dengan nama mereknya Viagra telah disetujui oleh FDA pada tahun sebagai pengobatan oral pertama yang disetujui untuk disfungsi ereksi Hampir dua dekade kemudian obat ini tetap menjadi salah satu obat paling populer untuk mengobati DE itulah sebabnya begitu banyak obat palsu yang beredar di internet Viagra Asli Tapi PalsuObat Viagra Palsu di antaranya memiliki sebuah definisi yang luas tetapi secara kasat mata suatu produk obat obatan dapat dikatakan palsu jika terbuat dari bahan yang asli namun di campur dengan bahan tambahan lain yang berbahaya dalam dosis yang justru sangat membahayakan Di buat dengan campuran bahan yang seluruhnya di modifikasi atau racikan sendiri dengan takaran dosis yang asal atau tidak benar Produk di kemas dengan kemasan asli tapi ternyata isinya palsu nah di sini terkadang mengecoh para pembeli karena melihat dari kemasanya saja Ciri Perbedaan Viagra Asli Dan Palsu Yang wajib anda ketahui Obat Kuat Viagra asli dijual dengan bentuk kemasan botol dengan isi Tablet di produksi dari Pfizer usa Viagra Asli bila di minum rasanya pahit menyekat dengan aroma obat pada umumnya Viagra asli sangat keras di setiap tabletnya dan tidah mudah di patahkan oleh tangan hanya bisa di potong dengan carter atau alat khusus pemotong tablet Viagra Asli cetakan sangat rapi dan berwarna biru alami dan tidak mudah luntur bila terkena tangan Viagra asli bertuliskan VGR dan PFIZER di setiap tabletnya dan ingat cetakan sangat rapi Mempunyai masa kadaluarsa pakai nya Reaksi setelah minum Viagra Asli sangat cepat sekitar menit langsung bekerja pada alat vital Itulah tips cara mengenali Ciri Ciri Viagra Asli dan Palsu dari segi poto real langsung kamera bukan ambil poto dari google atau editing yang banyak di lakukan penjual abal abal Dengan mengetahui tentang ciri ciri viagra asli Anda sudah bisa membedakan mana produk asli dan mana yang palsu atau mana penjual asli dan mana penjual palsu NB Jangan tergiur dengan Harga Obat Viagra Asli dengan harga murah atau yang banyak di jual di marketplace seperti Viagra Shopee Tokopedia Bukalapak dan lain sebagainya ingat yang salah bukan Marketplace nya tapi si penjualnya atau oknum penipu atau dengan harga di bawah juta atau dengan iming iming beli viagra bonus perlu di ketahui dan buka pikiran anda dengan jernih penipu selalu melakukan banyak cara untuk menjaring sasaranya Tips Sederhana Mengetahui Penjual Viagra AsliTeliti dahulu sebelum membeli dan jangan malu bertanya secara detail tentang produk Viagra Asli dengan benar kunjungi situsnya apa bisa menampilkan data atau feedback langsung dari pelanggan dengan valid atau sekedar menapilkan artikel saja karena sebagian penjual Viagra Palsu hanya sekedar posting dan ambil poto dari google Jangan mudah percaya dengan semabarang iklan entah dari facebook atau marketplace seperti Viagra Di Shoope Bukalapak dengan harga yang tidak wajar alias Viagra Murah di bawah Harga Viagra pasaran Jangan tergiur dengan harga murah di bawah pasaran karena sudah di pastikan itu palsu jika menemukan ciri di atas maka beralihlah ke penjual lain yang terpercaya dengan data yang valid sekarang anda berada di tempat yang pas Apotik Indonesia Penjual terpercaya dan amanah dengan testimoni langsung dari pelanggan Bahaya Mengintai Bila Anda Mengkonsumsi Viagra Asli Tapi PalsuObat Viagra abal abal Asli Tapi Palsu yang banyak dijual sangat bebas di pasaran tentu sangat lebih berisiko mengancam kesehatan anda jika anda konsumsi secara terus menerus tentu sangat membahayakan kesehatan anda karena dalam kandungannya yang sangat fatal dan tidak dapat di pertanggung jawabkan secara medis atau dokter tentu sangat beresiko bagi anda berikut ulasanya di bawah ini terdapat kandungan berbahan aktif berupa inhibitor PDE yaitu kandungan yang terlalu tinggi yang dapat berpotensi menimbulkan penyakit hipotensi atau sebab turunnya pada tekanan darah anda secara drastis dan meningkat Perlu di ketahui penjualan sebuah obat yang berbahan Sildenafil palsu banyak di jual secara bebas di sekitar masyarakat atau obat tanpa resep dokter kemungkinan besar tidak menyertakan kontrai ndikasi sehingga orang awam tidak tahu bahayanya jika di konsumsi secara bersamaan dengan obat lain Viagra Asli Tapi Palsu terdapat bahan tambahan lain pada obat obatan palsu yang dapat menyebabkan semakin terjadinya risiko kesehatan anda yang mungkin bisa berakibat sangat fatal inilah yang belum banyak tau tentang Khasiat Obat Viagra palsu yang jelas masalah utamanya yaitu penyakit impotensi yang kemungkinan besar tidak akan pernah teratasi Harga Obat Viagra Asli Eceran Di Apotik Kimia Farma K Harga Obat Viagra Asli Di Apotik Kimia Farma Century da K tentu sangat bervariasi harganya karena Viagra Asli sendiri terdiri beberapa macam yaitu kemasan Botol dan Kotak banyak dari pembeli juga memilih paket hemat yaitu Viagra Eceran Harga Viagra Asli Usa sebanding dengan khasiatnya yang begitu Populer di Indonesia maupun Dunia dan sangat ampuh mengatasi masalah pria yaitu mampu menyembuhkan gejala Ejakulasi Dini Disfungsi Ereksi dan Impotensi dan menjadikan alat vital anda keras kuat dan tahan lama berulang ulang Jual Viagra Asli Botol Harga Harga Jual Viagra Eceran Di Apotik butir Harga Viagra Eceran Di Apotik butir Harga Viagra Eceran butir Anda bisa menentukan sendiri sesuai kebutuhan karena tersedia paket hemat Viagra Eceran jangan tergiur dengan harga murah yang banyak di jual bebas di online maupun marketplace sekalipun karena banyak beredar barang palsu atau kawe Testimoni Pengguna Viagra Asli Di Apotik Indonesia Testimoni Pengguna Viagra Asli dan Pengiriman barang sampai ke pelangan akan kami ulas lengkap dan data data real atau fakta dengan menampilkan cat langsung dari pelanggan lewat pesan instan whatsapp bukan poto ambil dari google atau edit edit yang banyak di lakukan penjual palsu atau oknum penipu NB Kami adalah penjual jujur dan terpercaya yang menampilkan data real langsung Untuk Menjaring pelanggan dan konsumen baru tentu dengan data real dan fakta untuk memudahkan anda membeli Viagra Asli sehingga anda tidak ragu dalam membeli Viagra Asli di tempat kami Apotik Indonesia Penjual terpercaya Bukti Pengiriman Barang Aturan Minum Dan Dosis Viagra Untuk PemulaDosis Viagra Untuk Pemula Cukup setengah Tablet Pil Biru Usa Kalau sudah tebiasa Cukup tablet saja tidak boleh melebihi aturan Dosis Yaitu tablet Bagaiman Cara Mendapatkan Viagra Asli USA Cara Mendapatkan Viagra Asli sangat mudah setelah anda mengenali bagaimana tentang Ciri Viagra Asli Dan Palsu setelah anda berkunjung di blog sederhana ini yang mengulas lengkap tentang Obat Kuat Viagra kami selaku Distributor Resmi Viagra Asli Di Indonesia sangat mengutamakan kepuasan para pelanggan dan konsumen baru untuk tidak ragu Membeli Viagra Asli di tempat kami yaitu Apotik Indonesia Penjual Terpercaya Apakah Bisa Beli Viagra Asli Di Apotik Di jaman serba mudah ini tentu saja sangat mudah dalam Membeli apapun termasuk Obat Viagra Asli di internet banyak sekali yang Menjual Viagra Pertanyaanya Apakah Viagra yang anda Beli Benar Benar Asli sekali lagi saya ingatkan JANGAN TERGIUR DENGAN HARGA MURAH ingat di sini anda beli sesuatu untuk di minum dan melakukan aktifitas dengan pasangan anda jadi berhati hatilah sebelum membeli Pastikan andan membeli di tempat yang pas dan yang terpercaya dan mampu menunjukan data VALID tentang Viagra Asli contoh reputasi website atau artikel yang anda kunjungi jika tidak bisa memberikan data valid beralihlah ke penjual Viagra Asli yang lain Jangan ragu sekarang anda di tempat yang pas APOTIK INDONESIA Distributor Resmi Viagra Asli Di Indonesia yang sudah terpercaya banyak ratusan Testimoni Pengguna Viagra Asli Dari kami yang terpuaskan dengan Data Valid feedback langsung dari pelanggan kami yang puas bukan edit edit poto yang banyak di lakukan penjual abal abal atau palsu Be Smart Chall Whatsapp Nomor resmi Kami Apakah Viagra Asli Usa Ampuh Viagra Asli Pfizer Usa dikenal sebagai Obat yang sangat ampuh untuk mengatasi masalah yaitu disfungsi ereksi atau impotensi Obat yang memiliki nama generik sildenafil ini bekerja dengan membantu meningkatkan aliran darah ke penis sehingga pemiliknya dapat mempertahankan ereksi BERAPA LAMA OBAT KUAT VIAGRA MAMPU MEMBUAT EREKSI TERJAGASecara umum Obat Kuat Viagra bekerja dengan mengendurkan pembuluh darah di penis sementara melancarkan aliran darah segar dari jantung menuju penis Semakin deras aliran darah ke penis semakin kuat dan besar ereksi yang Anda dapat Efek obat ini biasanya mulai tampak dalam menit setelah diminum Nah ketika membicarakan lama durasi ketahanan obat untuk mempertahankan ereksi sebenarnya bervariasi pada setiap pemakainya Namun umumnya pria yang minum obat Viagra dapat mempertahankan ereksi sampai jam setelah penggunaan yang dibarengi dengan rangsangan seksual Tergantung pula pada seberapa baik metabolisme tubuhnya pria yang minum obat kuat Viagra mungkin dapat ereksi beberapa kali dalam rentang waktu tersebut Di sisi lain tak semua pria dapat merasakan efek obat yang sama Kebanyakan pria melaporkan bahwa efek pil biru ini biasanya mulai menghilang dalam jam setelah dosis pertama Yang perlu dipahami Viarga sebetulnya tidak menjamin seorang pria akan ereksi dalam waktu lama Sebab pada dasarnya obat ini hanya digunakan untuk membantu meningkatkan sirkulasi darah menuju penis Rangsangan seksual dari foreplay atau masturbasi juga penting dilakukan agar seks terasa lebih nikmat INILAH FAKTOR YANG DAPAT MEMPENGARUHI CARA KERJA OBAT KUAT VIAGRAAda banyak faktor penting yang dapat memengaruhi seberapa lama obat kuat Viagra dapat mempertahankan ereksi Beberapa di antaranya meliputi DosisBanyaknya dosis obat yang Anda minum akan memengaruhi seberapa lama efek obat tersebut dapat dirasakan oleh tubuh Anda Viagra miligram mg umumnya memiliki efek yang jauh lebih rendah ketimbang Viagra mg Namun minum obat Viagra dengan dosis yang lebih tinggi tidak disarankan Dalam banyak kasus minum obat dengan dosis tinggi tidak aman karena dapat memicu berbagai komplikasi yang tidak diinginkan Seperti masalah jantung UsiaSeiring bertambahnya usia metabolisme tubuh untuk memecah obat akan melambat Artinya efek Viagra mungkin dapat bertahan lebih lama pada orang orang yang berusia lanjut Obat ini mungkin bisa bertahan lebih lama pada pria yang berusia tahun ke atas Kondisi kesehatanKondisi kesehatan Anda secara menyeluruh nyatanya dapat memengaruhi seberapa lama Viagra bisa bertahan dan seberapa baik obat ini bekerja untuk Anda Beberapa penyakit seperti diabetes gangguan hati dan ginjal multiple sclerosis MS aterosklerosis dan penyakit kronis lainnya mungkin dapat menghambat kinerja obat ini Kondisi psikologisMerasa cemas gugup depresi atau stres semuanya dapat memengaruhi bagaimana tubuh Anda merespons rangsangan seksual Jadi jika Anda sendiri merasa tertekan tegang atau tidak nyaman saat berhubungan seks maka khasiat obat ini pun tidak akan dirasakan optimal Makanan dan minuman yang dikonsumsiFaktanya asupan nutrisi dapat memengaruhi seberapa baik obat ini bekerja Jika sebelumnya Anda makan makanan tinggi lemak dalam porsi yang banyak obat ini mungkin akan cenderung lebih susah untuk proses tubuh Selain itu alkohol juga mungkin dapat menurunkan aliran darah ke pensi sehingga membuat obat ini kurang efektif untuk bekerja atau bertahan lama Obat obatan tertentuBeberapa obat terutama antibiotik seperti erythromycin Ery Tab clarithromycin Biaxin dan ciprofloxacin Cipro dapat berinteraksi dengan Viagra dan memengaruhi kinerja obat tersebut Jadi sebelum memutuskan untuk minum obat kuat pastikan Anda membaca aturan pakai yang tertera pada label kemasan dengan teliti Perhatikan obat apa saja yang mungkin dapat berinteraksi dengan Viagra agar efektivitas obat ini dapat Anda rasakan dengan optimal MANFAAT LAIN DARI OBAT KUAT VIAGRA SELAIN SEBAGAI OBAT KUAT PRIA Manfaat Lain Dari Obat Kuat Viagra Yang Perlu Di KetahuiMungkin hanya sedikit diantara anda yang tahu kalau ternyata Obat Kuat Viagra memiliki manfaat lain selain sebagai Obat kuat Pria untuk mengatasi ejakulasi dini Berikut ini beberapa manfaat lain daripada obat kuat viagra Muscular dystrophyObat Kuat Viagra diduga mampu melindungi jantung para pria yang menderita muscular dystrophy penyakit yang menyebabkan otot melemah dan penyakit jantung Penelitian yang dilakukan sudah menunjukkan hal yang menjanjikan pada tikus Penyakit paru paruObat Kuat Viagra pernah disetujui sebagai obat untuk penyakit paru obstruktif kronik Tetapi ketika menjalani uji klinis sayangnya Viagra gagal meringankan penyakit pasien dan malah memperburuk kondisinya Disfungsi ereksi wanitaTerlepas dari kesuksesan Viagra dalam mengatasi impotensi pria pil biru ini juga pernah diujicobakan pada wanita demi mengatasi disfungsi ereksi kaum hawa Takut ketinggianViagra bisa membantu seseorang yang takut ketinggian misalnya ketika naik ke puncak gunung Performa atletikBeberapa pemain basket mengaku menggunakan Viagra untuk meningkatkan performa fisiknya Meskipun Viagra memang terbukti melancarkan peredaran darah namun belum ada bukti apakah pil biru tersebut memang bisa meningkatkan performa atletik Mabuk udaraMenurut penelitian yang dilakukan pada hamster Viagra juga bisa mengatasi mabuk udara atau jet lag setelah berjam jam melakukan perjalanan dengan pesawat Tangan dinginTangan dan kaki dingin biasanya diindikasikan sebagai gejala penyakit Raynaud Kabarnya gejala penyakit tersebut juga bisa diredakan Viagra Fibrosis sistikPeneliti tengah meneliti apakah Viagra juga bisa mengatasi Fibrosis sistik penyakit yang menyebabkan kerusakan pada paru paru Bayi tabungBagi pasangan yang ingin memiliki keturunan lewat program bayi tabung Viagra mampu membantu implan embrio dan meningkatkan kemungkinan kehamilan StrokeObat Kuat Viagra sudah terbukti mampu melawan stroke pada tikus percobaan Kini pil biru tersebut masih diujicobakan pada manusia DiabetesObat Kuat Viagra diduga mampu melawan efek diabetes seperti melancarkan fungsi pembuluh darah yang rusak akibat kadar gula tinggi demikian menurut penelitian terhadap hewan percobaan SkizofreniaPeneliti masih menginvestigasi apakah Viagra juga mampu memperbaiki suasana hati dan memori penderita skizofrenia Sindrom kelelahan kronisPeneliti kini tengah mempelajari apakah Viagra berhasil mengatasi rasa lelah dan melancarkan peredaran darah di otak pada para penderita sindrom kelelahan kronis Obat Kuat Viagra telah berhasil menunjukkan khasiatnya dalam melawan apnea tidur ーgangguan tidur yang membuat penderita berhenti bernapas selama beberapa detik Itulah berbagai khasiat dari Viagra selain sebagai obat kuat meskipun kebanyakan di antaranya masih diujicobakan semoga Viagra memang bermanfaat dan mampu menyembuhkan penyakit tersebut MANFAAT YANG ANDA DAPATKAN SETALAH MINUM OBAT KUAT VIAGRA ASLI USA mengencangkan ereksi mampu membangkitkan alat vital anda menjadi keras setelah mengkonsumsi viagra mampu mengatasi disfungsi ereksi atau ejakulasi dini dan impotensi bisa tahan lama berulang ulang hingga jam lamanya di rekomendasikan oleh para dokter dunia untuk menunjang sexsualitas anda menjaga keharmonisan rumah tangga anda Contoh format pemesanan nama andy prasetyoalamat jalan raya kebun jeruk no xxx jakarta barat kota jakartakab xxxxxkec xxxxxno hp pemesanan Botol Obat Kuat ViagraInfo Pemesanan Hubungi whatsapp Distributor Resmi Jual Viagra Asli Di Apotik Indonesia Meliputi Jual Viagra Asli Usa Original Di Bangka Belitung Meliputi Koba Manggar Mentok Pangkal Pinang Sungailiat Tanjung Pandan Toboali Belinyu Jebus Kelapa Kabupaten Bangka Tengah Belitung Timur Bangka Barat Bangka Belitung Bangka Selatan Jual Obat Kuat Viagra Usa Original Di Bengkulu Meliputi Arga Makmur Bengkulu Curup Kaur Kepahiang Lebong Manna Muko Muko Tais Kabupaten Bengkulu Utara Rejang Lebong Kaur Kepahiang Lebong Bengkulu Selatan Muko Muko Seluman Jual Viagra Asli Usa Original Di Kalimantan Barat Meliputi Bengkayang Ketapang Mempawah Nanga Pinoh Melawi Ngabang Pontianak Putussibau Sambas Sanggau Sekadau Hilir Singkawang Sintang Sungai Raya Kubu Raya Teluk Melano Wajok Kabupaten Bengkayang Ketapang Pontianak Melawi Landak Kapuas Hulu Sambas Sanggau Sekadau Sintang Kubu Raya Kayong Utara Jual Viagra Asli Usa Original Di Jawa Timur Meliputi Bangkalan Banyuwangi Batu Blitar Bojonegoro Bondowoso Caruban Gresik Jember Jombang Kediri Kepanjen Trenggalek Krasaan Lamongan Lumajang Madiun Magetan Malang Mojokerto Nganjuk Ngawi Pacitan Pamekasan Pandaan Pasuruan Ponorogo Probolinggo Sampang Sidoarjo Situbondo Sumenep Surabaya Tuban Tulungagung Paiton Wlingi Kabupaten Bangkalan Jual Obat Kuat Viagra Usa Original Di Bali Meliputi Amlapura Karangasem Bangli Denpasar Gianyar Menguwi Badung Negara Jembrana Samarapura Klungkung Singaraja Buleleng Tabanan Kuta Nusa Dua Sanur Gilimanuk Ngurahrai Jimbaran Kabupaten Karangasem Bangli Gianyar Badung Jembrana Klungkung Buleleng Tabanan Jual Viagra Asli Usa Original Di Jakarta Meliputi Jakarta Barat Jakarta Pusat Jakarta Selatan Jakarta Timur Jakarta Utara Jual Obat Kuat Viagra Usa Original Di Banten Meliputi Baros Cilegon Pandeglang Rangkasbitung Serang Tangerang Tigaraksa Anyer Merak Balaraja Serpong BSD Kabupaten Serang Pandeglang Lebak Tangerang Jual Viagra Asli Usa Original Di Jawa Barat Meliputi Bandung Banjar Bekasi Bogor Ciamis Cianjur Cibinong Cikarang Cimahi Cirebon Depok Garut Indramayu Karawang Kuningan Majalengka Ngamprah Cimareme Purkawarka Pelabuhan Ratu Singaparna Soreang Subang Sukabumi Sumber Sumedang Tasikmalaya Majalaya Jatilangor Lembang Rancaekek Jatibarang Kadipaten Losari Palimanan Jatiwangi Kabupaten Ciamis Jual Obat Kuat Viagra Usa Original Di Jawa Tengah Meliputi Banjarnegara Batang Blora Boyolali Brebes Cilacap Demak Jepara Karanganyar Kebumen Kendal Klaten Mungkid Magelang Pati Pekalongan Pemalang Purbalingga Purwokerto Banyumas Purwodadi Purworejo Rembang Salatiga Semarang Slawi Sragen Sukoharjo Surakarta Solo Tegal Temanggung Ungaran Wonogiri Wonosobo Ambarawa Cepu Bojonegoro Majenang Ajibarang Kartosuro Bumi Ayu Kudus Grobogan Jual Viagra Asli Usa Original Di Sumatera Utara Meliputi Balige Binjai Dolok Sanggul Gunung Sitoli Gunung Tua Kabanjahe Kisaran Limapuluh Lubuk Pakam Medan Padang Didempuan Pangururan Panyambungan Pematangsiantar Rantau Prapat Salak Sei Rampah Sibolga Sibuhuan Sidikalang Sipirok Stabat Tanjung Balai Asahan Tarutung Tebing Tinggi Teluk Dalam Pangkalan Brandan Laguboti Belawan Siborong Borong Tanjung Morawa Kaputaten Toba Samosir Humbang Hasudutan Nias Padang Lawas Utara Karo Asahan Batubara Deli Serdang Samosi Mandailing Natal Simalungun Labuhan Batu Pakpak Bharat Serdang Bedagai Tapanuli Tengah Padang Lawas Dairi Tapanuli Selatan Langkat Tapanuli Utara Nias Selatan Jual Viagra Asli Usa Original Di D I Aceh Meliputi Banda Aceh Bireuen Biang Kejeren Biangpidie Idi Rayeuk Jantho Kuala Simpang Kutacane Krueng Sabee Langsa Lhokseumawe Lhoksukon Meulaboh Meureudu Sabang Sigli Simpang Tiga Redelon Sinabang Singkil Subulussalam Suka Makmue Takengon Tapak Tuan Calang Kabupaten Bireuen Gayo Lues Aceh Barat Daya Aceh Timur Aceh Besar Aceh Tamiang Aceh Tenggara Aceh Jaya Aceh Utara Aceh Barat Pidie Jaya Pidie Bener Meriah Simeulue Aceh Singkil Nagan Raya Aceh Tengah Aceh Selatan Jual Obat Kuat Viagra Usa Original Di Riau Meliputi Bagan Siapi Api Bangkinang Bengkalis Dumai Pangkalan Kerinci Pasir Pangaraian Pekanbaru Rengat Siak Indrapura Teluk Kuantan Tembilahan Minas Rumbai Marpoyan Ujung Batu Duri Kabupaten Rokan Hilir Kampar Bengkalis Pelalawan Rokan Hulu Indragiri Hulu Siak Kuantan Singingi Indragiri Hilir Jual Viagra Asli Usa Original Di Kepulauan Riau Meliputi Bandar Seri Bintan Batam Ranai Tanjung Balai Karimun Kundur Tanjung Pinang Nongsa Kabil Lingga Daik Dabo Singkep Kabupaten Natuna Karimun Lingga Jual Obat Kuat Viagra Usa Original Di Sumatera Barat Meliputi Arosuka Batu Sangkar Bukittinggi Lubuk Basung Lubuk Sikaping Muara Sijunjung Padang Padang Panjang Painan Pariaman Padang Pariaman Payakumbuh Dharmasraya Sawahlunto Solok Tuapejat Lima Puluh Kota Solok Selatan Kep Pagai Lubuk Alung Kabupaten Solok Tanah Datar Agam Pasaman Sijunjung Pesisir Selatan Padang Pariaman Dharmasraya Kepulauan Mentawai Lima Puluh Kota Jual Viagra Asli Usa Original Di Jambi Meliputi Bangko Jambi Kuala Tungkal Muara Bulian Muara Bungo Buara Tebo Muara Sabak Sarolangun Sengeti Sungai Penuh Ramba Kabupaten Merangin Tanjung Jabung Barat Batang Hari Bungo Tebo Tanjung Jabung Timur Sarolangun Muaro Jambi Kerinci Jual Obat Kuat Viagra Usa Original Di Sumatera Selatan Meliputi Baturaja Indralaya Kayu Agung Lahat Martapura Muara Beliti Baru Musi Rawas Muara Enim Tanjung Enim Muaradua Lubuk Linggau Pagar Alam Palembang Pangkalan Balai Banyuasin Prabumulih Sekayu Tebing Tinggi Sungai Lilin Sungai Gerong Plaju Kabupaten Ogan KOmering Ulu Ogan Ilir Ogan Kemering Ilir Lahat OKU Timur Musi Rawas Muara Enim OKU Selatan Banyuasin Musi Banyuasin Empat Lawang Jual Viagra Asli Usa Original Di Sumatera Utara Meliputi Koba Manggar Mentok Pangkal Pinang Sungailiat Tanjung Pandan Toboali Belinyu Jebus Kelapa Kabupaten Bangka Tengah Belitung Timur Bangka Barat Bangka Belitung Bangka Selatan Jual Obat Kuat Viagra Usa Original Di Bengkulu Meliputi Arga Makmur Bengkulu Curup Kaur Kepahiang Lebong Manna Muko Muko Tais Kabupaten Bengkulu Utara Rejang Lebong Kaur Kepahiang Lebong Bengkulu Selatan Muko Muko Seluma Jual Viagra Asli Original Di Lampung Meliputi Bandar Lampung Blambangan Umpu Gedong Tataan Gunung Sugih Kalianda Kota Agung Kotabumi Liwa Menggala Metro Sukadana Bakauheuni Krui Pesisir Tengah Sumber Jaya Talang Padang Pringsewu Bukit Kemuning Kabupaten Way Kanan Pesawaran Lampung Tengah Lampung Selatan Tanggamus Lampung Utara Lampung Barat Tulang Bawang Lampung TimurJual Obat Kuat Viagra Usa Original Di Kalimantan Barat Meliputi Bengkayang Ketapang Mempawah Nanga Pinoh Melawi Ngabang Pontianak Putussibau Sambas Sanggau Sekadau Hilir Singkawang Sintang Sungai Raya Kubu Raya Teluk Melano Wajok Kabupaten Bengkayang Ketapang TERIMAKASIH TELAH MENGUNJUNGI ARTIKEL SEDERHANA TENTANG Jual Viagra Asli |
2022-03-28 18:28:01 |
海外TECH |
DEV Community |
AWS Recipe: Build an Asynchronous Serverless Task API |
https://dev.to/aws-builders/aws-recipe-build-an-asynchronous-serverless-task-api-3aa2
|
AWS Recipe Build an Asynchronous Serverless Task APIIn this article you will learn how to build an asynchronous serverless task API from scratch on AWS using Lambda DynamoDB API Gateway SQS and SNS The Lambda functions will be implemented in Python and the REST API will use the FastAPI framework The entire application will be deployed using AWS SAM Table of Contents Introduction Recipe ingredients Requirements Build the API stack Build the Handler stack s Showtime Cleaning up Potential improvements Conclusion IntroductionThis article will guide you through the process of building an asynchronous serverless task API on AWS With complete code examples you will learn how to Run FastAPI in a Lambda function behind an API Gateway using DynamoDB for storage Using DynamoDB streams with filters together with a Lambda function to publish events to SNS Implementing a fan out pattern with SNS and SQS to distribute tasks to different handlers Using Systems Manager Parameter Store to share variables between CloudFormation stacks We will first build a stack that includes an API that allows clients to create and list tasks This API will be deployed to AWS Lambda behind a HTTP API Gateway The application will store tasks in DynamoDB and whenever a new task is created it will be sent via a DynamoDB Stream to another Lambda that will publish the task to SNS In another stack we will create handlers where each handler will be responsible for processing a specific type of task Each handler will comprise of an SQS queue that will receive tasks from SNS and a Lambda function that will process the task and report the task status back to the REST API Recipe ingredientsAPI GatewayLambdaDynamoDBDynamoDB StreamSNSSQSFastAPI RequirementsTo follow along in this article you will need PythonAWS SAM CLI Build the API stackLet s begin by setting up everything required on the API side of the architecture The API stack will include the following An API Gateway to act as an entry point for the API A Lambda Function running FastAPI for the backend logic A DynamoDB Table for storing data about tasks A DynamoDB Stream that records changes made to the table A Lambda Function that is invoked whenever a new task is created via the stream An SNS Topic on which new tasks are published for further processing by handlers Create folder structure and required SAM filesTo make it easier to understand in which file everything below should go into this is how the API stack directory will look when you are finished with this section api stack api function requirements txt app init py dynamo py models py publish function requirements txt app init py template yml samconfig tomlStart by creating and adding the following to the api stack template yml file AWSTemplateFormatVersion Transform AWS Serverless Description Task APIResources To make SAM deployment easier and avoid parameters to the sam deploy command add the following to api stack sam config toml version default global parameters stack name TaskAPI Or choose your own stack name default deploy default deploy parameters capabilities CAPABILITY IAM s bucket BUCKET NAME A bucket your credentials have access tos prefix task api The prefix that will be used for your s assetsregion eu west Change to your preferred region DynamoDB TableTo start off we will create a table that will store all of our tasks In this example we will keep the table rather simple and use only a Primary Key named id If you for example want to have tasks scoped to e g a user an application an organization or some other kind of entity in your systems you could opt for a schema where you use the entity ID such as User ID as the Primary Key and the Task ID as the Sort Key But for now let s keep it simple and continue with just using the Task ID as Primary Key We will use the CloudFormation resource AWS DynamoDB Table to define the table since AWS Serverless SimpleTable does not support advanced features such as streams In Resources in the SAM template add the following Table Type AWS DynamoDB Table Properties TableName tasks AttributeDefinitions AttributeName id AttributeType S KeySchema AttributeName id KeyType HASH ProvisionedThroughput ReadCapacityUnits WriteCapacityUnits I ve used the minimum provisioned throughput for testing purposes Feel free to modify it to your needs or change it if you want to use on demand billing Feel free to deploy your SAM application after every step to verify that everything works To do so from the api stack directory first build the application with sam build and deploy it with sam deploy API GatewayTo front our API we will use API Gateway More specifically we will use a HTTP API since it is both cheaper and we do not need the more advanced features of a REST API For now we will not use any features such as Authorization CORS or any other advanced features of an API Gateway Authorization is mentioned in the potential improvements section In Resources in the SAM template add the following Api Type AWS Serverless HttpApi ApiUrlParameter Type AWS SSM Parameter Properties Name tasks api url Type String Value Sub https Api execute api AWS Region AWS URLSuffix The resource ApiUrlParameter will output the URL of the API Gateway to AWS Systems Manager Parameter Store This will be used as input to the task handler stack s To easily find the auto generated API URL you can take advantage of CloudFormation Outputs Add the following to the SAM template Remember Outputs is a top level key Outputs ApiUrl Description URL of the Task API Value Fn Sub https Api execute api AWS Region AWS URLSuffix The next time you run sam deploy you should see the URL in the output Lambda APIFinally it is time to write some actual code and we will be using Python for this We will use the FastAPI framwork to build our API and use an adapter library called Mangum to make FastAPI play nice inside a Lambda function SAM TemplateWe need to define our Lambda function in the SAM template Add the following resource ApiFunction Type AWS Serverless Function Properties FunctionName TaskAPI MemorySize CodeUri api function Handler app handler Runtime python Policies DynamoDBCrudPolicy TableName Ref Table Environment Variables TABLE NAME Ref Table Events DefaultEndpoint Type HttpApi Properties ApiId Ref ApiThe above template references the Table resource created before to add the table name as an environment variable as well as adding an IAM policy to the Lambda execution role that allows it to perform CRUD operations on the DynamoDB table We also add the API Gateway created earlier as an event source BoilerplateFirst let s create a requirements txt file in the api stack api function directory This should include the following packages mangumfastapibotopydanticThen in the the api stack api function app init py file add the following from fastapi import FastAPI HTTPExceptionfrom mangum import Mangumapp FastAPI handler Mangum app HTTPException will be used later on so might aswell add it in now RoutesWe will implement the following routes GET tasks Returns a list of all tasks GET tasks id Returns a task with the given ID POST tasks Creates a new task PATCH tasks id Updates the status of a task with the given ID GET tasks id Let s start with implementing the Get tasks id endpoint First in the api stack api function app dynamo py file add the following import osimport bototable boto resource dynamodb Table os environ TABLE NAME class Error Exception passclass TaskNotFoundError Error passdef get task task id str gt dict res table get item Key id task id item res get Item if not item raise TaskNotFoundError return itemHere we use the boto resource client to call the GetItem API with the task id as the Primary Key If the task is not found we raise an error otherwise we return the task data We do not filter the data here this is handled by FastAPI response models as you will see soon Before creating our route logic let s create a response model that will define what data is returned by the API when a task is retrieved We will use pydantic to declare our modelsIn api stack api function app models py add the following from pydantic import BaseModelfrom typing import Literaltask types Literal TASK TASK TASK status types Literal CREATED IN PROGRESS COMPLETED FAILED class TaskResponse BaseModel id str task type task types status status types status msg str created time int None updated time int NoneNow let s create the route logic In api stack api function app init py add the following from import models dynamo app get tasks task id response model models TaskResponse def get task task id str try return dynamo get task task id except dynamo TaskNotFoundError raise HTTPException status code detail Task not found Let s deploy what we have so far and see if it works Run sam build and sam deploy If you haven t used FastAPI before this might come as a surprise but fire up your favourite browser and navigate to https YOUR API URL docs The URL should be listed in the output of sam deploy FastAPI comes with built in support for generating and serving documentation for your API using Swagger Try your new route from the Swagger UI or with something like curl curl https YOUR API URL tasks detail Task not found Obviously no tasks exist yet since we haven t created any yet Let s change that and implement the create route POST tasksIt is time to implement the logic for creating tasks First we need to decide what kind of input the user should include in the request We want to support different kinds of tasks so we will need to include a task type field in the request Different tasks might require different payloads so let s add a data field in the request which accepts generic json When a task is created the response we will send the user will include the task ID Add the following models to api stack api function app models py class CreatePayload BaseModel task type task types data dictclass CreateResponse BaseModel id strWhen creating a task we want to generate an ID for the task We can use the uuid library to generate a random UUID We will also add the current timestamp in the attribute created time And finally to avoid handling json in payloads when publishing tasks over SNS and SQS we will base encode the payload and store the encoded payload in DynamoDB Add the following to api stack api function app dynamo py import baseimport jsonfrom uuid import uuidfrom datetime import datetime def create task task type str payload dict gt str task id str uuid table put item Item id task id task type task type status CREATED payload encode payload created time get timestamp return id task id def encode data dict gt str json string json dumps data return base bencode json string encode utf decode utf def get timestamp gt int return int datetime utcnow timestamp And finally add the following to api stack api function app init py app post tasks status code response model models CreateResponse def post task payload models CreatePayload return dynamo create task payload task type payload data Here we can see how FastAPI takes care of input validation and serialization when we specify the response model models CreateResponse as well as the expected request payload with payload models CreatePayload Let s deploy and try creating a task curl X POST H Content Type application json d task type TASK data foo bar https YOUR API URL tasks id abcd abcd curl https YOUR API URL tasks abcd abcd id abcd abcd task type TASK status CREATED status msg created time updated time null Did you accidentally forgot to copy the task ID after creating a few tasks If there only was a way to list all tasks without opening up the DynamoDB console Let s implement that next GET tasksThe list route will be very simple without any filter or sort queries We will allow a maximum of tasks to be returned at a time If there are more than tasks we will return a next token in the response The next request should then include the next token in the query string to fetch the next tasks If there are no more tasks left next token will be null Since all items in the DynamoDB table have unique primary keys we will need to use the scan operation to fetch items Let s start with the model for the response which will be a list of tasks and a next token field In api stack api function app models py add the following class TaskListResponse BaseModel tasks list TaskResponse next token str NoneMoving on the the actual database logic we will need to conditionally add the next token to the scan operation in case it is provided The next token will be base encoded before it is returned to the client so we will need to decode it before we can use it The scan response will include a LastEvaluatedKey if there are more items left to fetch so we use that to set the next token Add the following to api stack api function app dynamo py def list tasks next token str None gt dict scan args Limit if next token scan args ExclusiveStartKey decode next token res table scan scan args response tasks res Items if LastEvaluatedKey in res response next token encode res LastEvaluatedKey return response def decode data str gt dict json string base bdecode data encode utf decode utf return json loads json string Finally add the following to api stack api function app init py app get tasks response model models TaskListResponse def list tasks next token str None return dynamo list tasks next token Now deploy and you should be able to list all tasks you ve created curl https YOUR API URL tasks tasks id abcd abcd task type TASK status CREATED status msg created time updated time null more tasks next token null We can now create and list tasks but what good is that if we cannot update their status Let s go ahead and implement the final route PATCH tasks id This endpoint is supposed to be used internally by the task handlers Thus it would be preferable to add some kind of authorization here so that users cannot update tasks directly But to keep the scope small I have ignored it for now We want task handlers to be able to update the status of the tasks they handle as well as an optional message string Add the following model to api stack api function app models py class UpdatePayload BaseModel status status types status msg str The logic for updating a task will be a bit more complex than the other operations First we need to make sure the task actually exists We also want to guard ourselves against multiple handlers trying to start the same task This could for example happen due to a side effect of the SQS at least once delivery mechanism or if the visiblity timeout on the queue is shorter than the time it takes to process a task These two checks are made with conditional updates in DynamoDB Add the following code to api stack api function app dynamo py from boto dynamodb conditions import And Attr class InvalidTaskStateError Error pass def update task task id str status str status msg str cond Attr id exists if status IN PROGRESS cond And cond Attr status eq CREATED try table update item Key id task id UpdateExpression set S s status msg m updated time t status is reserved ExpressionAttributeNames S status ExpressionAttributeValues s status m status msg t get timestamp ConditionExpression cond except table meta client exceptions ConditionalCheckFailedException raise InvalidTaskStateErrorWe first create a condition that requires the item to exist already Then if we are setting the state to IN PROGRESS we will also require the task to have the status CREATED This way if another requests comes in that tries to set the state to IN PROGRESS while it already is in progress the request will fail We then use the update item method which will throw an exception if the condition evaluates to false As far as I know you cannot see which part of the condition failed so we cannot differentiate between a task that doesn t exist and a task that is already in progress Finally add the route to api stack api function app init py and we should be good to go app patch tasks task id status code def update task task id str payload models UpdatePayload try return dynamo update task task id payload status payload status msg except dynamo InvalidTaskStateError raise HTTPException status code detail Task does not exist or is already in progress Deploy and try it out You are now finished with the API DynamoDB StreamWe now want to enable a Stream on the DynamoDB table I choose to use streams to remove the need to handle transactions Imagine the following scenario User creates a task through the APITask is created in DynamoDBRequest to SNS fails for some reasonWe would then need to roll back the task we created in DynamoDB By using streams we make sure that we only send a task to SNS after it has been commited to the database And if the request to SNS then fails the function can be configured to retry a set amount of times To enable the stream add StreamSpecification under properties in the Table resource in the SAM template Table Type AWS DynamoDB Table Properties StreamSpecification StreamViewType NEW IMAGEFor now we only care about the current state of the items in the stream If we wanted to act on specific changes in the DynamoDB table such as send a notification somewhere when a task went from IN PROGRESS to FAILED we would need to use NEW AND OLD IMAGES instead of NEW IMAGE That way we could compare the old and new values of the item in the stream handler SNS TopicWe also need an SNS Topic to send our tasks to Add the following to the SAM template Topic Type AWS SNS Topic TopicArnParameter Type AWS SSM Parameter Properties Name tasks topic arn Type String Value Ref TopicThe resource TopicArnParameter will output the Topic ARN to AWS Systems Manager Parameter Store This will be used as input to the task handler stack s Publisher LambdaIt is time to create our second Lambda function This function will be responsible for publishing the task to SNS Required packagesAdd the following to api stack publish function requirements txt botoaws lambda powertoolsLambda Powertools for Python is a package that provides a lot of useful features when working with Lambda functions such as logging tracing and data classes for common event source payloads SAM TemplateLet s define the publisher function in the SAM template PublishFunction Type AWS Serverless Function Properties FunctionName TaskPublisher MemorySize CodeUri publish function Handler app handler Runtime python Policies SNSPublishMessagePolicy TopicName GetAtt Topic TopicName Environment Variables TOPIC ARN Ref Topic Events Stream Type DynamoDB Properties Stream GetAtt Table StreamArn StartingPosition TRIM HORIZON MaximumRetryAttempts FilterCriteria Filters Pattern eventName INSERT Here we can see that we are doing almost the same thing with the SNS Topic as we did with the DynamoDB table in the API function We are using the built in SNSPublishMessagePolicy policy to give the function permissions to publish to the topic We also define a Stream event that will trigger the function when some operation is done in the DynamoDB table We also define a filter criteria to only trigger the function when a new item is added to the table i e when a task is first created HandlerThe publisher handler will be quite simple Here we utilize the package aws lambda powertools to provide us with data classes for the event payloads For each message received from the stream which is filtered to only include INSERT events we publish a message to SNS We send the payload which is already base encoded as the message body and we add the task ID and task type as message attributes All in all it looks like this Add it to api stack publish function app init py and we are done with the entire API stack import osimport botofrom aws lambda powertools utilities data classes import event source DynamoDBStreamEvent topic boto resource sns Topic os environ TOPIC ARN event source data class DynamoDBStreamEvent def handler event DynamoDBStreamEvent for record in event records task id record dynamodb keys id get value task type record dynamodb new image task type get value payload record dynamodb new image payload get value res topic publish MessageAttributes TaskId DataType String StringValue task id TaskType DataType String StringValue task type Message payload print f Message res MessageId published Great job so far We have now finished the API part of the system and it is time to start building our handlers Build the Handler stack s With the API complete we can now build the handler stack s In this example I will only create a single stack with a single handler for events with task type set to TASK Implementing handlers for TASK and TASK or other events is left as an exercise for the reader The stack we will build will include the following resources A Lambda Function that will be responsible for handling the task An SQS Queue that will be used as a middleware between the SNS Topic and Lambda function An SQS Queue Policy that will be used to grant the SNS Topic permission to send messages to the SQS Queue An SNS Subscription between the SNS Topic and the SQS Queue Another SQS Queue that will act as a dead letter queue Create folder structure and required SAM filesTo make it easier to understand in which file everything below should go into this is how the Handler stack directory will look when you are finished with this section handler stack task function requirements txt app init py template yml samconfig tomlAs before add some boilerplate to the handler stack template yml file AWSTemplateFormatVersion Transform AWS Serverless Description Task APIResources We will also use a handler stack samconfig toml file for easier CLI usage version default global parameters stack name TaskHandlers Or choose your own stack name default deploy default deploy parameters capabilities CAPABILITY IAM s bucket BUCKET NAME A bucket your credentials have access tos prefix task handlers The prefix that will be used for your s assetsregion eu west Change to your preferred region SQS QueueFirst let s create the SQS Queue as well as the dead letter queue Add the following resources to the SAM template TaskHandlerQueue Type AWS SQS Queue Properties RedrivePolicy deadLetterTargetArn GetAtt TaskHandlerDLQ Arn maxReceiveCount TaskHandlerDLQ Type AWS SQS QueueBy using a DLQ we will be able to capture events that failed to be processed by the Lambda function We can analyze the events and either discard them or send them back to the main queue to be processed again maxReceiveCount specifies how many times you want to retry the event in case of failure before sending it to the dead letter queue In this example we will keep it at one to disable retries SNS SubscriptionWe now want to set up a subscription to the SNS Topic that was created in the API stack Remember how we created an SSM parameter in the API stack with the topic arn We will now import that value in the handler stack We will also need to create a Queue Policy that will allow the SNS Topic to send messages to the SQS Queue In the handler we are creating now we only want to process events which have the message attribute TaskType set to TASK To do this we will use a filter policy on the subscription In the SAM template first add the Parameters section Parameters TasksTopic Type AWS SSM Parameter Value lt String gt Description Tasks Topic Arn Default tasks topic arnNow under resources add the following TaskHandlerQueuePolicy Type AWS SQS QueuePolicy Properties Queues Ref TaskHandlerQueue PolicyDocument Version Statement Effect Allow Action sqs SendMessage Resource GetAtt TaskHandlerQueue Arn Principal Service sns amazonaws com Condition ArnEquals aws SourceArn Ref TasksTopicTaskHandlerSubscription Type AWS SNS Subscription Properties Protocol sqs TopicArn Ref TasksTopic Endpoint GetAtt TaskHandlerQueue Arn RawMessageDelivery True FilterPolicy TaskType TASK Handler function SAM TemplateWe need to define our Lambda function in the SAM template Add the following resource TaskHandlerFunction Type AWS Serverless Function Properties FunctionName TaskHandler MemorySize Timeout CodeUri task function Handler app handler Runtime python Policies SQSPollerPolicy QueueName GetAtt TaskHandlerQueue QueueName Environment Variables TASKS API URL Ref TasksApiUrl Events Stream Type SQS Properties Queue GetAtt TaskHandlerQueue Arn BatchSize As you can see the lambda function requires the URL of the Task API Since we exported the URL to the parameter store from the API stack we should add the following under the Parameters section TasksApiUrl Type AWS SSM Parameter Value lt String gt Description Tasks Default tasks api url CodeNow it is time to implement the actual task handler for the TASK events The example I will show here is very minimal and completely useless but it should be enough to get you started Again we will use the aws lambda powertools to deserialize the event payload from SQS to make our life a little easier For each record that the lambda receives we will do the following Read Task ID and Task Type from the message attributes Decode the base encoded payload that the client provided when creating the task Call the Update endpoint in the Task API to set the task to IN PROGRESS Perform the actual task In this case sleep for seconds If the task was successful call the Update endpoint in the Task API to set the task to COMPLETED If an exception was raised update the status to FAILED In the code example I also randomly raise exceptions to simulate failures All in all the handler function looks like this Add it to the handler stack task function app init py file import baseimport jsonimport osimport timeimport requestsimport randomfrom aws lambda powertools utilities data classes import event source SQSEvent API URL os environ TASKS API URL event source data class SQSEvent def handler event SQSEvent context for record in event records task id record message attributes TaskId string value task type record message attributes TaskType string value payload decode payload record body print f Starting task task type with id task id update task status task id IN PROGRESS Task started try do task payload except Exception as e print f Task with id task id failed str e update task status task id FAILED str e continue print f Task with id task id completed successfully update task status task id COMPLETED Task completed def do task payload dict Do something here print f Payload payload time sleep if random randint Simulate failure in some invocations raise Exception Task failed somehow def decode payload payload str gt dict json string base bdecode payload encode utf decode utf return json loads json string def update task status task id str status str status msg str data status status status msg status msg url f API URL tasks task id res requests patch url json data if res status code print f Request to API failed res json raise Exception Update task status failed Also don t forget the to add the required packages in the handler stack task function requirements txt file aws lambda powertoolsrequestsThe handler stack is done for now I ll leave you to implement the actual task and perhaps create handlers for the other task types as well Time to deploy what we have so far ShowtimeIt s showtime With both stacks deployed try creating a few tasks through the API and see the magic happen Try creating both tasks with Task Type TASK and TASK and see what happens If everything works as it s supposed to you should see the TASK tasks change status to IN PROGRESS and then COMPLETED FAILED after a few seconds Tasks with other task types should be ignored and be left with status CREATED Create a task with type TASK curl X POST H Content Type application json d task type TASK data foo bar https YOUR API URL tasks id abcd abcd Create a task with type TASK curl X POST H Content Type application json d task type TASK data foo bar https YOUR API URL tasks id abcd abcd List tasks The task with type TASK should have status IN PROGRESS and the other should still have status CREATED If it isn t IN PROGRESS try again after a few seconds curl https YOUR API URL tasks tasks id abcd abcd task type TASK status IN PROGRESS status msg created time updated time null id abcd abcd task type TASK status CREATED status msg created time updated time null next token null Allow seconds for the task to complete and then list tasks again The task should now have the status COMPLETED or FAILED curl https YOUR API URL tasks tasks id abcd abcd task type TASK status COMPLETED status msg created time updated time id abcd abcd task type TASK status CREATED status msg created time updated time null next token null Cleaning upTo remove everything we have created simply run the sam delete command in the api stack and handler stack directories Potential improvementsWhile this is a simple example there are many things we could do to make it better Below are some ideas that I can think of from the top of my head Why don t give one of them a try Authentication and AuthorizationRight now there is no authentication or authorization on the Task API This means that any client can create tasks and see the status of any task and also update the status of tasks First I would make sure that only the handlers themselves are allowed to use the PATCH tasks id endpoint This could for example be done by setting up IAM authorization on the API Gateway Secondly we might want to require that the client is authenticated before creating and listing tasks If you want to do this in a serverless fashion you could look into AWS Cognito and use a JWT authorizer DynamoDB TTLSince our list endpoint retrieves all tasks this list could grow very large Perhaps we want to remove tasks when they are older than a certain amount of time This could be done by setting a TTL on the DynamoDB table to automatically delete old tasks after a set period of time LoggingRight now we do not have much logging in place And in the few places we have it is only simple print statements that aren t as structured as we want aws lambda powertools has a great logging library that helps with setting up structured logs for your lambda functions TracingMonitoring in distributed serverless systems can be quite daunting AWS provides X Ray for this purpose which is a distributed tracing system This can help you visualize the flow of events in your application going from the API Gateway gt Lambda gt DynamoDB gt Lambda gt SNS gt SQS gt Lambda and so on aws lambda powertools has a great tracer library that helps with setting up X Ray for your lambda functions Error handlingI have not included any kind of error handling in the example You could for example implement functionality to allow a task to be retried a set amount of times in case of failure Right now if a task fails it will be updated in Dynamo to have a status of FAILED The current implementation of the update endpoint requires the task to be have a status of CREATED when updating the status to IN PROGRESS If that logic is left unchanged retried invocations will fail on the first request to the update endpoint WebhooksMost of the improvements above have been about securing managing and monitoring the API We could also extend it with new features One example would be to include webhooks Clients could for example include a webhook URL in their task creation request We could then add another lambda function that reads from the DynamoDB stream and sends a notification to the webhook URL when the task goes from IN PROGRESS to COMPLETED or from IN PROGRESS to FAILED To be able to react on certain changes in a DynamoDB item you must update the stream view type to be NEW AND OLD IMAGES instead of NEW IMAGE This way the lambda will receive both the old and the new version of the item Scoped eventsPerhaps you want to scope tasks to users applications or some other entity in your system Then I would do the following changes Change the DynamoDB schema to use both a HASH key and SORT key and set the HASH key to be the entity ID and SORT key to be the task ID Change the API to include the entity ID in the request such as POST entity id tasks Update the boto DynamoDB client calls to use the correct key The scan operation would for example be replaced with a query operation using the Entity ID as the query key ConclusionCongratulations for making it this far You have now managed to build an asynchronous task API running entirely on serverless services on AWS Hopefully you have learned a thing or two I know I definitely did by creating this If you have any questions please feel free to reach out to me in any way you see fit All code in this guide is available on GitHub It might drift a bit if I decide to build upon it but if I do I will try to keep this blog entry up to date Now go build something awesome Why not try implementing one of the ideas from the potential improvements section |
2022-03-28 18:12:04 |
海外TECH |
DEV Community |
Deploy iOS Application to AppCenter via Github Actions (Manual Code SignIn) |
https://dev.to/abhishek9634/deploy-ios-application-to-appcenter-via-github-actions-manual-code-signin-34b9
|
Deploy iOS Application to AppCenter via Github Actions Manual Code SignIn Good Morning Guys ️th March hrs ISTI know you have read lots of tutorials same like this But for me this is my latest achievement from the last days to learn CI CD which I have been procrastinating on for a long time Here is the simplest way to automate uploading iOS build to AppCenter with Fastlane and Github Actions Let s make a list we needed Apple Account Mandatory for code signing If you are in a team organization you ask for a testing bundle and certificates Xcode well that is independent but I m using both so just to mention for clarifying any confusion Github AppCenter Apple accounts Cocoapods Fastlane lib No worries I have added steps where ever required P S We are pushing build with a development profile to AppCenter and NOT for AppStore because of limited access Let s start with some lazy steps Account SetupGithub AppCenter Apple Account I feel that is already provided by your organization But still here Xcode Download Xcode from here Open Xcode go to top menu Xcode gt Preferences A dialogue will open on the bottom left tap on the button Select Apple Id Add your credentials and after that when you see your account tap on download profiles AppCenter SetupHere is the helping doc for the dashboard Login to AppCenter and you will see a dashboard like below Top right you will see Add new app button A side menu will appear to ask below detailsApp Name AppCenterDemo iOSRelease Type BetaOS iOSPlatform Objective C Swift Tap on Add new app button on the bottom right and it will redirect you to the app s dashboard page There you will get app secret and cocoapods installation link as well Save the app secret for the next section Xcode Project SetupOpen Xcode create a new project any name let s say AppCenterDemo You can learn from here as well just in case Click on Project and you will general settings tap on signing and capabilities uncheck automatic sign in andChoose your organization s team in the dropdown Setup your bundle id like com organization appname Update your gitignore file before pushing your code to GitHub Like below We are removing pods DeriveData Fastlane some files which are not required in the repo xcuserdata xcscmblueprint xccheckoutbuild DerivedData moved aside pbxuser default pbxuser modev default modev modev default modev perspectivev default perspectivev hmap ipa dSYM zip dSYMtimeline xctimelineplayground xcworkspace build Pods Carthage Build Dependencies accio fastlane report xmlfastlane Preview htmlfastlane screenshots pngfastlane test outputiOSInjectionProject Download the provisioning profile and keep a soft copy of the same as well for later usage in Fastlane Open Keychain and check the Apple Development certificate provided by your organization or your developer account tap on to see the dropdown You will see a private key right click on it and select the export optionSave the p file for later use Here I have created ios dev certificate p Use the password when prompted for a password and save it for later use in this tutorial The hard part is done Setup cocoapods from here if not done in past Open podfile and add like below Here we are integrating the AppCenter target AppCenterDemo do pod AppCenter endGo to the terminal inside the root directory and run pod install in the terminal You will observe a workspace is created like a project file Open workspace project In the AppDelegate file or in the main file for SwiftUI projects add the code below Declare a constant variable for appSecret AppSecret is the same I mentioned at the end of the previous section AppCenter start withAppSecret appSecret services Analytics self Crashes self Run Build your project in order to check everything is working Fastlane Setup Part For all further steps I will recommend VS Code Editor As we will get the project structure and terminal in a single window and we can access extension files as well Install fastlane via running below command sudo gem install fastlane Open terminal navigate to project root directory and runfastlane initHelping Doc for iOS Setup You will see a Fastlane folder with Gemfile AppFile Fastfile and plugin files Now add AppCenter Plugin for Fastlane via command fastlane add plugin appcenter Now initial Fastlane setup add these in Gemfile and run bundle install Here is the Gemfile setup at the end of the doc source gem dotenv rails groups development test gem fastlane gem xcode install gem cocoapods plugins path File join File dirname FILE fastlane Pluginfile eval gemfile plugins path if File exist plugins path These are libraries will be used by Fastlane as an initial setup Dotenv rails is used to load the environment while running Fastlane To specify the ruby version add ruby version file and inside that add a single line string This will be used by Fastlane Now add env file like below GeneralWORKSPACE AppCenterDemo xcworkspacePROJECT PATH AppCenterDemo xcodeprojBUILD CONFIGURATION DebugSCHEME AppCenterDemoEXPORT METHOD developmentVERSION BUMP TYPE patchAPP AUTHOR Abhishek Thapliyal AppcenterAPP CENTER OWNER NAME thapliyal fueled com APP CENTER APP NAME AppCenterDemo iOS APP CENTER DISTRIBUTION GROUPS Collaborators APP CENTER NOTIFY TESTERS trueAPP CENTER API KEY XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAPP CENTER API TOKEN XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX CodeSignInPROVSIONING PROFILE REPO PATH fastlane provision Dev Profile mobileprovision KEYCHAIN NAME CodeSignInData These are environment variables used in shell script and Fastfile later in the tutorial Check the Parameters section for more details of the export method scheme workspace Project Path and build configuration To get the APP CENTER APP NAME and APP CENTER OWNER NAME here is the link owner name apps app name APP CENTER API KEY This is the same used previously in AppDelegate Update here as well APP CENTER API TOKEN Use this link to get API Token Github RepoYou need to create a new repository in order to proceed further Beginner please follow these docs for the Github repository setup Create RepositoryCloningSSH SetupNow add a new folder name provision inside fastlane folder and move the earlier Dev Profile mobileprovision file inside Now push the code to the repo Github SecretsNow we have to setup Github Secrets in order to secure the p file and credentials Follow this doc for encrypted secrets and create as followGithub Deploying Xcode Applications DocGo to the directory where ios dev certificate p is saved earlier Open terminal in the same directory andrunbase i ios dev certificate p pbcopyThis will copy the base string in the pasteboard You can check it via cmd v Save it in Github Secrets with the key name IOS DEVELOPMENT The password we have saved while creating the above certificate will be saved in Github Secrets with the key name P PASSWORD Add one more value KEYCHAIN PASSWORD for the keychain that will be used in Fastlane I recommend make it strong Github ActionsNow in the root directory of the project Add nested folder github workflows Add yml file name gh actions yml inside the workflows folder There is no specific name you can choose any name Update your above yml file like below name iOS App Center Deploymenton push jobs build runs on macos steps uses actions checkout v uses ruby setup ruby v with bundler cache true name Run Fastlane for iOS env IOS DEVELOPMENT secrets IOS DEVELOPMENT P PASSWORD secrets P PASSWORD KEYCHAIN PASSWORD secrets KEYCHAIN PASSWORD run bundle exec fastlane beta app uploadname Workflow name on on which event it will be triggered Here I have added push i e on every push a build will be triggered jobs Series of actions that will be executed build Action Name runs on OS Name in which actions will be executed uses actions checkout v Use to checkout branchuses ruby setup ruby v Ruby setup with bundler cache true so that Gemfile libraries can be used name Specifying name run to run shell script commandenv Here we will mention environment variables that will be used in Fastlane and Github actions from Github Secrets Here is the reference doc for actions More details for the workflow file are here Well It s afternoon hrs IST Have lunch and come back Fastlane Setup Part Here is the most important section that will actually deploy our app Below are the documented fastlane actions Please go through once before using Now open fastfile inside fastlane folder Update the code like below from this blog I have taken reference to certificates setup Our agenda is divided in three setps Add action to generate KeyChain for code signIn Add action to generate iOS Build Add action to upload build to AppCenter default platform ios platform ios do private lane setup certificates do create keychain name ENV CodeSignInData password ENV KEYCHAIN PASSWORD default keychain true unlock true timeout lock when sleeps false install provisioning profile path ENV PROVSIONING PROFILE REPO PATH setup ios profiles import certificate certificate path fastlane certificates ios dev certificate p certificate password ENV P PASSWORD keychain name ENV CodeSignInData keychain password ENV KEYCHAIN PASSWORD end desc AppCenter iOS App Upload lane beta app upload do xcversion version setup certificates clear derived data xcclean scheme ENV SCHEME cocoapods repo update true build ios app workspace ENV WORKSPACE configuration ENV BUILD CONFIGURATION scheme ENV SCHEME silent true clean false disable xcpretty false export options method ENV EXPORT METHOD appcenter upload api token ENV APP CENTER API TOKEN owner name ENV APP CENTER OWNER NAME owner type user app name ENV APP CENTER APP NAME notify testers ENV APP CENTER NOTIFY TESTERS endendcreate keychain use to create keychain in github runner environment Docinstall provisioning profile use to install provision profiles for code sign in Docimport certificate use to import p certificate from github secrets mentioned in env file inside github actions yml file previously Docsetup ios profiles It s the custom Fastlane action created by me Doc ExampleOpen terminal and runbundle exec fastlane new actionIt will ask you name for action I have added setup ios profiles A setup ios profiles rb will be generated inside fastlane folder Add below code module Fastlane module Actions class SetupIosProfilesAction lt Action def self run params UI message Setup Keychain sh fastlane actions setup code signin sh end def self is supported platform platform ios end end endendNow create new file setup code signin sh open terminal in same directory and runchmod u x setup code signin shThis command will make file executable for user After that update code belowDEV CERTIFICATE PATH fastlane certificates ios dev certificate pmkdir p fastlane certificatesecho IOS DEVELOPMENT base d o DEV CERTIFICATE PATHThis script will convert saved base string from github secrets mentioned in yml file to p file xcversion use to specify Xcode version clear derived data use to clear derive data use to clear derive dataxcclean use to clean project with specified scheme cocoapods use to install cocoapods with repo update if specified Now code signIn and fastlane project in github action is almost setup We have to configure rest two setps As shown above fastfile code build ios app will generate build for iOS Reference Doc It will take values mentioned in env file Have a closer to export method you can change to as per docexport method Method used to export the archive Valid values are app store validation ad hoc package enterprise development developer id and mac application And the last part upload to AppCenter i e appcenter upload This method will take App Name API Token and Owner Name from env file We have discussed earlier as well As per docowner type user Default is user set to organization for appcenter organizations app name lt appcenter app name as seen in app URL gt notify testers true Set to false if you don t want to notify testers of your new release default false Now push your code and see the magic If all goes well then in a sample logs for successful app upload to AppCenter will looks like below You can cmd click the link to navigate app center release page as well I hope you will get an idea CI CD works You can explore more yourself for TestFlight builds as well as managing several environments HAPPY CODING Good Night |
2022-03-28 18:10:09 |
海外TECH |
DEV Community |
File uploads and validation with React and Formik |
https://dev.to/atosh502/file-uploads-and-validation-with-react-and-formik-2mbk
|
File uploads and validation with React and FormikFormik doesn t provide a way to handle file uploads easily I found a decent solution looking at various github issues and stackoverflow discussions Here is a codesandbox showing how to validate the size of the files as well as their MIME types Link The basic idea behind working with files in Formik is to make the file input component uncontrolled and access the selected files with a ref More info here the file input tagStep We create a ref inside the form and pass that ref to the file input component export default function App const initialValues files const fileRef useRef null return lt Formik initialValues initialValues validationSchema Yup object files Yup mixed onSubmit values gt gt lt Form gt lt FileUpload name files fileRef fileRef gt lt button type submit gt Submit lt button gt lt Form gt lt Formik gt Step Inside the lt FileUpload gt component we use the passed ref as follows const FileUpload fileRef props gt const field meta useField props return lt div gt lt label htmlFor files gt Choose files lt label gt lt input ref fileRef multiple true type file field gt meta touched amp amp meta error lt div style color red gt meta error lt div gt null lt div gt Step We validate the size of files uploaded and the MIME type of the file as follows Note we are accessing the files directly using ref validationSchema Yup object files Yup mixed test is file too big File exceeds MB gt let valid true const files fileRef current files if files const fileArr Array from files fileArr forEach file gt const size file size if size gt valid false return valid test is file of correct type File is not of supported type gt let valid true const files fileRef current files if files const fileArr Array from files fileArr forEach file gt const type file type split const validTypes zip xml xhtml xml plain svg xml rtf pdf jpeg png jpg ogg json html gif csv if validTypes includes type valid false return valid References |
2022-03-28 18:09:53 |
海外TECH |
DEV Community |
Chattergram - a chat app that transcribes voice messages! |
https://dev.to/tqbit/chattergram-a-chat-app-that-transcribes-voice-messages-408f
|
Chattergram a chat app that transcribes voice messages A month ago I received a series of voice messages from a friend that lasted minutesFifteenMinutesBy the time I listened I could haveTaken a showerPrepared lunchCall him and quickly speak about what bugs himWrite the code for this hackathon which in fact I did during the time he was busy recording the second series I talked to my gf about it that day How much I would prefer if people just called Or wrote a text message Fast forward I read the announcement here And well you can imagine what instantly came to mind What if stop word filled monologues like this one could be transcribed I mean no offence If you prefer sending and receiving voicemails that s perfectly fine And mostly socially acceptable I just don t And all ranting aside more often than not one finds themselves in a situation in which they cannot listen to spoken text Because they re in a silent part of the train is that a thing outside of germany Or in a crowded office public space If you feel like the person described here could be you I m happy to present you Chattergram Overview of My SubmissionChattergram is a full stack Typescript app that transcribes voice messages into readable text It aims to make voice messages more accessible by giving the receiver a choice Read it Or listen I have prepared a demo under It uses the remaining credits from my trial phase feel free to give it a shot There is also an in depth readme in the Github repos Please note You can signup using a fake email address User amp chat DB might get reset or deleted at any timeYour username will be publicly visibleBe kind to each other Submission Category Accessibility Advocates Link to Code on GitHub tq bit chattergram Transcribe speech messages into written text Chattergram Transcribe speech messages into written text About The ProjectChattergram is a full stack Typescript chat application With a particular extra It transcribes other people s english voice messages into writte text for you and vice versa I ve created it for the Dev to amp Deepgram Hackathon And to make a wish upon a shining star Frankly speaking I d rather skim through seconds of text than listening to minutes of a stopwords filled monologue And Deepgram gets rid of most of these by default Recorded voice messages are automatically transcribed by Deepgram s Audio API FeaturesAbove all Voice message transcription from recorded audiofilesUser authenticationPersistent chatsDeveloped using Docker amp docker composeTyped data structures amp OpenAPI specification under api docsLast but not least Light amp darkmodeNon featuresAccurate user login statiUser profilingChat roomsAutomated CI CDAutomated testingDemoYou can try chattergram under The… View on GitHub Additional Resources InfoAttached in the readme md file |
2022-03-28 18:09:38 |
海外TECH |
DEV Community |
A free & open source tool by Facebook to create your blog site |
https://dev.to/comscience/a-free-open-source-tool-by-facebook-to-create-your-blog-site-4p2
|
A free amp open source tool by Facebook to create your blog siteHey There Are you looking to start a developer blog soon Do you already have one but you are not happy with it and want to migrate it I have news for you Read along FeaturesBefore jumping into why this tool is amazing let us first set the definition for what makes a blogging tool great It let s you write in markdownThere definitely needs to be code syntax highlightingmarkdown is not enough there need to be custom elementsThere should be a support to create custom non markdown pagesAnd off course a dark mode How about a site wide search as well What if I told you that there is a framework that supports all these features right out of the box and that it is freely available Well here it is Docusaurus It is a documentation framework by Facebook which is used by some of the giants in the industry like ionic redux react native and hundreds more as mentioned on this page But do not assume it to be just a documentation tool It is an all inclusive toolkit to build full fledged website like this one Technical Interview HandbookHere s the main page custom built with React The brilliance of the website above is that they have even customized it to show Carbon Ads in the sidebar Here s how a sample page in the site looks like Notice the green visual element It adds a nice touch to the UI Good enough for a blog site right Interested Want to know how to create your own This video will guide you with just that In the video A walkthough of docusaurus featuresHow to create a home pageHow to utilize the blog featureHow to utilize the tutorial featureCheers |
2022-03-28 18:03:00 |
海外TECH |
Engadget |
Instagram's latest test makes it easier to support social causes |
https://www.engadget.com/instagram-support-causes-via-hashtags-185228540.html?src=rss
|
Instagram x s latest test makes it easier to support social causesInstagram is taking some of the hassle out of supporting a noble cause The social network is testing a feature that gives you the choice of backing a movement when you search for its hashtag You ll see the option to either quot spread the word quot through direct messages or start a fundraiser to provide material aid The test is focused on a quot handful quot of hashtags linked to well known social causes including BlackLivesMatter climatecrisis and womensrights Instagram said it consulted with a group of relevant organizations such as GLAAD and the NAACP before settling on this first list The social media giant said it would collaborate with others to expand the range of eligible topics The experiment isn t surprising A feature like this could encourage more people to use hashtags and DMs That in turn could keep you on Instagram where you might be tempted to leave for TikTok where quot Donation Stickers quot have long been an option for creators hoping to rally support |
2022-03-28 18:52:28 |
海外TECH |
Engadget |
TikTok is testing a watch history feature |
https://www.engadget.com/tiktok-watch-history-test-181022182.html?src=rss
|
TikTok is testing a watch history featureTikTok could soon make it easier for you to rediscover videos you ve watched in the past According to Hammod Oh a Twitter user who s known for uncovering new features social media companies are working on behind the scenes TikTok is testing a watch history tool that would allow people to see a list of videos that appeared in their For You feed The tool would effectively allow you to rediscover clips you may have not liked either in a rush or by accident TikTok is testing adding a watch history feature in the app pic twitter com zFLnuYSUrーHammod Oh hammodoh March As TechCrunch points out there are existing ways you can browse through your TikTok watch history but they re not exactly easy to use or accessible One method involves navigating to the Discover page tapping search entering an asterisk and then toggling on the “watch videos option in the search filters tab By contrast the watch history feature would be more easily accessible through the app s settings menu It s unclear how many people currently have access to the test and when and if TikTok plans to roll out the feature to its wider userbase The company declined to provide details about the feature when Engadget reached out quot We re always thinking about new ways to bring value to our community and enrich the TikTok experience quot a spokesperson for the company said nbsp |
2022-03-28 18:10:22 |
海外TECH |
WIRED |
The Future of Digital Cash Is Not on the Blockchain |
https://www.wired.com/story/digital-cash-ecash-act
|
trail |
2022-03-28 18:03:12 |
金融 |
金融庁ホームページ |
金融審議会「市場制度ワーキング・グループ」(第16回)議事次第について公表しました。 |
https://www.fsa.go.jp/singi/singi_kinyu/market-system/siryou/20220329.html
|
金融審議会 |
2022-03-28 19:40:00 |
金融 |
金融庁ホームページ |
鈴木財務大臣兼内閣府特命担当大臣閣議後記者会見の概要(令和4年3月25日)を公表しました。 |
https://www.fsa.go.jp/common/conference/minister/2022a/20220325-1.html
|
内閣府特命担当大臣 |
2022-03-28 18:31:00 |
金融 |
金融庁ホームページ |
鈴木財務大臣兼内閣府特命担当大臣閣議後記者会見の概要(令和4年3月22日)を公表しました。 |
https://www.fsa.go.jp/common/conference/minister/2022a/20220322-1.html
|
内閣府特命担当大臣 |
2022-03-28 18:30:00 |
金融 |
金融庁ホームページ |
金融庁職員の新型コロナウイルス感染について公表しました。 |
https://www.fsa.go.jp/news/r3/sonota/20220328.html
|
新型コロナウイルス |
2022-03-28 18:30:00 |
ニュース |
BBC News - Home |
Roman Abramovich suffered suspected poisoning at talks |
https://www.bbc.co.uk/news/world-europe-60904676?at_medium=RSS&at_campaign=KARANGA
|
month |
2022-03-28 18:29:35 |
ニュース |
BBC News - Home |
Medvedev moves closer to top ranking with win over Martinez |
https://www.bbc.co.uk/sport/tennis/60906950?at_medium=RSS&at_campaign=KARANGA
|
miami |
2022-03-28 18:34:39 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
“温州みかんの薄皮”の精度でがんを狙い撃つ!新たな放射線治療のすごみ - News&Analysis |
https://diamond.jp/articles/-/299838
|
“温州みかんの薄皮の精度でがんを狙い撃つ新たな放射線治療のすごみNewsampampAnalysisがんを切らずに治すことができる放射線治療。 |
2022-03-29 03:55:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
「ランチ後に極端に眠くなる」人は太りやすい? - やせたい人はカロリー制限をやめなさい |
https://diamond.jp/articles/-/298786
|
夜更かし |
2022-03-29 03:50:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
【寄稿】ウクライナ侵攻は中国の利益に - WSJ PickUp |
https://diamond.jp/articles/-/300290
|
wsjpickup |
2022-03-29 03:45:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
欧州のガス危機、世界の供給市場を再編 - WSJ PickUp |
https://diamond.jp/articles/-/300291
|
wsjpickup |
2022-03-29 03:40:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
スタバ復帰のシュルツ氏、難注文さばけるか - WSJ PickUp |
https://diamond.jp/articles/-/300292
|
wsjpickup |
2022-03-29 03:35:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
アシックスが、日本の野球指導には「数値化」が必要だと痛感している理由 - 識者に聞く「幸せな運動」のススメ |
https://diamond.jp/articles/-/300327
|
野球 |
2022-03-29 03:30:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
M&Aの目的とビジョンを統合前に改めて明確にする理由とは? - M&A後の組織・職場づくり入門 |
https://diamond.jp/articles/-/300044
|
mampampa |
2022-03-29 03:30:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
人生も陰(マイナス)と陽(プラス)でバランスが取れている - 「自分」の生き方――運命を変える東洋哲理の教え |
https://diamond.jp/articles/-/300128
|
|
2022-03-29 03:20:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
ひろゆきがこっそり明かす「貯金もダイエットも、すべてが成功する」たった1つの方法 - 1%の努力 |
https://diamond.jp/articles/-/299591
|
youtube |
2022-03-29 03:15:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
マスク氏、新ソーシャルメディアの創設「真剣に検討」 - WSJ発 |
https://diamond.jp/articles/-/300407
|
真剣 |
2022-03-29 03:12:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
「仕事だから」と自分を押し殺さなくても「苦手なこと」は続けられる - 起業家の思考法 |
https://diamond.jp/articles/-/299441
|
|
2022-03-29 03:10:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
「この業界は儲からない」非効率市場のチャンスをつかむ方法【東大生が投資のプロに学ぶお金の教養】 - 東大金融研究会のお金超講義 |
https://diamond.jp/articles/-/299755
|
「この業界は儲からない」非効率市場のチャンスをつかむ方法【東大生が投資のプロに学ぶお金の教養】東大金融研究会のお金超講義年月に発足した東大金融研究会。 |
2022-03-29 03:05:00 |
コメント
コメントを投稿