Este artículo es parte de una serie sobre el funcionamiento y la programación de la tarjeta Micro-bit. Consulte los enlaces al final de este artículo para ver otros de la misma serie en el sitio.

 

La tarjeta micro:bit puede ser dividida en 4 partes principales:

Salidas.

Procesos.

Datos.

Entradas.

 

Observe el diagrama de bloques en la figura 1 donde son mostradas estas partes:

 

 

Figura 1
Figura 1 | Haga click en la imagen para ampliar |

 

 

En este texto estudiaremos los “Procesos”, como es resaltado en la figura 2:

 

 

Figura 2
Figura 2 | Haga click en la imagen para ampliar |

 

Los procesos de una tarjeta como micro:bit son de varios tipos. En este capítulo nos centraremos sobre los procesos “lógicos”. La lógica en una tarjeta como micro:bit o en cualquier microcontrolador, es muy similar a la lógica que usa el cerebro humano para la toma de decisiones o llegar a conclusiones. Como por ejemplo: analizar o verificar, si algo es “verdadero” o “falso”. También, usamos lógica en magnitudes físicas, como temperatura, humedad, etc. Veamos un ejemplo práctico: supongamos que se está manejando un automóvil y encontramos un semáforo en rojo, por lógica o sentido común, se debe parar el auto, pues el semáforo nos indica eso. Si el caso fuera que el semáforo se encuentra en verde, entonces se puede avanzar el automóvil. Entonces, dependiendo de una verdad, hacemos determinadas acciones. Un ejemplo de lógica con magnitudes puede ser cuando salimos a caminar y la temperatura es muy baja, entonces normalmente, por lógica, nos protegemos con alguna chaqueta o abrigo para evitar el frío. Así, hay infinitos ejemplos donde usamos la lógica o el sentido común para tomar decisiones o realizar determinadas acciones. Veremos que lo mismo podemos hacer con la tarjeta micro:bit o cualquier otro microcontrolador.

 

Para ir a la parte lógica de la tarjeta micro:bit, seleccione la función “LÓGICA”, como mostrado en la figura 3:

 

Figura 3
Figura 3

 

 

Aparecerá una ventana como la mostrada en la figura 4:

 

 

Figura 4
Figura 4

 

 

 

TIPO DE DATO BOOLEANO.

Observa en la ventana emergente, que la lógica se clasifica en: “condicionales”, “comparación” y “booleano”. Condicionales son bloques de programación que permiten evaluar comparaciones y lógica booleana. La lógica en la tarjeta micro:bit, está basada en valores booleanos, los cuales tienen uno de 2 posibles valores: “verdadero” (true) o “falso” (false). Las operadores booleanos (AND, OR y NOT), toman entradas booleanas y dan como resultado otro valor booleano. Los operadores de comparación (=, !=, <, <=, >, >=), sobre otros tipos de datos como números y textos (strings), también devuelven o dan como resultado un valor boolean.

 

CONDICIONAL SI (IF).

Note en la ventana emergente, la parte de condicionales, observe que hay 2 bloques de código. La primera es la lógica: “SÍ”, que normalmente se escribe en inglés como “IF”. Probablemente se han escuchado frases como:

“Si” limpias y ordenas el cuarto, “entonces” puedes ir a jugar.

“Si” apruebas y pasas tu año escolar, “entonces” puedes ir de vacaciones.

“Si” termino este trabajo, “entonces” recibiré un dinero.

Todas estas expresiones son condicionales, pues es necesario que se cumpla una situación o condición, para que pueda suceder una acción o actividad. En la tarjeta micro:bit podemos hacer algo similar con el siguiente bloque de código:

 

 

Bloco de código
Bloco de código

 

 

Observa que el bloque se llama “SI”. Este bloque ejecuta código dependiendo sobre si una condición es verdadera o falsa. En la figura anterior, el bloque: “si”, ejecuta el código si la condición es verdadera. La figura 5 muestra un bloque: “si”, que ejecuta código, si la condición es falsa:

 

 

Figura 5
Figura 5

 

 

Vamos a hacer una práctica para ver cómo funciona. Vea la figura 6. Cree un nuevo proyecto y en los bloques: “al iniciar” y “para siempre”:

 

 

Figura 6
Figura 6

 

 

Agrega el siguiente programa:

 

 

Programa
Programa

 

 

Al ejecutar este programa, inicialmente aparecerá el siguiente valor en la tarjeta micro:bit: (figura 7)

 

 

Figura 7
Figura 7

 

 

Porque al iniciar le hemos indicado a la tarjeta que muestre el número cero (0). Si presionamos el botón A, la condición es verdadera, entonces aparecerá el mensaje de texto: “Hola”. Observe que así lo dice la instrucción:

 

 


 

 

 

Si presionas el botón B, observaras que no sucede nada pues en el programa no existe una instrucción que así lo indique.

En el diagrama de la figura 8 podemos ver una representación en bloques del programa que acabamos de hacer. Este tipo de diagramas es conocido como “diagrama de flujo”, el cual muestra o indica qué acciones se tomarán en caso que se cumpla la condición.

 

 

Figura 8
Figura 8

 

 

CONDICIÓN OPUESTA (ELSE).

Hay otro bloque de código que permite hacer una acción en caso que la condición sea opuesta. Observe la figura 9:

 

 

Figura 9
Figura 9

 

 

El bloque de código dice: “SI” algo es verdadero, “entonces” ejecute esta acción, “SI NO” (ELSE) ejecuta esta otra acción. Desarrollemos una aplicación práctica para entender cómo funciona este bloque. Supongamos que voy a utilizar el botón A, para que cuando no esté presionado, muestre el número 2 y cuando esté presionado, muestre el número 8. Cree un nuevo proyecto y en el bloque de código: para siempre, inserte el siguiente programa:

 

 

Bloque de programa
Bloque de programa

 

 

Ejecuta el programa y experimenta lo que sucede. Observe que cuando no se presiona el botón A, se observa el siguiente número:

 

 


 

 

 

Pero cuando el botón A es presionado se observa el número 8 como se muestra a seguir:

 


 

 

 

Así, podemos hacer infinidad de cosas. En este ejemplo hemos mostrado números diferentes, más podríamos encender o apagar motores, luces, sonidos, etc. Va a depender de la idea y del proyecto.

Para tener una idea, de lo que hace el procesador en la tarjeta, podemos ver el siguiente diagrama de flujo: (figura 10)

 

Figura 10
Figura 10

 

 

Los diagramas de flujo tienen mucha flexibilidad a la hora de ser hechos o diseñados. Por ejemplo, el diagrama de flujo de la figura 11, es idéntico al anterior en cuanto a los flujos y las acciones que son tomadas. Así, puedes encontrar diferentes maneras de dibujar el diagrama. Pero lo que verdaderamente importa es que se siga el flujo, es decir las líneas con flecha, para entender lo que se está haciendo.

 

 

 

Figura 11
Figura 11

 

 

CONDICIÓN OPUESTA, MÁS VERIFIQUE ALGO NUEVAMENTE (ELSE IF)

Existe la posibilidad, de en la condición opuesta, verificar alguna condición más. Este tipo de análisis es muy común cuando se está haciendo algún proyecto. Para que esto pueda ser hecho, haga clic en el símbolo (+), para agregar secciones “si no, si” del bloque: “si”. Este tipo de bloque, lo que hace es verificar si el primer valor es verdadero, entonces ejecuta el primer bloque de declaraciones, caso contrario, verifica si el segundo bloque es verdadero, ejecuta el segundo bloque, caso contrario, verifica si el tercer bloque es verdadero, ejecuta el tercer bloque, si no ejecuta un último bloque por defecto. Se puede hacer el bloque de la cantidad de bloques: “si no, si” que se desee. La figura 12 muestra este clase de bloques:

 

 

Figura 12
Figura 12

 

 

La siguiente es la representación del diagrama de flujo para este tipo de bloque. Observe que una vez que alguna condición sea verdadera, se sale del bloque.

 

 


 

 

 

COMPARACIÓN.

Con la tarjeta micro:bit es posible comparar variables con un determinado valor o comparar variables con variables. Estas expresiones pueden ser evaluadas o verificadas con el bloque: SI (IF), para determinar si son verdaderas o falsas. Las expresiones de comparación se encuentran localizadas en la función LÓGICA como muestra la figura 14:

 

 


 

 

 

Hay 6 expresiones de comparación:

= Igual.

!= Diferente.

< Menor que.

<= Menor o igual que.

> Mayor que.

>= Mayor o igual que.

 

Observe la figura 15 donde se pueden seleccionar las opciones de lógica de comparación:

 

 

Figura 15
Figura 15

 

 

Estas opciones las encuentra dando click en la flecha del bloque, como muestra la figura 16:

 

Figura 16
Figura 16

 

 

Veamos un programa práctico para entender mejor el funcionamiento de los operadores de comparación. Supongamos que tenemos una cerradura electrónica y el usuario digita una clave numérica (key), la cual se almacena en una variable llamada: “keyUsuario”. Después, comparamos esta clave, con la clave de la cerradura. Si las dos claves son iguales, se abrirá la puerta. Si son diferentes, se cerrara la puerta. El siguiente programa permite hacer esto:

 

Programa
Programa

 

 

BOOLEANOS.

Existen 3 tipos de operadores booleanos: Lógica “OR”, Lógica “AND” y Lógica “NOT”. La figura 17 muestra estos bloques:

 

Figura 17
Figura 17

 

 

En electrónica se usan los siguientes símbolos para representar la lógica en los microcontroladores: (figura 18)

 

 

Figura 18
Figura 18

 

 

Como este tipo de variable es importante comprenderlo bien para poder usarlos, vamos a dedicar un capítulo aparte para su mejor estudio.

 

 

18.924MBMemory Usage45.44msRequest Duration
Joomla! Version5.2.3
PHP Version8.3.16
Identityguest
Response200
Templatecassiopeia
Database
Server
mysql
Version
10.5.22-MariaDB
Collation
latin1_swedish_ci
Conn Collation
utf8mb4_general_ci
$_GET
[]
$_POST
[]
$_SESSION
array:1 [ "joomla" => "***redacted***" ]
$_COOKIE
[]
$_SERVER
array:51 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "SCRIPT_NAME" => "/index.php" "RE...
session
array:3 [ "counter" => 1 "timer" => array:3 [ "start" => 1741912404 "last" => 1741912404...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.67KB) (322μs)
  • afterInitialise (1.14MB) (4.12ms)
  • afterRoute (179.16KB) (997μs)
  • beforeRenderComponent com_content (100.65KB) (508μs)
  • Before Access::preloadComponents (all components) (33.5KB) (309μs)
  • After Access::preloadComponents (all components) (107.06KB) (369μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (9μs)
  • After Access::preloadPermissions (com_content) (16.19MB) (21.32ms)
  • Before Access::getAssetRules (id:25820 name:com_content.article.29490) (514.65KB) (1.1ms)
  • After Access::getAssetRules (id:25820 name:com_content.article.29490) (7.38KB) (87μs)
  • afterRenderComponent com_content (416.65KB) (7.28ms)
  • afterDispatch (2.25KB) (69μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (359.33KB) (1.82ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (15.43KB) (435μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (107μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (129.29KB) (1.4ms)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (9.98KB) (657μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (5.39KB) (73μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (274μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.44KB) (67μs)
  • afterRender (269.55KB) (3.97ms)
  • 1 x After Access::preloadPermissions (com_content) (16.19MB) (46.93%)
    21.32ms
    1 x afterRenderComponent com_content (416.65KB) (16.03%)
    7.28ms
    1 x afterInitialise (1.14MB) (9.07%)
    4.12ms
    1 x afterRender (269.55KB) (8.74%)
    3.97ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (359.33KB) (4.01%)
    1.82ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (129.29KB) (3.07%)
    1.40ms
    1 x Before Access::getAssetRules (id:25820 name:com_content.article.29490) (514.65KB) (2.42%)
    1.10ms
    1 x afterRoute (179.16KB) (2.19%)
    997μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (9.98KB) (1.45%)
    657μs
    1 x beforeRenderComponent com_content (100.65KB) (1.12%)
    508μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (15.43KB) (0.96%)
    435μs
    1 x After Access::preloadComponents (all components) (107.06KB) (0.81%)
    369μs
    1 x afterLoad (85.67KB) (0.71%)
    322μs
    1 x Before Access::preloadComponents (all components) (33.5KB) (0.68%)
    309μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (0.6%)
    274μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.24%)
    107μs
    1 x After Access::getAssetRules (id:25820 name:com_content.article.29490) (7.38KB) (0.19%)
    87μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (5.39KB) (0.16%)
    73μs
    1 x afterDispatch (2.25KB) (0.15%)
    69μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.44KB) (0.15%)
    67μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.02%)
    9μs
21 statements were executed, 5 of which were duplicates, 16 unique12.03ms1.61MB
  • SELECT @@SESSION.sql_mode;39μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 188μs1.3KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • INSERT INTO `incbmx_session` (`session_id`,`guest`,`time`,`userid`,`username`,`client_id`) VALUES (:session_id, :guest, :time, :user_id, :username, :client_id)186μs944BParams/libraries/src/Session/MetadataManager.php:260Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`54μs656B/libraries/src/Access/Access.php:955Copy
  • SELECT `b`.`id` FROM `incbmx_usergroups` AS `a` LEFT JOIN `incbmx_usergroups` AS `b` ON `b`.`lft` <= `a`.`lft` AND `b`.`rgt` >= `a`.`rgt` WHERE `a`.`id` = :guest78μs1.64KBParams/libraries/src/Access/Access.php:868Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`209μs20.2KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` IN (:preparedArray1,:preparedArray2,:preparedArray3,:preparedArray4,:preparedArray5,:preparedArray6,:preparedArray7,:preparedArray8,:preparedArray9,:preparedArray10,:preparedArray11,:preparedArray12,:preparedArray13,:preparedArray14,:preparedArray15,:preparedArray16,:preparedArray17,:preparedArray18,:preparedArray19,:preparedArray20,:preparedArray21,:preparedArray22,:preparedArray23,:preparedArray24,:preparedArray25,:preparedArray26,:preparedArray27,:preparedArray28,:preparedArray29,:preparedArray30,:preparedArray31,:preparedArray32,:preparedArray33,:preparedArray34,:preparedArray35,:preparedArray36,:preparedArray37,:preparedArray38,:preparedArray39)216μs7.44KBParams/libraries/src/Access/Access.php:357Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` LIKE :asset OR `name` = :extension OR `parent_id` = 08.29ms1.46MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`432μs2.39KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '29490'210μs48B/libraries/src/Table/Table.php:1348Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)177μs46.13KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`245μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`tag_id`,`t`.* FROM `incbmx_contentitem_tag_map` AS `m` INNER JOIN `incbmx_tags` AS `t` ON `m`.`tag_id` = `t`.`id` WHERE `m`.`type_alias` = :contentType AND `m`.`content_item_id` = :id AND `t`.`published` = 1 AND `t`.`access` IN (:preparedArray1,:preparedArray2)240μs3.97KBParams/libraries/src/Helper/TagsHelper.php:388Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`174μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT DISTINCT a.id, a.title, a.name, a.checked_out, a.checked_out_time, a.note, a.state, a.access, a.created_time, a.created_user_id, a.ordering, a.language, a.fieldparams, a.params, a.type, a.default_value, a.context, a.group_id, a.label, a.description, a.required, a.only_use_in_subform,l.title AS language_title, l.image AS language_image,uc.name AS editor,ag.title AS access_level,ua.name AS author_name,g.title AS group_title, g.access as group_access, g.state AS group_state, g.note as group_note FROM incbmx_fields AS a LEFT JOIN `incbmx_languages` AS l ON l.lang_code = a.language LEFT JOIN incbmx_users AS uc ON uc.id=a.checked_out LEFT JOIN incbmx_viewlevels AS ag ON ag.id = a.access LEFT JOIN incbmx_users AS ua ON ua.id = a.created_user_id LEFT JOIN incbmx_fields_groups AS g ON g.id = a.group_id LEFT JOIN `incbmx_fields_categories` AS fc ON fc.field_id = a.id WHERE ( (`a`.`context` = :context AND (`fc`.`category_id` IS NULL OR `fc`.`category_id` IN (:preparedArray1,:preparedArray2,:preparedArray3)) AND `a`.`access` IN (:preparedArray4,:preparedArray5)) AND (`a`.`group_id` = 0 OR `g`.`access` IN (:preparedArray6,:preparedArray7)) AND `a`.`state` = :state) AND (`a`.`group_id` = 0 OR `g`.`state` = :gstate) AND `a`.`only_use_in_subform` = :only_use_in_subform ORDER BY a.ordering ASC497μs4.81KBParams/libraries/src/MVC/Model/BaseDatabaseModel.php:164Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`209μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1174μs1.89KB/administrator/components/com_finder/src/Helper/LanguageHelper.php:135Copy
  • SELECT `title` FROM `incbmx_finder_taxonomy` WHERE `parent_id` = 1 AND `state` = 1 AND `access` IN (1,5)131μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context84μs1.55KBParams/plugins/system/schemaorg/src/Extension/Schemaorg.php:403Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)208μs46.17KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT SUM(CASE WHEN `a`.`next_execution` <= :now THEN 1 ELSE 0 END) AS due_count,SUM(CASE WHEN `a`.`locked` IS NULL THEN 0 ELSE 1 END) AS locked_count FROM `incbmx_scheduler_tasks` AS `a` WHERE `a`.`state` = 191μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy