Esploratore di dati Discourse

:discourse2: Riepilogo Discourse Data Explorer ti consente di eseguire query SQL direttamente sul tuo database live, permettendo di generare report statistici aggiornati in tempo reale.
:open_book: Guida all’installazione Questo plugin è integrato nel nucleo di Discourse. Non è necessario installare il plugin separatamente.

:information_source: Se stai cercando esempi o supporto per query personalizzate, puoi trovare molti argomenti nella nostra categoria #reporting-dati sotto l’etichetta sql-query. Se non ne trovi uno adatto alle tue esigenze specifiche, sentiti libero di creare un nuovo argomento per chiedere aiuto alla community. :memo: Aiuto query

:discourse2: Ospitato da noi? Questo plugin è disponibile nei nostri piani Business ed Enterprise. Data Explorer | Discourse - Civilized Discussion

Dopo aver installato il plugin, vai su /admin/plugins.

de1

Clicca sul pulsante “Impostazioni” e attiva data explorer enabled, poi torna indietro e ricarica la pagina.
Dovrebbe ora esserci una scheda nella navigazione a stack chiamata “Data Explorer”. Selezionala o vai su /admin/plugins/discourse-data-explorer, quindi usa i pulsanti +, Importa o Esegui per iniziare.

Query predefinite

In una nuova installazione, l’esploratore di dati include ora diverse query che possono aiutarti a trarre informazioni dall’attività del tuo forum. Apri una qualsiasi query e clicca su Esegui per provarla.

Ecco come appaiono le query standard.

Nota: Le query predefinite vengono caricate da questo file: discourse-data-explorer/lib/discourse_data_explorer/queries.rb at main · discourse/discourse-data-explorer · GitHub

Se hai una query fantastica che vuoi che tutti abbiano, crea una PR proprio come questa.

Le query predefinite non possono essere modificate; sentiti libero di copiare la query SQL e incollarla in una nuova query se desideri modificarle.

Scrittura di query

Quando clicchi su uno dei pulsanti Modifica su una vista di query, o inizi una nuova Query Explorer, ti viene presentata una schermata simile a quella sottostante:

Le prime due caselle in alto sono il nome e la descrizione della query. Il nome è ciò che stai selezionando nella casella a discesa, e la descrizione dovrebbe essere utilizzata per cose come spiegare cosa inserire nei parametri della query o per descrivere quali dati vengono interrogati.

Il pannello a sinistra è dove scrivi la query SQL. Viene fornito un minimo evidenziazione della sintassi e controllo.

Esecuzione automatica delle query

Anche se puoi sempre eseguire una query cliccando sul pulsante Esegui, puoi risparmiare tempo quando carichi una query aggiungendo il parametro run all’URL.

Ad esempio: /admin/plugins/discourse-data-explorer/queries/123?run

Quando questo parametro viene aggiunto all’URL, la query verrà eseguita non appena carichi la pagina, quindi non è necessario cliccare sul pulsante Esegui per vedere i risultati. Questo è particolarmente utile per le query che esegui frequentemente, permettendoti di crearne un segnalibro o di aggiungerle alla tua barra laterale con il parametro run incluso per un report con un solo clic.

Importazione di query

Per un esempio, importiamo una che ho scritto. Scarica questo file, poi apri la finestra di dialogo di importazione e seleziona il file da caricare o incolla la query nella casella di testo. Clicca su Importa per salvarla e poi clicca su Esegui per vedere i risultati.

most-common-likers.dcquery (1).json (442 Bytes)

Sembra che tutti gli sviluppatori di Discourse si piacciano molto :heart:

Ricerca di query

Se hai accumulato troppe query fantastiche, nessun problema! La barra di ricerca può aiutarti a filtrare per titoli e descrizioni.

Consenti ai gruppi non staff di eseguire query

Puoi aggiungere gruppi specifici (inclusi i moderatori) a una query per concedere loro l’accesso:

Dopo il salvataggio, puoi trovarlo dalla pagina dei Gruppi per quel particolare gruppo nella scheda Report:

Clicca su qualsiasi query per aprirla e poi sul pulsante Esegui per vedere i risultati. Puoi anche creare un segnalibro ai report di gruppo cliccando sul pulsante Segnalibro.

Condivisione di query con parametri predefiniti

Se hai incluso parametri definiti dall’utente nella tua query, puoi condividere un link alla query e includere i parametri nell’URL in modo che vengano compilati automaticamente quando la pagina viene caricata.

Devi includere i parametri nell’URL in questo formato params={"parameter_name":"value"}. Separa i parametri multipli con virgole. Ad esempio:

discourse.example.com/g/my-group/reports/6?params={"param1":"value1","param2":"value2"}

Combinato con il parametro run menzionato sopra, puoi condividere un report con parametri predefiniti che viene eseguito automaticamente al caricamento.

Limiti dei risultati ed esportazione di query

Con query di grandi dimensioni, potresti notare che c’è un limite al numero di righe che Data Explorer visualizzerà. Di default, il limite è impostato a 1000 righe. Questo è per evitare che query eccessivamente grandi rallentino o interrompano le prestazioni della tua istanza Discourse.

Se vuoi aggirare questo limite, hai alcune opzioni:

  1. Paginazione: Puoi impaginare i tuoi risultati. Invece di cercare di restituire tutti i risultati in una volta, puoi scrivere la tua query per restituire un intervallo specifico di risultati. Puoi poi regolare questo intervallo per visualizzare diverse sezioni dei tuoi dati. Questo non aumenterà il limite, ma ti permetterà di visualizzare tutti i tuoi dati a sezioni.
  2. Aumenta il limite: Se hai accesso al server Discourse e ti senti a tuo agio nel apportare modifiche alle impostazioni di Discourse, puoi aumentare il limite. Tuttavia, questo dovrebbe essere fatto con cautela. Aumentare il limite può mettere sotto stress il tuo server se non si è attenti, specialmente se più utenti stanno eseguendo query di grandi dimensioni contemporaneamente.
  3. Scarica i risultati: Hai anche l’opzione di scaricare i risultati della query invece di visualizzarli direttamente in Discourse cliccando sui pulsanti JSON o CSV dopo aver eseguito la query. I dati scaricati da una query in formato JSON o CSV avranno un limite di risultati molto più alto di 10.000 righe. Per scopi programmatici, vuoi optare per il formato Json, o se desideri lavorare sui dati in un’applicazione di fogli di calcolo, il formato CSV potrebbe essere più conveniente.

È generalmente una buona idea cercare di scrivere query più efficienti, o di filtrare i tuoi dati in modo da recuperare solo ciò di cui hai bisogno, invece di cercare di aggirare il limite.

Puoi anche esportare la query SQL stessa in formato .JSON cliccando sul pulsante Esporta. Le query esportate con questo metodo possono poi essere importate in altri siti Discourse, o utilizzate con applicazioni di terze parti.

Piano di query

La casella di controllo “Includi piano di query” può essere utilizzata per una migliore comprensione e ottimizzazione delle tue query SQL.

Quando selezioni questa casella ed esegui una query, Discourse visualizzerà la sequenza di operazioni utilizzate per accedere ai dati nel database di Discourse. Questo può includere operazioni come scansioni, join, ordinamenti e altre azioni del database. Esaminando il piano di query, puoi vedere esattamente come il database sta eseguendo la tua query.

La serie di tutorial di Data Explorer

Abbiamo anche una serie dedicata sql-tutorial su Data Explorer! Se sei interessato a imparare di più sulla scrittura di query SQL in Discourse, ti consigliamo vivamente di leggere gli argomenti in questa serie:

121 Mi Piace
Data Explorer Tutorial - Part 1 - Writing Your First Query
Daily graph of user time online
Data Explorer Tutorial - Part 2 - Discourse SQL Basics
Formatting Data Explorer Table Results
Visual forum statistics
Extracting email addresses for a group
Visual map of users
How do I download a record of top posts or most clicked links?
Tags: how can admin see who is following what tags?
Can I see in the statistics which post received the most likes
External Data Analysis
Redesign of use profile
Can staff be able to see real author of anonymous posts
How to search/filter untagged topics
Exporting all Topic titles and IDs?
Retrieving user information via REST API
How to measure active users?
Discourse view file update does not reflect in browser
Scan IP matched accounts
Create report for amount of interactions per user
Where to find User ID information
CSV of all editeds post by moderator
Can I access my Discourse forum database?
How to look up a user based on a user_id?
Can I make a plug-ins to view a certain group of people?
Legal Tools Plugin
[Paid] Data explorer queries for ticketing system use case
Transactional Email Service (Open Source)
Direct connect to the Discourse Database
See what categories new users (& other trust levels) post in most
How can I extract the adminstrative records for a EU GDPR request?
Counting and reporting post views for commercial forum users (so we can charge them per-view)
Top user list public
How do I audit votes for fraudulent behavior
How do I get a list of all users from the API?
Tracking referrals? Encouraging users to invite others?
Display Data Explorer query results in WordPress (with TwigAnything)
Database's Data Model?
Filter or create statistics
How do I add users to a group?
Discourse disk space limits per user?
Masonry Image Gallery
Estimated timeline on a project?
Report on User Fields?
Dashboard - Segment number of Posts and Topics by team
Badge image missing issue
Traditional multi level hierarchy vs flat discourse hierarchy
Is there a Trust Level Permissions Table?
Deleting posts by banned users with < 3 posts?
Calculating "Top" topics in Discourse
Is there a way to Search by Posts with No Staff replies on it
How to use SQL to query discourse database
Specify user by external id
How to check the uniqueness of users in "hot link" badge?
Active users per day
Questions about moving an existing forum to Discourse
Get a user object by username or id javascript
Best Practices on reply-by-email
Most liked reply
Likes on a post
Group forum members based on topics viewed?
The metrics on dashboard, do they include activities from administrators?
Can I access Discourse forum Database to use for PowerBI reporting?
Is there a log of user visits?
Find posts "solved" in specific month
Anonymous User Groups
Any way to NOT send emails when a topic category is changed?
View/read by user or of user's posts?
After server migration the images in posts aren't downloadable anymore
Bug with [code]anything[/code] on a single line by itself
Logo is not appearing showing broken after upload
Configuring how users can create and send invites for others to join your community
Users reporting lots of 502 errors when attempting to post due to "max consecutive replies" check
Wildcard search
What would you like to see on your Discourse 2.0 Admin Dashboard?
TeamSpeak Usergroups Sync
Use tags to duplicate images?
Database Access required for our forum
Updated discourse and now site fails to display
Automatic badge expiration
Looking to switch from Vanilla, and have a few questions
Comment on a question instead of answering it
How to create custom reports
Deleted username but can not use that username in other user
Category Remains Muted after Category is available to Everyone
Can staff see who voters in anonymous polls?
Speak to a Discourse Data Analytic representative
How do I pull a report for a single community member?
Report Links to New Topics by Date?
Excluding Suspended, Silenced and Suspect Users When Exporting
Theme-Component v Plugin: What's the difference
Export topics to Excel
Is there a document introducing the database schema design?
Overview which trust level has which possibilities
Why are some users greyed out?
How to get reports for just a specific category?
How to get posts viewed by a user via APIs?
Reports for group message statistics
TimeStamp of Tag
How we put people in a category?
Is it possible to see the dates of all scheduled topics?
Topic Count Per User for Custom Date?
Searching for unassigned topics
Reports by Discourse
How to see all invites and invite tree?
How can I get the list of Discourse Topic IDs dynamically
How to edit sign up form?
Filter posts with images (gallery view)
Tracking unique contributors
New users who visited this month?
Making report on group membership?
Where to find post contents in the database
Searching All Messages as an Administrator
Are Staff and All Groups Included in Dashboard Reporting?
Deleted user with rails console u.delete -> email still "taken"
First Name, Last Name
User posts export as csv or text
User Messages Inbox Error 500
Description of fields returned by Discourse API
Failed to bootstrap due to out of memory killer
Inviting Feedback for Discourse Wiki ("Morphpedia")
What will happen to my forum if discourse suddenly stopped?
Why aren't warnings easily accessible like suspensions are?
Create a Data Explorer query using the API
Automate the syncing of Discourse queries to Google Sheets
Organization of community Data Explorer queries
Get total list of topics and their view counts from Discourse API
Working around the 10,000 result limit of data explorer?
Selecting the Quarter results in custom way
Create a Report on Profile data
Who marked Solution for Topic
Can you view a 'revised' post after it has been revised
More data from Admin reports
Regarding possibility to use Discourse as an alternative to JIRA or Zendesk
Retrieve latest posts by ID
More granular Discourse metrics?
Dump all conversations in a file and structured data
Login type report / list?
Special role to access dashboard
Best API for All First Posts in a Category
Data Explorer: Posts by Category (Including Subcategories)
Can the period stats use custom time frames to not be limited to only the most recent period?
Tracking who accepted which invite link
Advanced Search: Find posts having staff color
2021: The Year in Review
Filter topics not answered by Staff
Can I download a user database and sort by time viewed?
Category API request downloads all topics
User Data By Date Rage
Browse the Postgres database
How do I extract raw data from my discourse community site?
Some issues with searching (sorting, searching deleted posts and such)
How to Delete Uploaded Files?
How to show badges in the message list?
How to show badges in the message list?
How to find pageview data for a specific topic?
Badges for X Number of Solutions Created?
Permanent deletion bug
Adding SSO after many users already signed up -- how to migrate them?
How could I get voters from a poll?
Notifications from muted categories when mailing list mode is enabled
API: how to get joined at date in user summary
Edit a user preference for everyone or a subset of users
Create a Network chart of your forum - data visualization
Discourse Narrative Bot Data Explorer Queries :robot:
How do I get a report of total topics by subcategory for all subcategories please?
Plugin causing errors during rebuild
User field searching / reporting
Admin dashboard report reference guide
Comment, Question, & Discussion Level Agreement Voting - is there an extension?
How to find deleted posts
SQL query for last created users of the past 30 days
How can I see Survey Results or Responses
Is there a plugin for detecting forum access data?
How to show non-staff posts with zero replies
Viewing all published pages in a single site window
Accessing a user's chat activity
Configure Facebook login for Discourse
Admin Reporting & Analysis: Incremental Changes
Access to OpenID claims data?
How to calculate engagement rate for Discourse?
How to export more than the 10,000 limit?
`/admin/customize/permalinks` only shows ~100 permalinks
Can we delete all 'Automatically Bumped' msgs in one go?
User Status
Sort or Order post with combination of both (Replies + Activity)
Dynamically update available user field values during a profile fill in
Can I create a dashboard for a specific group inside the community?
Error during upgrading from Beta 3.1.x to latest
Must have plugins and components for Discourse?
Full IP access log
Available settings for global rate limits and throttling
How can I use GUI to access the postgresql db in docker
Data Explorer query for topics N+ days old, that are unsolved
Page Publishing
Tips for Exporting User Data
Identify private message interactions between users
View tag changes
Types of community & their characteristics
Discourse Chatbot :robot:
Run Data Explorer queries with the Discourse API
2023: The Year in Review
"Ensure ad-blockers are disabled and try reloading the page." when enabling Data Explorer
Exploring Discourse Data Explorer on my Sandbox
Order/Filter searched topics by latest update to First Post
Discourse Automation
API Filter users by emails, including secondary emails
How do I clear user warnings?
Exclude certain categories from the Trust Levels
Topic Ratings Plugin
Forum Data
Is it possible to view all staff notices?
Discourse Retort
Advice on archiving a site
Cleaning up uploads and purging uploads from S3
Content Audit : Report to pull Categories, Topics and Replies
Exporting all Forum Posts for Manual Upload into External LLMs?
discourse容器部署方式下,如何在外部连接到数据库,例如使用DBeaver连接
I'm attempting to merge user accounts
获取昨日点赞或者浏览量,前10的帖子
Populate Data Explorer params with URL params
AI sentiment and emotion analysis reports
Bulk Export of Raw Post Sources with Markup
Bundling more popular plugins with Discourse core
Setting up automated admin notice alerts
Listing event invitees with email addresses
More charting options for Data Explorer
Topics list filter feature
Migrate a phpBB3 forum to Discourse
Using Parameters in Data Explorer Queries
How to find how long a user has viewed a topic/who has posted new topics/country of users
Error trying to edit a post with an image in (NginX Proxy Manager?)
Restrict moderator access to only the stats panel on the admin dashboard?
How does auto-close topics work?
Poll: Export poll results in CSV for quiz creator?
Query to find out who marked the solution as solved
Possible to run a report for most posts within community?
Add an Admin subtab for Inactive users
Questions regarding Discourse features
How to query an email list of users that are not actived
Advice on a support forum
Shopify Integration
How do I see Facebook signups?
Creating and managing polls
Poll: Export poll results in CSV for quiz creator?
Discourse disk space limits per user?
Sorting all users by total posts?
SQL: The most N used words per user (speak their language!)
User Summary - Most Liked By user attributions are incorrect
Maximum Number of Search Results?
Get only top level posts in topic via discourse API
How to get all the deleted posts for a specific topic
Stats reports on a per-category basis?
Data analytics by complex networks and text mining
Error thrown when importing a query in Data Explorer
Zero search results searching private messages for specific keyword
A way to see full list of users granted with a certain badge?
Who messaged the most?
Who messaged the most?
How to open hyperlinks in a new tab
Run report of digest Unsubscribes
Need log the who downloaded attachments
Poll problem - exact vote numbers needed
Telegram Notifications Plugin (discourse-telegram-notifications)
Get last :heart: via API
Is it possible to keep the votes history of a poll?
How do I check a badge's status midway to it being awarded?
What plugins do you use - and why?
Export list of users based on date range
How to get all posts a user interacted with?
How can I email all recently active users?
Raw Function limited to 100

Ciao! :slight_smile:

Quindi ho chiesto in questo thread come copiare i link di tutti gli argomenti in una query di ricerca. Sono stato indirizzato qui. Quindi, ho chiesto al manager di il nostro forum se avessimo questo plugin installato, cosa che abbiamo. Tuttavia, non sappiamo come usarlo per copiare tutti i link da una query di ricerca in un file CSV usando questo plugin. Qualcuno ha già fatto questa operazione e magari può indicarci la giusta direzione? :sweat_smile:

Nota che sono un utente regolare del forum, non ho poteri di staff. Tuttavia, sto riportando queste informazioni al gestore del sito che li ha e che può farlo per me. :slight_smile:

Grazie in anticipo!

Ciao Preston!

Il plugin Data Explorer ti permette di creare query SQL.

Vuoi crearne una nuova che elenchi gli argomenti che cerchi.

Quindi, quando esegui la query, vedrai un pulsante CSV per esportare il risultato in un file CSV.

Spero che questo aiuti!

Facci sapere se hai bisogno di ulteriore aiuto per creare la query!

3 Mi Piace

Grazie! Lo riferirò :abbracci:

3 post sono stati divisi in un nuovo argomento: Come aggirare il limite di 10.000 risultati di data explorer?

Ciao, ho una richiesta di funzionalità per questo ottimo plugin.

Alcuni dei report che creo utilizzando Data Explorer, sarebbero molto utili al mio team se potessi elencarli nella pagina Dashboard Reports (/admin/reports).

Sarebbe possibile aggiungere un’opzione a ciascuna query di Data Explorer per essere elencata nella pagina Reports? Grazie.

Ad esempio:

  • Elenca questa query personalizzata nella pagina Reports
3 Mi Piace

Grazie per questa funzionalità!

Sto esplorando come potremmo scrivere metriche personalizzate. Stiamo utilizzando Discourse insieme a Workadventu.re (uno strumento di collaborazione A/V basato su avatar 2D).
Sto eseguendo uno script personalizzato lì per scrivere attività in un foglio Google tramite un webhook. Per avere tutte le cose centralizzate nel nostro strumento principale (Discourse), sarebbe fantastico avere questi dati stampati in Discourse…
Qualche consiglio?!

1 Mi Piace

Speravo davvero che ci fosse un generatore di query che aiutasse a scrivere SQL. Il mio SQL è vecchio e arrugginito e scriverlo a mano è soggetto a errori e richiede tempo. Sarebbe bello se ci fosse un modo più semplice!

2 Mi Piace

Ciao @davidgs, benvenuto su Meta :wave: :slight_smile:

Hai provato a usare un LLM come ChatGPT? Ha una discreta comprensione di Discourse ed è stato abbastanza affidabile quando ho dovuto anche creare query per l’esplorazione dei dati.

Spesso scrivo i miei prompt come “Scrivi una query di esplorazione dati di Discourse che restituisca x,y,z da a,b,c dove…” e ottengo qualcosa di abbastanza ragionevole.

Nell’angolo in alto a destra di questa pagina potresti anche vedere una piccola icona di robot come quella qui sotto.
image

Se è così, potresti anche provare l’AI Helper Bot integrato con Meta.

2 Mi Piace

La maggior parte di noi non la vede. Ma c’è sempre ask.discourse.com

2 Mi Piace

Sì, non ricordavo se questa fosse ancora solo una cosa di livello di fiducia 3 o meno. Buona idea per il sito ask.discourse.com.

Come esempio di riferimento, ho inserito scrivi una query di esplorazione dati di discourse che restituisca un elenco di tutti gli utenti che hanno detto la parola "software" nella barra di inserimento del testo di ask.discourse.com e ho ottenuto la seguente query:

SELECT 
    p.user_id, 
    u.username,
    COUNT(p.id) AS post_count
FROM 
    posts p
JOIN 
    users u ON u.id = p.user_id
WHERE 
    p.raw ILIKE '%software%'
GROUP BY 
    p.user_id, u.username
ORDER BY 
    post_count DESC;

Abbastanza ragionevole. Posso anche garantire che esegue query significativamente più complesse di questa.

2 Mi Piace

L’esportazione dei dati dall’esplora dati non funziona più con gli ultimi aggiornamenti di Discourse ed Esplora dati che ho installato circa due ore fa. I dati vengono creati correttamente ma non è più possibile esportarli.

Fare clic sui pulsanti JSON o CSV provoca solo un breve lampeggio e non succede nient’altro. Ha funzionato bene circa due settimane fa.

Nella console del browser web vedo il seguente errore:
CSV:

Uncaught TypeError: this.args.query is undefined
    _downloadResult query-result.js:310
    downloadResultCsv query-result.js:287
    _triggerAction d-button.gjs:160
    Ember 12
    _triggerAction d-button.gjs:157
    click d-button.gjs:106

JSON:

Uncaught TypeError: this.args.query is undefined
    _downloadResult query-result.js:310
    downloadResultJson query-result.js:283
    _triggerAction d-button.gjs:160
    Ember 12
    _triggerAction d-button.gjs:157
    click d-button.gjs:106
1 Mi Piace

Grazie per la segnalazione del bug, @GuidoD!

Ho unito una correzione per questo problema in precedenza oggi, prova ad aggiornare e conferma che funziona per te. :slight_smile:

2 Mi Piace

grazie per la rapida soluzione.
Confermo che funziona di nuovo correttamente.

1 Mi Piace

per una piccola quantità di dati, l’esportazione in JSON e CSV funzionano correttamente. Ma per una maggiore quantità di dati, l’esportazione CSV funziona bene ma l’esportazione JSON genera un errore nginx 502 bad gateway (probabilmente a causa di un timeout dopo 30 secondi, poiché la creazione del file JSON richiede più di 30 secondi).
Esiste un modo semplice per aumentare il valore di timeout di nginx?

Se riduco l’intervallo di tempo della query, il file CSV è di 12,9 MB e il file JSON è di 645 MB. Il file CSV totale è di 13,5 MB, quindi solo un po’ più grande, ma il file JSON non viene creato a causa dell’errore nginx.

O forse la creazione del file JSON sta riscontrando un errore a causa di dati anomali. La creazione del file JSON crea un file di log?

Le query JSON vengono eseguite con un LIMIT esterno superiore per impostazione predefinita rispetto alle query CSV. Aggiungere la paginazione personalizzata all’interno della query per garantire il completamento in tempo.

1 Mi Piace

È possibile eseguire istruzioni UPDATE da Data Explorer?

Sto cercando di eseguire un aggiornamento massivo di una certa tabella, ma ottengo questo errore:

PG::FeatureNotSupported: ERROR:  WITH query "query" does not have a RETURNING clause
LINE 29:   ) SELECT * FROM query

No, Data Explorer esegue solo transazioni di sola lettura. (Se aggiornassi la tua query per includere una clausola RETURNING, otterresti un errore di transazione di sola lettura.)

Se stai auto-ospitando, utilizza una delle guide “launcher enter”, come

Se hai già progettato il tuo UPDATE, puoi usare psql discourse invece di rails c.

Se sei su un servizio ospitato, contatta il supporto per far eseguire la modifica.

1 Mi Piace

Grazie per la risposta. Ha senso. Utilizziamo un servizio ospitato, quindi contatterò il loro supporto.

Se condivido una query SQL con il gruppo dei moderatori, come possono gli utenti del gruppo dei moderatori eseguire la query dal proprio account? Non possono vedere il plugin Data Explorer.