teleren/devto huggingface dataset:
Build on Flow | FCL in Russian Создаем на Flow | FCL на Русском языке
Tags: javascript, blockchain, onflow, tutorial
Published: 2022-08-22 17:10:00

- FCL 1 - https://dev.to/egormajj/sozdaiem-na-flow-izuchieniie-fcl-vviedieniie-436o
- FCL 2 - https://dev.to/egormajj/sozdaiem-na-flow-izuchitie-fcl-2-pieriedavaitie-arghumienty-v-skripty-2ld2
- FCL 3 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-3-kak-viernut-polzovatielskoie-znachieniie-iz-skripta-1ccn
- FCL 4 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-4-kak-prieobrazovat-find-identity-name-v-adries-4595
- FCL 5 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-5poluchitie-spisok-nft-khraniashchikhsia-na-opriedieliennom-adriesie-5bnh
- FCL 6 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-6-kak-zaprosit-posliednii-blok-v-sieti-3105
- FCL 7 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-7-kak-zaprosit-uchietnuiu-zapis-flow-po-adriesu-jbp
- FCL 8 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-8-kak-zaprosit-tranzaktsiiu-po-id-29h0
- FCL 9 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-9-kak-pieriedavat-skriptam-arghumienty-options-i-arghumienty-path-3bck
- FCL 10 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-10-kak-sozdat-novyi-akkaunt-testnet-s-pomoshchiu-blocto-wallet-3hk5
- FCL 11 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-11-kak-ustanovit-i-sozdat-novuiu-uchietnuiu-zapis-testnet-s-pomoshchiu-lillico-11d0
- FCL 12 - https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-12-kak-sozdat-novuiu-uchietnuiu-zapis-s-pomoshchiu-flow-cli-i-testnet-faucet-1h73
Soulbound identity - Masa Finance
Tags: soulbound, web3, identity
Published: 2022-08-22 16:59:13

Masa Soulbound Identity? 

It's the first soulbound identity protocol on any EVM-compatible chains. They are shipping use cases weekly, like credit, borrowing/lending, web3 SSO.

Masa is running a limited time testnet launch where you can claim your unique .soul name (think ENS for SBT). 

Check out how to mint your .soul name here: 

[](https://medium.com/masa-finance/masa-soulbound-identity-claim-your-soul-testnet-launch-9c06655354fc )

I minted mine and it's super seamless.
The Clean Archtechture 要約と感想 -- 1 to 2 章 設計とアーキテクチャ, 振る舞いと構造
Tags: architecture, cleanarchtechture, 設計, books
Published: 2022-08-22 16:47:00


## 参考

https://www.amazon.co.jp/dp/B07FSBHS2V/ref=cm_sw_r_tw_dp_9HJ2JP2FZ1W08QW24NZV

みんな大好きクリーンアーキテクチャ

##  結論

TDD でクリーンなコードを書いた方が短期的にも実装が早く

振る舞いの正確性よりも変更を簡単にコードを書いた王がプロダクトの価値が高くなる。

# 1 設計とアーキテクチャ

## 要約

設計とアーキテクチャの違いがよく話題にあがる

アーキテクチャは上位レベルの文脈(抽象？)
設計は詳細レベルの構造

これらを指されるが、優れた設計図は詳細まで書いてあるように
上位レベルの設計も下位レベルの詳細がわかり
下位レベルの詳細をみても上位が想像できるようになるべき

なので、アーキも設計も変わらないらしい。
連続するものだから。

ソフトウェアアーキテクチャの目的はシステムの開発と保守に必要な人数を最小限に抑えることらしい。

良くない例として
リリースごとに 100 ~ 200 人ずつ人数が増えている一方
リリースごとのプロダクトのコード数は途中から
6900, 7000, 7100, 7150, と伸び悩んで
規模が拡大しなくなるプロダクトを上げている

一人あたりの生産性がさがりまくっている例だ。

これの原因は、開発者が機能を次々に追加して
コードをクリーンにしていないからだ。

保守性を下げる崩壊したコードでの急ぎの実装は短期的には早く見える
しかし、短期的にもクリーンなコードを書いたほうが実装が速い。

クリーンなコードを書いた時とそうでない時の比較のため
奇数日は TDD、偶数日はテスト無しで実験を行った。
TDD とは一つの機能ごとに Unit Test を書いてから実装を書くこと。

すると TDD の日の方が 平均10% 早く作業が終わった。

TDD を使ってクリーンなコードを書くと早く仕事が終わることが証明できた。

自信過剰に品質を意識せずに作るより、アーキテクチャの品質を真剣に良くしながら作ったほうが短期的な速度も速い。

そのための優れたアーキテクチャと設計が何かを次の章から説明する。

## 感想

上位から下位までの連続、感動する

TDD は速いのが意外

---

# 02 -- 振る舞いと構造

## 要約

これらはトレードオフになりがち。
しかも価値が低い方にぶっこんで価値がゼロになりがち（マジか？）

多くのエンジニアはマシンが要件を満たせるように振る舞いを与えるのが仕事だと思っている。しかしそれは間違っている

しかし、肝心のソフトウェアエンジニアの仕事はマシンをソフトに変更を簡単にすることだ。

アーキテクチャが形状を指定していると、その形状に合わない機能の追加が大変。

つまり、価値が低いのは振る舞いで、高いのは構造だ。

振る舞いが完璧でも、変更がとても難しいソフトウェアは、要件が変更されたら変わらなければならないソフトウェアとしては価値がゼロ

振る舞いが間違っていても、変更が簡単なソフトウェアは、次のリリースで修正できるので価値が高い。

## 感想

だから、ソフトウェアをフレームワークよりビジネスロジックに寄せて作ることで、Component, UseCase, Port, GateWay とどのフレームワークでもおなじようにつくれて、パーツとして実装を書けるので、変更に強くなるのだろう

しかし価値がゼロは言いすぎだろ、すぐに役に立たなくなるから、価値がある期間がとても短いってところか... つまり価値がゼロであってるな。

外部の API やライブラリに頼りまくると
振る舞いは簡単に実装できる。
一方、外部のものなので仕様変更で変更できずに価値がなくなる。

フロントエンド専門と自称し、
バックエンドエンジニアに頼って API を実装してもらえば
呼ぶだけなので振る舞いは簡単に実装できる。
一方、他人なので簡単には変更できずに価値が低くなる。

変更できるのが価値と言うのはすごく納得が行った。
目から鱗だ。
Pro Tips on How to Learn UX design
Tags: ux, userexperience, uxdesign, tutorial
Published: 2022-08-22 16:45:21

The recent increase in the number of tech companies around the nation has led to an increase in the demand for UX designers. This is because UX designers are responsible for designing digital products and making sure they resonate with the users' needs and pain points. 


Thus, any company that wants to solve human problems with digital products will need to consider hiring a UX designer. This implies that at one point or the other, a tech-oriented company is likely to hire one or more UX designers. So, it's no wonder that the demand for UX designers is high. 


There is no better time to learn UX design than now. You need to leverage this wave of demand to learn and get into the design industry.

## Is it hard to learn UX design?

Foremost, let us set the record straight. It isn't rocket science to become a UX designer, it does need dedication, resilience, and hard work. However, you don’t need to be bothered with the fear of going from a novice to a professional UX designer. 

Remember, every UX professional you see out there today was once a novice. Anyone can also become a professional in the UX design career without having a university education in UX design. 

[Continue Reading](https://www.braveachievers.com/post/pro-tips-on-how-to-learn-ux-design
)
Interesting Things in Tech lately (2022 week 33)
Published: 2022-08-22 16:28:00

It takes quite a lot of time to keep updated on what is happening in the tech world. So I thought it would be interesting to share what we found interesting.

Here is what I found interesting last week. If you have found interesting things that I didn't put here, please add them in the comments, it will help to share the efforts.
<br>
## Big changes for Deno

Deno will make it easier to work with NPM packages. It will be possible to import them like this: `import express from "npm:express@5";`.

And they have the goal to make it the fastest of JavaScript runtimes.

{% embed https://deno.com/blog/changes %}
<br>
## The job interview process for senior roles

A very complete article on the interview process for senior engineer roles.

{% embed https://dev.to/errietta/how-to-get-the-best-job-offer-for-senior-software-engineer-roles-4pdf %}
<br>
## Thoughts about the tech lead role

An interesting thread to read on the teach lead role.

(TL;DR: Be there to improve the team as a whole, not just have badass skills.)

{% embed https://twitter.com/davefarley77/status/1559213234992947202 %}
<br>
## Tips for giving feedback

Very nice thoughts about giving feedback.

Remember to also include feedback on what we like and not only negative feedback.

And remember that the person might also receive feedback from others.

{% embed https://charity.wtf/2022/08/15/giving-good-feedback-consider-the-ratio/ %}
<br>
## Thoughts about taking notes as a team

Nice thoughts about taking notes as a team to share knowledge.

Taking (good) notes as a person is a very powerful tool. Taking them as a team may be even more powerful. (If people in the team are interested in taking notes this way.)

{% embed https://leaddev.com/communication-relationships/want-promote-knowledge-sharing-your-teams-standardize-way-you-take %}
Masa Finance developing soulbound NFT's for their credit protocol.
Tags: web3, lending
Published: 2022-08-22 16:21:00

Masa Finance is building the first soulbound identity protocol on any EVM-compatible chains. They are shipping use cases weekly, like credit, lending, web3 SSO. 

Masa is running a limited time testnet launch where you can claim your unique .soul name (think ENS for SBT).  Check out how to mint your .soul name https://medium.com/masa-finance/masa-soulbound-identity-claim-your-soul-testnet-launch-9c06655354fc
Angry Professor Problem
Tags: beginners, programming, tutorial, python
Published: 2022-08-22 16:10:13

```
import math
import os
import random
import re
import sys

def angryProfessor(k, a):
    return 'YES' if sum(map(lambda x: x <= 0, a)) < k else 'NO'

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    t = int(input().strip())

    for t_itr in range(t):
        first_multiple_input = input().rstrip().split()

        n = int(first_multiple_input[0])

        k = int(first_multiple_input[1])

        a = list(map(int, input().rstrip().split()))

        result = angryProfessor(k, a)

        fptr.write(result + '\n')

    fptr.close()
```
ZSH-style up/down arrows in Bash/Readline - Linux/Unix series
Tags: linux, tutorial, productivity, cli
Published: 2022-08-22 16:09:09

<p>Searching through history with an up/down arrow key is a very popular (and very useful) feature in ZSH. </p>
<p>What many people don&#39;t know is that you can enable similar behavior in Bash simply by adding these lines to your <code>~/.inputrc</code> file:</p>
<pre><code># up arrow
&quot;\e[A&quot;:history-search-backward

# down arrow
&quot;\e[B&quot;:history-search-forward
</code></pre>
<p>When you press the up/down arrow key (<code>&quot;\e[A&quot;</code>/<code>&quot;\e[B&quot;</code>), Readline will call the history-search-backward/history-search-forward command, which will search (in the backward or forward direction) through the history for the string of characters starting at the beginning of the line, and ending at the current cursor position.</p>
<p>For example, if you have these commands in your history file (in the following order):</p>
<pre><code>ls -al /opt
ls -al /home
ls -al /home/x
</code></pre>
<p>And if you type this in the terminal and keep pressing the up arrow:</p>
<pre><code>ls -al
</code></pre>
<p>You&#39;ll first get <code>/home/x</code>, then <code>/home</code>, then <code>/opt</code>.</p>
<p>If you type:</p>
<pre><code>ls -al /h
</code></pre>
<p>You&#39;ll first get <code>/home/x</code>, then <code>/home</code>.</p>
<p>By pressing the down arrow, you would go in the opposite direction.</p>
<p>Note: <code>~/.inputrc</code> is a configuration file for GNU Readline, so this will not only enable this feature for Bash, but also for everything else that uses GNU Readline.</p>
<h2 id="variations">Variations</h2>
<p>If you prefer PgUp/PgDown instead of up/down arrow keys, you can use something like this:</p>
<pre><code>&quot;\e[5~&quot;:history-search-backward
&quot;\e[6~&quot;:history-search-forward
</code></pre>
<p>Or Ctrl+p/Ctrl+n:</p>
<pre><code>&quot;\C-p&quot;:history-search-backward
&quot;\C-n&quot;:history-search-forward
</code></pre>
<h2 id="global-scope">Global scope</h2>
<p>If you&#39;d like to enable this behavior for all users on the system, you can use global <code>/etc/inputrc</code> instead of the local <code>~/.inputrc</code> file. The syntax is the same.</p>
<hr><small>
Note: this is a wiki article from BetterWays.dev Linux/Unix series, you can find the latest (better formatted) version here: https://betterways.dev/linux-zsh-style-up-down-arrows-in-bash-readline<br><br>If you find this type of post interesting, please let me know (with reactions and/or comments).
</small>
Typescript Series - If Type Util
Tags: javascript, webdev, programming, typescript
Published: 2022-08-22 16:02:45

I'd like to start by saying that I am doing this series to learn and understand better Typescript, so feel free to correct me or contact me.

A little challange, let's write an util _**If**_ which accepts condition C, a truthy return type T, and a falsy return type F. C is expected to be either true or false while T and F can be any type.

```
type A = If<true, 'a', 'b'>  // expected to be 'a'
type B = If<false, 'a', 'b'> // expected to be 'b'
```

This one is a simple one, but a good practice 


```
type If<C extends boolean, T, F> = C extends true ? T : F
```

We know C is of type boolean so we make sure it extends it, remember, C is expected to be either true or false, so according with our requirements, if C is true we return our type T otherwise we return our falsy type F.


Thank you!

you can find me here [My Twitter] (https://twitter.com/sarmunbustillo?t=pztqXmT7DH2pa9lDLjfrdQ&s=09)
Why are there so many JavaScript frameworks?
Published: 2022-08-22 16:01:19

Angular, React, Vue.js, Svelte... Next.js, Nuxt.js, Astro... Redux, Recoil, Zustand, MobX... **the front-end JavaScript ecosystem is riddled with frameworks and libraries.** And every time you have to create a new project, you have to decide which ones to use. A daunting task, but why?

The main problem is that **it's hard to build and maintain complex front-end applications with vanilla JavaScript only.** That kind of apps has a lot of moving parts, and you, as the developer, have to take care of all those parts. Here's where the difficulty lies.

Front-end libraries and frameworks were created to make building front-end apps easier. These take care of many of those moving parts, so that you have less on your plate. The thing is, these frameworks often have problems of their own.

And that's why new frameworks emerge, **they try to solve the problems created by older frameworks.** In general, newer libraries and frameworks are technically better than older ones.

On the other hand, older frameworks/libraries have better ecosystems (i.e. more libraries and plugins), bigger communities and more documentation.

It's a good idea to try new frameworks, but if you're creating a professional project, I recommend to rely on the most known ones, like React or Vue.js.

---

If you liked this article, you'll love my JavaScript Newsletter.
Every other Monday, I'll send you easy and actionable steps to level up your JavaScript skills. Check it out: https://nicozerpa.com/newsletter
Recommend A react Library which make you elegant and quickly to create dark mode on react.js
Tags: javascript, react, library
Published: 2022-08-22 15:49:00

We always have a need,use one button to change your company website or system to dark mode theme.It looks easy to deal with it,but actually not.So today, I recommend the Library called [react-dark-mode-lib](https://github.com/leslieSie/react-dark-mode-lib/tree/main/src) help you easier to handle it.

## **Why recommand react-dark-mode-lib?**
We've concluded that there are three ways to do this.

- Change CSS

this way is easy to understand, you bind variable on React Dom. change variable let className or styles change.then before, you must comfirm define CSS on global. For example:

```javscript
import { useState } from 'react'
const App= () => {
    const [status, setStatus] = useState(false)
    return (
       <>
         <button onClick={ () => setStatus(!status) }>Change color</button>
         <div className={ status ? 'activeBgColor': 'normalBgColor' }>test</div>
       </>
    )
}
```
```CSS
  .activeBgColor {
     background: black
  }
  . normalBgColor {
    background: white
  }
```
The problem is obvious,you need to maintain multi-css.

-  Use CSS3 filter
add the follow CSS will deal the problem.

```css
body{
    filter: invert(100%) hue-rotate(180deg) brightness(115%) contrast(95%) !important;
}

```
this way not allow you custom special element css
-  Use CSS3 mix-blend-mode 

this way can do it,but _**github no found a library handle elegant and quickly on react**_. The reason is why [create react-dark-mode-lib](https://github.com/leslieSie/react-dark-mode-lib)

## **How to Use**
First, you should use npm/yarn tool install the library

```javascript
npm install react-dark-mode-lib
```
then the simplest use is direct import library. For example:

```javascript
import DarkMode from 'react-dark-mode-lib'
import { useState } from 'react'
  
const App = () => {
  const [visible, setVisible] = useState(false) 
  return (
    <DarkMode visible={visible} />
  )
}

```
The biggest feature is that allow use JSX to created any element on dark mode Layer. you can run the example to know more.




If you have issues and suggestion,called me on github.If help your work,Please give a star on github to me.Thank you.
How to keep undefined values in JSON.stringify
Tags: javascript
Published: 2022-08-22 15:44:53

---
title: How to keep undefined values in JSON.stringify
published: true
tags: 
 - javascript
canonical_url: https://petermekhaeil.com/how-to-keep-undefined-values-in-json.stringify/
---

The [JSON spec](https://www.json.org/json-en.html) does not allow `undefined` values, so when you try to stringify an object that contains an undefined value, the key will get removed:

```js
const person = { name: 'Peter', age: undefined };

JSON.stringify(person);
// '{"name":"Peter"}'
```

There are workarounds to keep `undefined` in the return value, but because it is not part of spec, you will not be able to parse the string back to a JSON. Instead, we can replace it with `null` which is valid.

JSON.stringify has an optional second parameter [replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#the_replacer_parameter) that can recursively transform properties during the stringify process.

Using the `replacer` parameter of JSON.stringify, we can replace `undefined` values with a value that is accepted - such as `null`:

```js
const person = { name: 'Peter', age: undefined };

function replacer(key, value) {
  return value === undefined ? null : value;
}

JSON.stringify(person, replacer);
// '{"name":"Peter","age":null}'
```

An example use case where this can come useful is network request payloads in the case we need to let the server know which values are not defined. POST requests have a string body, if we need to send over an object, we require to `JSON.stringify` the request. The above approach will help us send over values that are not defined (provided that the server understands `null` as an acceptable value).
Video: Live Q&A session on Luos Discord (August 10, 2022)
Tags: opensource, microservices, help, luos
Published: 2022-08-22 15:38:30

A few days ago, we held our first live Q&A session on Discord and it was a pleasure to exchange with all of you!
⏩ https://youtu.be/l25YONqrzPk

If you missed it or want to watch it again, here is the recording
Why use the Pressable Component over the Touchable Components
Tags: reactnative
Published: 2022-08-22 15:26:38

---
title: Why use the Pressable Component over the Touchable Components
published: true
description: A definitive guide on when you should use the Pressable component and when you should (or shouldn't) use the Touchable components.
tags: reactnative
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
canonical_url: https://www.reactnativeschool.com/why-use-the-pressable-component-over-the-touchable-components
---


[Way back in v0.63 of React Native the `Pressable` component was introduced](https://reactnative.dev/blog/2020/07/06/version-0.63#pressable).

But we've still got all the Touchable components (TouchableOpacity, TouchableHighlight, TouchableNativeFeedback, TouchableWithoutFeedback)...

So, which do you choose and why?

## tl;dr

The preferred and suggested component, per React Native, is the [`Pressable`](https://reactnative.dev/docs/pressable) component (and by extension the Pressability API).

## Why Pressable Was Introduced

React Native apps are fantastic - allowing you to build apps for multiple platforms that perform like a fully native app.

BUT they often have "tells" that they're built with React Native.

From the announcement post for React Native v0.63: "_However, because they include built-in styles and effects that don’t match the platform interaction, users can tell when experiences are written with React Native._"

So, while the Touchable components are great and easy to use they're often not the right tool for the job.

## When Should You Use the Pressable Component?

Well, basically always. It's the suggested way to handle user interactions within your app.

The [`Pressable`](https://reactnative.dev/docs/pressable) component itself has a very familiar API to the Touchable components you may be familiar with while allowing for extensibility that the Touchable\* components don't.

This allows you to create buttons/interactions that merge your intended UI/UX while also following [the design guidelines for the platform](https://developer.apple.com/design/human-interface-guidelines/components/menus-and-actions/buttons/).

## When Should You Use Touchable Components?

Basically, never. Kind of.

Under their hood, the Touchable\* components use the [`Pressability` API](https://github.com/facebook/react-native/blob/16ea9ba8133a5340ed6751ec7d49bf03a0d4c5ea/Libraries/Pressability/Pressability.js#L347) for their implementation so they're fully supported but they still have the drawbacks outlined above.

That means you don't need to worry about ripping all the Touchable's out of your app and replacing them.

So, in conclusion, the next time you need to handle user interaction reach for `Pressable` over `Touchable` - it does everything you know and love but better.
Useful Git Commands You Need To Know!!
Tags: git, beginners, productivity, tutorial
Published: 2022-08-22 15:26:00

Git is the most commonly used version control system. Git tracks the changes you make to files, so you have a record of what has been done, and you can revert to specific versions should you ever need to. Git also makes collaboration easier, allowing changes by multiple people to all be merged into one source. 

So regardless of whether you write code that only you will see, or work as part of a team, Git will be useful for you.

## Commands List

1. `git init` -> Initializes git in any folder/repository (Needs only if you are not cloning a repository)

2. `git clone https://github.com/<your-user-name>/<repo-name>` -> Clones the repository in your local system.

3. `git status` -> Shows the current status of the repository.

4. `git add <file-name>` -> Adds specific file to staging area

5. `git diff / git whatchanged` -> Gives the recent changes in the repository

6. `git add .` -> Adds all changed files to staging area

7. `git commit -m "<your-message>"` -> Gives a message to your current files and takes their snapshot to commit history

8. `git log` -> Shows the commit history

9. `git revert <commit-token>` -> Discards the specific commit (Deletes the committed files but keeps a trace in history)

10. `git reset --soft HEAD~<no-of-commits-to-revert>` -> Undo's the commit and brings the changes back in the staging area

11. `git restore --staged <file>` -> Brings back the specific file in the changes made section which is added to the staging area.

12. `git remote -v` -> Shows all the remote connection

13. `git remote add origin https://github.com/<your-user-name>/<repo-name>` -> adds your forked branch as the origin (No need to do if the repo is cloned)

14. `git remote add upstream https://github.com/<parent-user-name>/<repo-name>` -> Adds parent repository as upstream.

15. `git pull origin` -> fetches the changes made in origin to your local system

16. `git pull upstream` -> fetches the changes made in origin to your local system

17. `git branch <branch-name>` -> Creates a branch with branch-name

18. `git checkout <branch-name>` -> This now allows you to make changes in the specified branch

19. `git checkout -b <branch-name>` -> This is combination of git branch <branch-name> and git checkout <branch-name>

20. `git merge <branch-name>` -> merges its children branch-name into its parent branch.

21. `git branch -d <branch-name>` -> Deletes the specified branch. And if the changes in the branch-name are not merged in the parent branch then the changes are deleted.

22. `git push origin <branch-name>` -> Pushes the recent commits to the new branch

## Happy Coding!!!

**Thank You for reading till here. Meanwhile you can check out my other blog posts and visit my** [Github](https://github.com/devarshishimpi).
100DaysOfCode: Artwork Profile UI Design with Weavv CSS
Tags: 100daysofcode, css, html, webcomponents
Published: 2022-08-22 15:10:00

{% codepen https://codepen.io/loouislow81/pen/abYMEdb %}
{% github https://github.com/louislow81/100DaysOfCode %}
{% github https://github.com/weavv/weavv-css-documentation %}

---

Enjoy!