teleren/devto huggingface dataset:
Prazer, MobX: uma solução de gerenciamento de estado para aplicações React
Tags: react, mobx, javascript
Published: 2024-02-03 13:43:55

---
title: "Prazer, MobX: uma solução de gerenciamento de estado para aplicações React"
subtitle: "Como o MobX ajuda a manter o estado da sua aplicação atualizado e consistente"
published: true
datePublished: 1671484842000
author: Ryan Lucas
tags:
  - React
  - MobX
  - Javascript
canonicalUrl: https://www.ryangst.click/blog/conhecendo-mobx/
---
<mark>
<i>TLDR: Mobx é uma solução de gerenciamento de estado: Nesse artigo escrevo um pouco sobre a teoria por trás do funcionamento
</i>
</mark>

[Link de exemplo com react](https://github.com/RyanGst/mobx-todo)


[Link da documentação](https://github.com/mobxjs/mobx)

Não existe maneira melhor de criar aplicações bugadas e difíceis de manter do que não gerenciar corretamente o estado da sua aplicação.

Mobx busca fazer isso de maneira simples ao arrancar a raiz do problema: fazendo com que seja muito difícil criar estados inconsistentes. 

<hr/>

Para entender melhor como o MobX funciona, vamos começar pelo básico: o estado da aplicação. O estado da aplicação é basicamente todos os dados que são usados pela aplicação e que podem ser alterados ao longo do tempo. No React, esses dados geralmente são mantidos no componente de estado, mas com o MobX, podemos mantê-los em qualquer lugar.

As derivações são valores que podem ser calculados a partir do estado da aplicação. Por exemplo, se o estado da aplicação inclui um array de números e você quer saber a soma desses números, essa soma seria uma derivada. O MobX permite que você defina essas derivações de maneira fácil e as mantém atualizadas automaticamente sempre que o estado da aplicação for alterado.

As reações são basicamente como as derivações, mas em vez de produzir um valor, elas fazem alguma coisa quando o estado da aplicação muda. Por exemplo, você pode definir uma reação que atualize o DOM sempre que o estado da aplicação mudar. O MobX garante que as reações sejam executadas de maneira síncrona e sem problemas sempre que o estado da aplicação mudar.

Por último, temos as ações. As ações são todas as coisas que alteram o estado da aplicação. No MobX, todas as ações são processadas por derivações e reações, o que significa que todas as alterações no estado da aplicação são feitas de maneira síncrona e sem problemas. Isso é útil porque garante que não haja problemas como estados inconsistentes ou alterações no estado que não são refletidas corretamente na interface do usuário.

![Árvore de eventos MobX](https://mobx.js.org/assets/flow2.png)

Em resumo, o MobX é uma ferramenta útil para gerenciar o estado da sua aplicação de maneira fácil e consistente. Ao permitir que você defina derivações e reações para manter o estado da aplicação atualizado, ele torna mais fácil criar aplicações robustas e sem problemas. Se você está procurando uma maneira de gerenciar o estado da sua aplicação com o React, definitivamente deve dar uma olhada no MobX.

#### Conecte-se comigo 👍

[Linkedinho](https://www.linkedin.com/in/ryan-lucas-machado/)
[X - App do passarinho](https://img.shields.io/twitter/follow/ryangst_)
网赌被黑不给提款怎么办？教你怎么拿回
Tags: webdev, beginners, tutorial, python
Published: 2024-02-03 13:42:59


首先，我们在网赌平台上发现自己的账户的钱不能提现被黑并且系统维护审核不给出款时，第一时间应该与相关平台或网站的客服人员取得联系。通过电话、邮件或在线客服等方式，向他们详细描述您的问题，并提供相关的证据和信息。客服人员会根据您提供的情况进行核实，并为您提供相应的解决方案。

 

网赌平台以各种借口不给提的事情，通常都会说什么维护、审核、延迟、数据更新等。那么对于这些问题能够解决的方法肯定是有的，只不过是你没有找到而已，只要是用心去找肯定能解决的。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5rie5zdeix94zp2irc75.png)

1、一旦平台出现维护升级，审核注的单，异常延迟这些都是百分之百找的借口而已！

2、很多人发现出不了都第一时间去找客服理论，人家本来就是坑你的，你去找客服争吵，会有用吗？

3、目前只要账号可以正常登陆和额度转换的，趁早处理吧。 挽回方法【出款微信：王牌出黑团队多年经验，如果你被黑了请联系我们帮你把损失降到最低 /微mk45776 微 x:<>QQ///366///5710083《微：awmfc2250》前期出款不收任何费用，我们团队都是先出款/后收费。不成功 不收费}。

其次，如果与客服人员的沟通无法解决问题，您可以考虑向相关监管机构或第三方平台投诉。在中国，工商部门、公安机关、互联网金融协会等都是可以向其投诉的机构。在投诉时，您需要提供详细的账户信息、黑客攻击的证据以及与平台沟通的记录等，以便监管机构能够更好地了解您的情况并采取相应的措施。

此外，为了避免账户被黑的情况发生，用户在日常使用网上交易平台时应加强自身的网络安全意识。首先，选择正规、有信誉的平台进行交易，避免使用一些不知名的小平台。其次，定期更换密码，并确保密码的复杂性，避免使用过于简单的密码。同时，不要随意点击来历不明的链接，以免遭受钓鱼网站的攻击。此外，安装杀毒软件、防火墙等网络安全工具也是非常必要的。

最后，如果您的账户被黑且系统维护审核不给出款，不要轻易放弃。通过与平台沟通、向监管机构投诉以及加强自身的网络安全意识，您有望解决这一问题并维护自己的权益。

总之，面对网上被黑系统维护审核不给出款的情况，用户应该保持冷静，及时与相关平台或网站取得联系，并采取相应的解决措施。同时，加强自身的网络安全意识，预防账户被黑的情况发生。只有这样，我们才能更好地保护自己的权益，享受安全便捷的网上交易体验。被黑不要紧及时联系我的团队维权出款。
Google setzt nach und macht nun die leistusfähigere Version von Googles AI-Chatbot Bard publik
Published: 2024-02-03 13:34:54


Google setzt nach und macht  nun die leistusfähigere Version von Googles AI-Chatbot Bard publik
Googles Antwort auf ChatGPT: Bard jetzt auch in Deutschland das schnelle Gemini-Pro-Modell

[b]gute Nachrichten: [/b]Google setzt nach und macht  nun die leistungsfähigere Version von Googles AI-Chatbot Bard publik - sie ist jetzt auch in Deutschland verfügbar.
 Jetzt ist also Bard (in Deutschland) auf dem selben Stand wie das Sprachmodell Gemini Pro (welches am Ende des vergangenen Jahres in den USA veröffentlicht  wurde).
Der Ausbau - rollt nun das Modell aus - und bringt es in die Fläche - in weit über 200 Länder und ca 50 Sprachen wird sich diese neue Einführung auswirken.  

[b]Google-selbst über Gemini:[/b]  https://blog.google/intl/de-de/unternehmen/technologie/gemini/

Gemini ist auch  Googles bisher flexibelstes Modell – es kann überall effizient ausgeführt werden, vom Rechenzentrum bis zum Smartphone.
Seine innovativen Funktionen werden die Art und Weise, wie Entwickler:innen und Unternehmenskunden mithilfe von KI entwickeln und wachsen, erheblich vereinfachen.

Wir haben Gemini 1.0, unsere erste Version, in drei verschiedenen Größen optimiert:

Gemini Ultra – das größte und leistungsstärkste Modell für hochkomplexe Aufgaben.
Gemini Pro – unser bestes Modell zur Anwendung in einem breiten Aufgabenspektrum.
Gemini Nano – unser effizientestes Modell für Aufgaben, die direkt auf dem Gerät verarbeitet werden.
Python Introduction
Tags: python, beginners, programming
Published: 2024-02-03 13:31:51

**Python is used for...**

- web development (server-side)
- software development
- mathematics
- system scripting

**What can Python do?**

- used on a server to create web applications
- used alongside software to create workflows
- connect to database systems. Also, read and modify files
- used to handle big data and perform complex mathematics
- used for rapid prototyping, or for production-ready software development

**Why Python?**

- works on different platforms (Windows, Mac, Linux, Raspberry Pi, etc.)
- simple syntax that allows developers to write programs with fewer than other programming languages.
- run on an **interpreter system**, meaning that _code can be executed as soon as it is written_. Prototyping can be rapid.
- can be treated procedurally, in an object-oriented way, or a functional way.
Add BULMA in Angular
Tags: angular, css, webdev, beginners
Published: 2024-02-03 13:30:00

Bulma is an open-source framework that offers a collection of pre-built front-end components. These components can be seamlessly combined to create responsive web interfaces. Best of all, Bulma is free to use! and boasts over 1.1M monthly downloads.😊

- Visit BULMA's official website https://bulma.io/

- On this website, you will see the npm command to install this CSS framework

```
npm install bulma
```
- After installing this package go into your `angular.json` file and add these lines to this object.

![angular json](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h0l2givxm5jp6hzbg2ij.png)

```
"styles": [
            "src/styles.scss",
            "node_modules/bulma/css/bulma.min.css"
          ],
```
- Run your angular application.

```
ng serve
```
- Open the app.component.html file remove all default HTML and change the HTML with the following

```
<div class="container m-2">
    <div class="buttons">
        <button class="button is-primary">Primary</button>
        <button class="button is-link">Link</button>
    </div>
    
    <div class="buttons">
        <button class="button is-info">Info</button>
        <button class="button is-success">Success</button>
        <button class="button is-warning">Warning</button>
        <button class="button is-danger">Danger</button>
    </div>
    <div class="notification is-success">
        <button class="delete"></button>
        Primar lorem ipsum dolor sit amet, consectetur
        adipiscing elit lorem ipsum dolor. <strong>Pellentesque risus mi</strong>, tempus quis placerat ut, porta nec nulla.
        Vestibulum rhoncus ac ex sit amet fringilla. Nullam gravida purus diam, et dictum <a>felis venenatis</a> efficitur.
    </div>
    <div class="notification is-info">
        <button class="delete"></button>
        Primar lorem ipsum dolor sit amet, consectetur
        adipiscing elit lorem ipsum dolor. <strong>Pellentesque risus mi</strong>, tempus quis placerat ut, porta nec nulla.
        Vestibulum rhoncus ac ex sit amet fringilla. Nullam gravida purus diam, et dictum <a>felis venenatis</a> efficitur.
    </div>
</div>
```
Let's check our browser.

![html page](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xmv3jcvrgonhp3dwzn3e.png)

In this way, we integrated BULMA CSS into our Angular project it will work for any version of Angular and if you have any queries or doubts then feel free to reach out to me!!
Money FINE LOAN CusTomer Care Helpline NumbeR7479837408//π8235-639628//Cash box 7 day app head office number7479837408 /Call Me
Tags: webdev, beginners, devops, node
Published: 2024-02-03 13:28:47

Money FINE LOAN CusTomer Care Helpline NumbeR-π📵7479837408✔️π//π8235-639628📲)//+❽❷❸❺❻❸❾❻❷❽Cash box 7 day app head #office number-(747-9837-408✍️ )//Call Me
My favorite react native libraries in 2024
Tags: beginners, react, reactnative, reactjsdevelopment
Published: 2024-02-03 13:26:55


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbruann76lxgnyywv454.gif)

1. https://gluestack.io/ui/docs/overview/introduction

2. https://reactnativepaper.com/

3. https://react-native-vision-camera.com/docs/guides

4. https://github.com/mrousavy/react-native-mmkv#readme

5. https://github.com/rt2zz/redux-persist

6. https://redux-toolkit.js.org/

7. https://reactnavigation.org/

8. https://wix.github.io/react-native-calendars/

9. https://github.com/itinance/react-native-fs#readme

10. https://docs.swmansion.com/react-native-reanimated/

11. https://github.com/eugenehp/react-native-uuid

12. https://github.com/oblador/react-native-vector-icons

13. https://rnfirebase.io/
Kèo Nhà Cái
Published: 2024-02-03 13:06:09

Với những ai đam mê cá cược, thi việc soi kèo nhà cái là một điều vô cùng quan trọng. Thế nhưng, không phải người nào cũng có những chiến thuật hay kinh nghiệm và trong việc kèo nhà cái.
Địa chỉ: 14a3 Nguyễn Phi Khanh, Mỹ Long, Thành phố Long Xuyên, An Giang, Việt Nam
Zip code: 90000
Email: superangeljuicers@gmail.com
Phone: 0372883252
Website: https://superangeljuicers.com/

https://vimeo.com/keonhacaisuper
https://www.pinterest.com/keonhacaisuper/
https://www.tumblr.com/keonhacaisuper
https://www.twitch.tv/keonhacaisuper/about
https://www.reddit.com/user/keonhacaisuper
https://www.youtube.com/@keonhacaisuper/about
https://500px.com/p/keonhacaisuper?view=photos
https://www.flickr.com/people/200028715@N06/
tsconfig.json
Tags: javascript, typescript, dutch, node
Published: 2024-02-03 13:03:46

## Waarvoor dient `tsconfig.json`? 


TypeScript is heel nuttig: het stelt ons bijvoorbeeld in staat om types toe te voegen aan gewone JavaScript code. Het controleert ook op syntaxfouten, nog voor het uitvoeren. Het biedt zelfs tooltips die je laten zien waarom sommige code een fout zou kunnen opleveren. 

Er zijn zoveel geweldige functies die standaard worden meegeleverd. Zelfs met al deze geweldige functies erkent TypeScript de behoefte aan flexibiliteit.

Soms wilt je niet alle standaardregels die TypeScript probeert op te leggen - en dat is prima. Dat is een van de redenen waarom een `tsconfig.json` bestand nuttig is. 

Laten we eens kijken hoe dit bestand eruit ziet en hoe het helpt.

## Voorbeeld tsconfig.json en structuur

Het tsconfig.json bestand komt altijd in de hoofdmap van je project terecht. Jij bepaalt welke regels de TypeScript compiler moet handhaven. Hier zie je een voorbeeld `tsconfig.json`-bestand.

```json
{
  "compilerOptions": {
    // Stel het doel in op ECMAScript 2017
    "target": "es2017",
    
    // Kies het moduleformaat als CommonJS
    "module": "commonjs",
    
    // Schakel strikte controle op nullwaarden in
    "strictNullChecks": true
  },
  
  // Specificeer welke TypeScript-bestanden moeten worden opgenomen
  "include": ["**/*.ts"]
}
```

In de JSON zijn er verschillende eigenschappen:

- "`compilerOptions`", dit is een genest object dat de regels bevat die de TypeScript compiler moet afdwingen.
    - "`target`", de waarde "es2017" betekent dat we onze code gaan transpileren naar de 2017 versie van EcmaScript standaarden voor JavaScript.
    - "`module`", welk moduleformaat de TypeScript-compiler moet gebruiken bij het genereren van de JavaScript-uitvoer. In dit geval dus "commonjs".
    - "`strictNullChecks`", variabelen kunnen alleen `null` of `undefined` zijn, als ze expliciet die waarden toegewezen hebben gekregen.
- "`include`" dat bepaalt op welke bestanden de compiler de regels toepast. In dit geval betekent `["**/*.ts"]` dat de compiler elk bestand met de extensie `.ts` moet transpileren.

Je hebt nu een idee van de regels die je kan toepassen, maar voor je eigen projecten kun je deze regels naar eigen voorkeur instellen! Het `tsconfig.json` bestand is perfect voor zowel individueel werk als voor teamprojecten, omdat het iedereen in staat stelt op dezelfde pagina te zitten over hoe hun code geschreven moet worden.

## Gebruik
Een andere leuke toevoeging is dat door het toevoegen van een `tsconfig.json` bestand, je nu het commando `tsc` zonder argumenten in je terminal kunt gebruiken! De compiler zal automatisch uit je `tsconfig.json` bestand herkennen op welke specifieke bestanden hij moet draaien. Je kunt nog steeds specifieke bestanden opgeven zoals `$ tsc fileName.ts` als dat het enige bestand is dat de compiler moet controleren.

## Documentatie
Bekijk TypeScript's compiler optie [documentatie](https://www.typescriptlang.org/docs/handbook/compiler-options.html) voor nog meer informatie.

Veel plezier met coderen!
Remove Duplicates from Sorted Array II - Leetcode 80 - TypeScript
Tags: typescript, leetcode, algorithms, dsa
Published: 2024-02-03 12:24:31

Here's the Leetcode 80 solution using TypeScript.

[Watch on Youtube](https://youtu.be/DxPL8tR_3zM?si=I641PXfoGjH3enh8)

## Leetcode 80 - [Remove Duplicates from Sorted Array II](https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/description)

Given an integer array nums sorted in **non-decreasing** order, remove some duplicates **in-place** such that each unique element appears at **most twice**. The relative order of the elements should be kept the same.

Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are `k` elements after removing the duplicates, then the first `k` elements of `nums` should hold the final result. It does not matter what you leave beyond the first `k` elements.

Return `k` after placing the final result in the first `k` slots of nums.

Do not allocate extra space for another array. You must do this by modifying the input array in-place with `O(1)` extra memory.

## Approach

The goal is to modify an array of numbers by allowing at most two duplicates of each element and return the new length of the modified array. 

You'll use two pointers: 

- `i` to iterate through the array.

- `k` to keep track of the position where valid elements (remember you can only allow at most two duplicates) should be placed.

You'll start the loop from the third element (index 2) since the first two elements are automatically considered as part of the modified array. 

Then you'll check if the current element is different from the element at position `k - 2`. 

If it is, it means the current element is not a duplicate within the allowed limit, so you assign its value to the position indicated by the pointer `k` and then increment `k`.

This approach will allow only two duplicates of each element in the modified portion of the array.

Now `k` represents the new length of the modified array.



![Excalidraw](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ar3ahxm3rm4779f5zll.png)
[View on Excalidraw](https://excalidraw.com/#json=e8M9RgqusabVxzs0mwa1o,4qRapbvMej1RI_68iyC9dg)

## Code Implementation

```TypeScript
function removeDuplicates(nums: number[]): number {
  let k = 2

  for (let i = 2; i < nums.length; i++) {
    if (nums[i] !== nums[k - 2]) {
      nums[k] = nums[i]
      k++
    }
  }

  return k
}
```

## Time Complexity

The time complexity is `O(n)`, where `n` is the length of the input array `nums`. The algorithm iterates through each element in the array once, and the operations inside the loop take constant time.

## Space Complexity

The space complexity is `O(1)` or constant. The algorithm modifies the input array in-place, and only uses a constant amount of extra space for variables. It doesn't require additional memory that grows with the size of the input array.
How to Create a Backend for a Food Ordering and Delivery App?
Tags: backenddevelopment, framework, onlineordering, appdevelopment
Published: 2024-02-03 12:23:07


![Food Delivery Software](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aq52dsxt95hm25ae0hbb.jpg)

The online food ordering process has been on the rise in recent times. Since people find it easy to order food from online ordering software. Developing a backend for a food ordering and delivery app with SpotnEats is a streamlined process that caters to the rising demand for technology-driven solutions in our daily lives. The blog highlights the challenges and factors to consider in creating an efficient on-demand food delivery app. In this micro-blog, we will focus on the crucial aspect of setting up the backend for such an application.

## Importance of backend process

The backend serves as the core of the food ordering and delivery software, handling processes from consumer log-ins to restaurant data. Ensuring a secure and effective backend is essential for improving service speed and the user experience. 

## Choosing Framework 

Choosing the right framework is the initial step in backend development. The blog recommends Symfony or Laravel for PHP enthusiasts, Django or Flask for Python developers, and highlights the advanced capabilities of Ruby in frameworks such as Ruby on Rails. These frameworks provide essential features like admin panels, secure payment processors, mobile-centric functionality, third-party services, service sorting logic, and business logic.

## Selecting Database For Backend Developers

The next step involves selecting the correct database to store and access user and service provider data securely. MongoDB is suggested for dynamic data, PostgreSQL for complex services, and MySQL to balance productivity and functionality.

## Setting Up Server

The next step is setting up the right server. Developers can opt for a dedicated server for faster results, suitable for complex calculations, but with limited mobility. Alternatively, a cloud server offers virtual flexibility, enabling data movement across countries and scalability.

## Final thoughts

SpotnEats is a competitive solution, active 24/7, aiming to help businesses win over competitors with high-quality application interfaces, streamlined workflows, and eye-catching designs. The micro-blog encourages businesses to leverage SpotnEats for their **[on-demand food ordering and delivery app](https://www.spotneats.com/food-ordering-delivery-software-for-restaurants)** needs, emphasizing the continuous support and commitment to delivering top-notch solutions.
Numpy Cheatsheet
Tags: numpy, python, softwaredevelopment, softwareengineering
Published: 2024-02-03 12:18:11

**Numpy :**
Numpy is a python library which is used to perform wide variety of mathematical operations on array.

![Numpy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q7vwtd0ks9u9n82v2tev.png)


The **question now arises** as to _why we require NumPy when we have lists and can execute these operations directly in Python ?_. 🤔 
So, the answer is that **NumPy** intends to deliver an array object that is up to _50 times faster than typical Python_ lists or Python operations. ⚡️

**Where it used ?**
**NumPy**  🚀 enables efficient numerical computing and array operations in :
- Scientific computing
- Data analysis
- Machine learning
- Signal processing
- Image processing
- Statistical analysis
- Financial and economic modelling


## Basics of NumPy:

**How to install :**

```
pip install numpy
```
**How to import :**

```
import numpy as np 
```

**Creating NumPy Array :**

```
arr = np.array([1, 2, 3, 4])
```

**Change DataType of Array :**

```
arr = np.array([1,2,3],dtype=float)
```

**Creating 2-Dimensional Array :**

```
arr = np.array([(1,2,3,4),(7,8,9,10)],dtype=int)
```

## Dummy Arrays Creation :

**Creating Dummy array of zeroes(2x3 matrix) :** 

```
arr = np.zeros((2,3))
```

**Creating Dummy Array of Specific Number :**
 Here (3,4) refers to (rows x columns) with all values of 3.
```
arr = np.full((3,4),3)
```

**Creating Dummy arrays of ones (3x4 matrix):**

```
arr = np.ones((3,4))
```
**Creating array of 0 with 1 on diagonal (4x4 matrix) :**


```
arr = np.eye(4)
```

**Creating matrix of (3x5 matrix) random number:**

```
arr = np.random.rand(3,5)
```


## Properties of Arrays :

- `arr.size` - Returns number of elements in array.
- `arr.shape` - Returns dimensions of array(rows,
columns) 
- `arr.dtype` - Returns data type of elements in array
- `arr.ndim` - Returns number of array dimension



## Arithmetic Operations
_Assume a and b are array or matrices._
**Addition:**

```
np.add(a,b)
```

**Subtraction**

```
np.subtract(a,b)
```
**Division :**

```
np.divide(a,b)
```
**Multiply :**

```
np.multiply(a,b)
```
**Exponential:**

```
np.exp(a)
```
**Square root :**

```
np.sqrt(a)
```

**Logarithm :**

```
np.log(a)
```

**Dot Product :**

```
a.dot(b) 
```


## Important In-built functions

**Creating Copy of Array :**

```
arr_two = arr_one.copy()
```

**Sorting of an Array :**

```
sorted_arr = arr.sort()
```

**Transpose of an Array :**

```
t = np.transpose(a)
```


## Need Help ?

```
np.info(np.ndarray.dtype)
```

That's all in this blog.Feel free to add more useful methods to this cheatsheet! 📝✨
Thoughts on writing
Tags: beginners, watercooler, productivity
Published: 2024-02-03 11:45:37

Here are two primary reasons why I find it valuable to write about my coding adventures, or to write in general.

The first reason is about consolidating knowledge. Whenever I face a technical issue, writing a few lines about it forces me to repeat the solution steps, recall the most important commands, and ultimately structure my thoughts in a digestible manner. However, this knowledge also extends to language skills. As a non-native speaker, I view writing as an opportunity to strengthen my linguistic neural circuits and put the read and heard language into practice.

Perfectionism can be both beneficial and limiting. When maintaining a codebase, I prefer to have the code clearly organised, properly named, and decoupled, which is undoubtedly a positive trait. On the other hand, being meticulous can lead to producing less because there's always more documentation to read.

Therefore, writing casually about topics that one finds interesting seems like a good starting point!