This addon free can help with :
2D, 3D, game, games, online game, game development, game engine, programming, OpenGL, Open AI, math, graphics, design, graphic, graphics, game development, game engine, programming, web development, web art, web graphic, arts, tutorial, tutorials,
Se afișează postările cu eticheta tutorials. Afișați toate postările
Se afișează postările cu eticheta tutorials. Afișați toate postările
joi, 24 aprilie 2025
joi, 17 aprilie 2025
Artificial Intelligence: Ollama duplicate model .
Ollama can be install on your computer and changed according with your hardware requirements.
I will show how to duplicate a model and use it, see these commands:
D:\AI_Ollama>ollama list
NAME ID SIZE MODIFIED
orca-mini:3b 2dbd9f439647 2.0 GB 16 hours ago
tinyllama:latest 2644915ede35 637 MB 16 hours ago
gemma2:2b 8ccf136fdd52 1.6 GB 16 hours ago
llama3.1:latest 46e0c10c039e 4.9 GB 5 weeks ago
llava:latest 8dd30f6b0cb1 4.7 GB 2 months ago
D:\AI_Ollama>
D:\AI_Ollama>
D:\AI_Ollama>
D:\AI_Ollama>ollama show tinyllama:latest --modelfile
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM tinyllama:latest
FROM C:\Users\nicol\.ollama\models\blobs\sha256-2af...
TEMPLATE "<|system|>
{{ .System }}
<|user|>
{{ .Prompt }}
<|assistant|>
"
SYSTEM You are a helpful AI assistant.
PARAMETER stop <|system|>
PARAMETER stop <|user|>
PARAMETER stop <|assistant|>
PARAMETER stop
D:\AI_Ollama>ollama show tinyllama:latest --modelfile > new.modelfile
gathering model components
gathering model components
gathering model components
gathering model components
gathering model components
gathering model components
gathering model components
gathering model components
copying file sha256:2af3b81862c6be03c769683af18efdadb2c33f60ff32ab6f83e42c043d6c7816 100%
parsing GGUF
using existing layer sha256:2af3b81862c6be03c769683af18efdadb2c33f60ff32ab6f83e42c043d6c7816
using existing layer sha256:af0ddbdaaa26f30d54d727f9dd944b76bdb926fdaf9a58f63f78c532f57c191f
using existing layer sha256:c8472cd9daed5e7c20aa53689e441e10620a002aacd58686aeac2cb188addb5c
using existing layer sha256:fa956ab37b8c21152f975a7fcdd095c4fee8754674b21d9b44d710435697a00d
writing manifest
success
D:\AI_Ollama>ollama list
NAME ID SIZE MODIFIED
new-tinyllama:latest add64faa5d3b 637 MB 5 seconds ago
orca-mini:3b 2dbd9f439647 2.0 GB 16 hours ago
tinyllama:latest 2644915ede35 637 MB 16 hours ago
gemma2:2b 8ccf136fdd52 1.6 GB 16 hours ago
llama3.1:latest 46e0c10c039e 4.9 GB 5 weeks ago
llava:latest 8dd30f6b0cb1 4.7 GB 2 months ago
D:\AI_Ollama>ollama run new-tinyllama:latest
>>> Hello
Yes, of course! I'm happy to hear that you found my message helpful. Let
me know if you have any further questions or concerns in the future. If
you need further assistance, feel free to reach out again at your
convenience. Have a great day!
>>> Send a message (/? for help)
Posted by
Cătălin George Feștilă
Labels:
2025,
2025 news,
artificial intelligence,
news,
ollama,
tutorial,
tutorials

miercuri, 16 aprilie 2025
News : Google Apps Script - add movies from website into new sheet.
This source code with GAScript add few movies from cinemagia website:
The commant the lines from the last post tutorial and use this source code.
This will add movies into separated sheet by date, see the source code:
// try {
// const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// const currentDate = new Date();
// extractedData.forEach((movie, rowIndex) => {
// if (movie.title !== "N/A" && movie.image !== "N/A") {
// const imageFormula = `=IMAGE("${movie.image}")`;
// const rowIndexAdjusted = sheet.getLastRow() + 1;
// sheet.appendRow([currentDate, movie.title, imageFormula, movie.channel, movie.time]);
// sheet.setRowHeight(rowIndexAdjusted, 76); // Set row height to 330px
// }
// });
// Logger.log("Processed movies count: ", extractedData.length);
// } catch (error) {
// Logger.log("Error adding data to spreadsheet: ", error.message);
// }
try {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const currentDate = new Date();
// Formatăm data curentă pentru numele sheet-ului
const formattedDate = Utilities.formatDate(currentDate, SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "yyyy-MM-dd");
const sheetName = `Data-${formattedDate}`;
// Verificăm dacă sheet-ul cu acest nume există deja
let sheet = spreadsheet.getSheetByName(sheetName);
if (!sheet) {
// Creăm un nou sheet dacă nu există
sheet = spreadsheet.insertSheet(sheetName);
}
extractedData.forEach((movie) => {
if (movie.title !== "N/A" && movie.image !== "N/A") {
const imageFormula = `=IMAGE("${movie.image}")`;
const rowIndexAdjusted = sheet.getLastRow() + 1;
sheet.appendRow([currentDate, movie.title, imageFormula, movie.channel, movie.time]);
// Păstrăm formatarea originală pentru înălțimea rândurilor
sheet.setRowHeight(rowIndexAdjusted, 76);
}
});
} catch (error) {
console.error("A apărut o eroare:", error.message);
}
Posted by
Cătălin George Feștilă
Labels:
2025,
2025 news,
google,
Google Apps Script,
news,
open source,
source code,
tutorial,
tutorials

News : Viewing HTML in your Terminal by Kris Occhipinti.
... another video from the Kris Occhipinti - official youtube videos.
This is an old channel with good content that I was looking at about 10 years ago... My internet content is being cut for some reason and I saw this new video today.
Posted by
Cătălin George Feștilă
Labels:
2025,
2025 news,
news,
tutorial,
tutorials,
video,
video card,
youtube

sâmbătă, 29 martie 2025
News : Google Apps Script - add movies from website.
This source code with GAScript add few movies from cinemagia website:
This is the source code:
function scrapeProcessAndCleanUp() {
const url = "https://www.cinemagia.ro/program-tv/filme-la-tv/filme-pro-tv,antena-1,tvr-1,prima-tv,diva,pro-cinema,film-cafe/azi/";
let html;
try {
const response = UrlFetchApp.fetch(url);
html = response.getContentText();
Logger.log("Fetched HTML content length: ", html.length);
} catch (error) {
Logger.log("Error fetching HTML content: ", error.message);
return;
}
let doc;
try {
doc = DocumentApp.create("Temporary HTML Content");
doc.appendParagraph(html);
doc.saveAndClose();
Logger.log("Document created successfully with ID: ", doc.getId());
} catch (error) {
Logger.log("Error creating/saving document: ", error.message);
return;
}
let text;
try {
const document = DocumentApp.openById(doc.getId());
text = document.getBody().getText();
Logger.log("Document text content length: ", text.length);
} catch (error) {
Logger.log("Error opening document or extracting text: ", error.message);
return;
}
const titles = [...text.matchAll(/<li class="first">(.*?)<\/li>/g)];
const images = [...text.matchAll(/<img src="(https:\/\/static\.cinemagia\.ro\/img\/resize\/db\/movie.*?)"/g)];
const channels = [...text.matchAll(/<span class="r1">(.*?)<\/span>/g)];
const times = [...text.matchAll(/<span class="r2">(.*?)<\/span>/g)];
Logger.log("Titles found: ", titles.length);
Logger.log("Images found: ", images.length);
Logger.log("Channels found: ", channels.length);
Logger.log("Times found: ", times.length);
const extractedData = titles.map((title, index) => {
const image = images[index] ? images[index][1] : "N/A";
const channel = channels[index] ? channels[index][1].trim() : "N/A";
const time = times[index] ? times[index][1].trim() : "N/A";
return {
title: title[1].trim(),
image: image,
channel: channel,
time: time
};
});
try {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const currentDate = new Date();
extractedData.forEach((movie, rowIndex) => {
if (movie.title !== "N/A" && movie.image !== "N/A") {
const imageFormula = `=IMAGE("${movie.image}")`;
const rowIndexAdjusted = sheet.getLastRow() + 1;
sheet.appendRow([currentDate, movie.title, imageFormula, movie.channel, movie.time]);
sheet.setRowHeight(rowIndexAdjusted, 76); // Set row height to 330px
}
});
Logger.log("Processed movies count: ", extractedData.length);
} catch (error) {
Logger.log("Error adding data to spreadsheet: ", error.message);
}
}

Posted by
Cătălin George Feștilă
Labels:
2025,
2025 news,
google,
Google Apps Script,
news,
open source,
source code,
tutorial,
tutorials

marți, 25 martie 2025
News : Google Apps Script - find duplicate files in google drive.
For today, a simple GAScript source code to add into spreadsheet the duplicate files from Google drive.
This Google Apps Script finds duplicate files in Google Drive by comparing file sizes and optionally file types. It then displays the results in a spreadsheet with detailed information about each duplicate file. The script collects information about all files in Drive. Files are grouped by their size and optionally file type. Any group with more than one file is considered a set of duplicates
These duplicate sets are displayed in the spreadsheet
Functions
- checkDuplicatesInDrive(): Main function that searches your entire Google Drive for duplicates
- checkDuplicatesInFolder(): Alternative function that searches a specific folder and its subfolders
- findDuplicateFiles(): Core function that identifies duplicate files based on size and type
- addDuplicatesToSheet(): Adds the found duplicates to a spreadsheet
I used artificial inteligence and this help me much ...
/**
* Main function to check files in the root folder and add duplicates to the active spreadsheet
*/
function checkDuplicatesInDrive() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Clear the sheet and set up headers
sheet.clear();
sheet.appendRow(["Group", "File Name", "Size", "Type", "File Path", "Date Created", "Last Updated", "URL"]);
sheet.getRange(1, 1, 1, 8).setFontWeight("bold").setBackground("#f3f3f3");
// Find all duplicates
const duplicates = findDuplicateFiles(true);
// Check if any duplicates were found
if (Object.keys(duplicates).length === 0) {
sheet.appendRow(["No duplicate files found"]);
sheet.autoResizeColumns(1, 8);
return;
}
// Add duplicates to the sheet
addDuplicatesToSheet(duplicates, sheet);
// Auto-resize columns
sheet.autoResizeColumns(1, 8);
}
/**
* Adds duplicate files to the specified sheet
*/
function addDuplicatesToSheet(duplicates, sheet) {
let groupNumber = 1;
let rowIndex = 2;
let totalDuplicateFiles = 0;
for (const key in duplicates) {
const files = duplicates[key];
totalDuplicateFiles += files.length;
files.forEach((file, index) => {
// Get file path
const filePath = getFilePath(file.id);
sheet.appendRow([
groupNumber,
file.name,
formatFileSize(file.size),
file.mimeType,
filePath,
file.dateCreated.toLocaleString(),
file.lastUpdated.toLocaleString(),
file.url
]);
// Add hyperlink to the file URL
sheet.getRange(rowIndex, 8).setFormula(`=HYPERLINK("${file.url}","Open File")`);
rowIndex++;
});
groupNumber++;
}
// Add summary at the bottom - only if we have duplicates
if (totalDuplicateFiles > 0) {
sheet.appendRow(["SUMMARY"]);
sheet.appendRow([`Found ${totalDuplicateFiles} duplicate files in ${groupNumber - 1} groups.`]);
}
return totalDuplicateFiles;
}
/**
* Gets the file path for a given file ID
*/
function getFilePath(fileId) {
try {
const file = DriveApp.getFileById(fileId);
const parents = file.getParents();
if (parents.hasNext()) {
const parent = parents.next();
return getFolderPath(parent) + "/" + file.getName();
} else {
return "/" + file.getName();
}
} catch (e) {
return "Path not available";
}
}
/**
* Gets the folder path for a given folder
*/
function getFolderPath(folder) {
try {
const parents = folder.getParents();
if (!parents.hasNext()) {
return "/" + folder.getName();
}
const parent = parents.next();
return getFolderPath(parent) + "/" + folder.getName();
} catch (e) {
return "/Unknown";
}
}
/**
* Finds duplicate files in Google Drive based on file size and optionally file type.
* @param {boolean} considerFileType Whether to consider file type when finding duplicates (default: true)
* @param {string} folderId Optional folder ID to search in. If not provided, searches in the entire Drive.
* @return {Object} An object containing groups of duplicate files
*/
function findDuplicateFiles(considerFileType = true, folderId = null) {
// Create a map to store files by their size (and optionally type)
const fileMap = {};
// Get files to check
let files;
if (folderId) {
const folder = DriveApp.getFolderById(folderId);
files = folder.getFiles();
} else {
files = DriveApp.getFiles();
}
// Process each file
while (files.hasNext()) {
const file = files.next();
// Skip Google Docs, Sheets, etc. as they don't have a fixed size
if (file.getSize() === 0) continue;
const fileSize = file.getSize();
const mimeType = file.getMimeType();
// Create a key based on file size and optionally type
let key = fileSize.toString();
if (considerFileType) {
key += '_' + mimeType;
}
// Add file to the map
if (!fileMap[key]) {
fileMap[key] = [];
}
fileMap[key].push({
id: file.getId(),
name: file.getName(),
size: fileSize,
mimeType: mimeType,
url: file.getUrl(),
dateCreated: file.getDateCreated(),
lastUpdated: file.getLastUpdated()
});
}
// Filter out unique files (groups with only one file)
const duplicates = {};
for (const key in fileMap) {
if (fileMap[key].length > 1) {
duplicates[key] = fileMap[key];
}
}
return duplicates;
}
/**
* Alternative function to check files in a specific folder and its subfolders
*/
function checkDuplicatesInFolder() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Clear the sheet and set up headers
sheet.clear();
sheet.appendRow(["Group", "File Name", "Size", "Type", "File Path", "Date Created", "Last Updated", "URL"]);
sheet.getRange(1, 1, 1, 8).setFontWeight("bold").setBackground("#f3f3f3");
// Collect all files from the folder and subfolders
var fileMap = {};
var rootFolder = DriveApp.getRootFolder(); // Change this to your specific folder if needed
collectFilesFromFolder(rootFolder, fileMap);
// Filter out unique files
const duplicates = {};
for (const key in fileMap) {
if (fileMap[key].length > 1) {
duplicates[key] = fileMap[key];
}
}
// Check if any duplicates were found
if (Object.keys(duplicates).length === 0) {
sheet.appendRow(["No duplicate files found"]);
sheet.autoResizeColumns(1, 8);
return;
}
// Add duplicates to the sheet
addDuplicatesToSheet(duplicates, sheet);
// Auto-resize columns
sheet.autoResizeColumns(1, 8);
}
/**
* Recursively collects files from a folder and its subfolders
*/
function collectFilesFromFolder(folder, fileMap, considerFileType = true) {
// Process files in this folder
var files = folder.getFiles();
while (files.hasNext()) {
const file = files.next();
// Skip Google Docs, Sheets, etc. as they don't have a fixed size
if (file.getSize() === 0) continue;
const fileSize = file.getSize();
const mimeType = file.getMimeType();
// Create a key based on file size and optionally type
let key = fileSize.toString();
if (considerFileType) {
key += '_' + mimeType;
}
// Add file to the map
if (!fileMap[key]) {
fileMap[key] = [];
}
fileMap[key].push({
id: file.getId(),
name: file.getName(),
size: fileSize,
mimeType: mimeType,
url: file.getUrl(),
dateCreated: file.getDateCreated(),
lastUpdated: file.getLastUpdated()
});
}
// Process subfolders
var subfolders = folder.getFolders();
while (subfolders.hasNext()) {
var subfolder = subfolders.next();
collectFilesFromFolder(subfolder, fileMap, considerFileType);
}
}
/**
* Helper function to format file size in a human-readable format
*/
function formatFileSize(bytes) {
if (bytes < 1024) return bytes + " bytes";
else if (bytes < 1048576) return (bytes / 1024).toFixed(2) + " KB";
else if (bytes < 1073741824) return (bytes / 1048576).toFixed(2) + " MB";
else return (bytes / 1073741824).toFixed(2) + " GB";
}
/**
* Creates a new Google Spreadsheet with the duplicate files report
*/
function createDuplicateFilesSpreadsheet() {
const duplicates = findDuplicateFiles(true);
// Create a new spreadsheet
const ss = SpreadsheetApp.create("Duplicate Files Report - " + new Date().toLocaleString());
const sheet = ss.getActiveSheet();
// Set up headers
sheet.appendRow(["Group", "File Name", "Size", "Type", "File Path", "Date Created", "Last Updated", "URL"]);
// Format header row
sheet.getRange(1, 1, 1, 8).setFontWeight("bold").setBackground("#f3f3f3");
// Check if any duplicates were found
if (Object.keys(duplicates).length === 0) {
sheet.appendRow(["No duplicate files found"]);
sheet.autoResizeColumns(1, 8);
return ss.getUrl();
}
// Add duplicates to the sheet
addDuplicatesToSheet(duplicates, sheet);
// Auto-resize columns
sheet.autoResizeColumns(1, 8);
Logger.log(`Spreadsheet created: ${ss.getUrl()}`);
return ss.getUrl();
}
See the result into the spreadsheet:

Posted by
Cătălin George Feștilă
Labels:
2025,
2025 news,
google,
Google Apps Script,
news,
open source,
source code,
tutorial,
tutorials

luni, 17 martie 2025
News : New changes in pluralsight website.
I leran from this website and I tested my skills and is a great tool with certification and training.
Is a little bit expensive for me because I learn a lot of programming, design, game engines and API.
If I had gotten certificates for everything, for how much the exams cost, I would have to be very rich.
The only way to make a correct statement without enormous cost is online tests and the results obtained and the webiste comes with tested area.
The area of learning is:
- IT Ops
- Cloud
- Security
- Project Management
- Data
- Software Development
- Popular Certifications
- Newest
The newest now has Iris witch is a: Jumpstart a new conversation with one of our quick prompts.
See some my tested and learning skills on this website:

Posted by
Cătălin George Feștilă
Labels:
2025,
2025 news,
news,
pluralsight,
tutorial,
tutorials,
video tutorial,
web,
web development

miercuri, 12 martie 2025
News : Cursed Quadratic Equations
... a good video from TheGrayCuber.
Posted by
Cătălin George Feștilă
Labels:
2025,
2025 news,
news,
TheGrayCuber,
tutorial,
tutorials,
video tutorial,
youtube

duminică, 9 februarie 2025
News : Create a NEW feature to Godot (C++) | How to contribute code !
... another video with a good content from
Octodemy - youtube channel.
Posted by
Cătălin George Feștilă
Labels:
2025,
2025 news,
C++,
Godot,
news,
tutorial,
tutorials,
video tutorial,
youtube

marți, 4 februarie 2025
Blender 3D : fix deformation Array of Curve modifier.
Possible bug ...
I noticed after creating an Array with an object and a NurbsPath object in Blender 3D version 4.3.2 and after the classic basic operations aligned, scaled and applied all transformations of these two objects, distortions appear when applying the Curve modifier to the Array object. I do not know the cause; it is possible a bug. It can be solved if you convert the NurbsPath to a new type of Curve object from the main menu Object - Convert - Curve, then applying the Deform Curve modifier will not deform the Array object.

sâmbătă, 11 ianuarie 2025
Blender 3D : How to Extract Marvel Rivals 3D Model and Use in Blender.
For those who are Marvel Rivals fans or study gaming files, here is a useful video tutorial.
Posted by
Cătălin George Feștilă
Labels:
2025,
2D,
3D,
Blender 3D,
design,
graphic,
tutorial,
tutorials,
video tutorial

joi, 2 ianuarie 2025
News : Roblox Studio changes and access places
Roblox comes with new features into Roblox Editor.
One is the the palaces area witch is Private - security reason by team developmen, and you not see this type of scene into default Roblox Studio Editor.
If you want to edit one of this you need to use this way, see this screenshot from the official webpage.

duminică, 29 decembrie 2024
Blender 3D : ... all available nodes !
An old surce code in python for Blender 3D to see available nodes :
import bpy
node_tree = bpy.context.object.active_material.node_tree
location_x = 0
location_y = 0
for type in dir(bpy.types):
real_type = getattr(bpy.types, type)
if issubclass(real_type, bpy.types.ShaderNode):
try:
node = node_tree.nodes.new(type)
node.width = 250
node.location = (location_x, location_y)
location_x += 300
if location_x > 3000:
location_x = 0
location_y -= 600
except:
pass
Posted by
Cătălin George Feștilă
Labels:
2024,
2D,
3D,
Blender 3D,
design,
graphic,
graphics,
open source,
source code,
tutorial,
tutorials,
video tutorial,
youtube

duminică, 1 decembrie 2024
Inkscape : watercolor effect on inkscape version 1.4 .
... the watercolor effect in inkscape can be found in the main menu : Filters - Textures - Watercolor.
Just draw a shape an then select the filter.
Use Filters - Filter Editor ... to edit the filter, see this image:

joi, 21 noiembrie 2024
News : ... test with the Tascade agent using custom data.
Today I tried to build an agent in taskade using my data.
I wanted to see if I could create SVG files using the data I entered.
I used a link and this PDF file as agent training data.
After training, I asked them to create an SVG file for me.
Here is the result:


Posted by
Cătălin George Feștilă
Labels:
2024,
2024 news,
artificial intelligence,
news,
taskade,
tutorial,
tutorials

miercuri, 20 noiembrie 2024
FASM : simple bootloader source code with menu .
This is the source code with a boot menu and can be tested with qemu emulator.
I need to use the Sonet 3.5 artificial inteligence to search infos and make this source code better, but I learn assembly in the past.
The compile commands of the source code:
mythcat@localhost:~/fasm$ ./fasm.x64
flat assembler version 1.73.32
...
mythcat@localhost:~/fasm$ ./fasm.x64 bootloader.asm bootloader.bin
flat assembler version 1.73.32 (16384 kilobytes memory, x64)
2 passes, 512 bytes.
The test with qemu tool:
mythcat@localhost:~/fasm$ qemu-system-x86_64 -drive format=raw,file=bootloader.bin
Let's see the source code:
; Simple Bootloader with Menu for QEMU
; Written in FASM
org 0x7C00
format binary
start:
; Clear the screen
xor ax, ax
mov ds, ax
mov es, ax
mov ah, 0x0
int 0x10
; Display the menu
call display_menu
main_loop:
; Wait for key press
call wait_for_input
; Check key pressed
cmp al, '1'
je handle_option1
cmp al, '2'
je handle_option2
; Invalid option, restart
jmp main_loop
handle_option1:
; Option 1 selected
mov si, option1_msg
call display_message
call wait_for_input ; Wait for any key
jmp start ; Return to menu
handle_option2:
; Option 2 selected
mov si, option2_msg
call display_message
call wait_for_input ; Wait for any key
jmp start ; Return to menu
display_menu:
; Display the menu
mov si, menu
call print_string
ret
wait_for_input:
; Wait for a key press
xor ax, ax
int 0x16
ret
print_string:
; Print string at DS:SI
mov ah, 0x0E
@@:
lodsb
test al, al
jz @f
int 0x10
jmp @b
@@:
ret
display_message:
; Print message at DS:SI
call print_string
ret
menu db 'Simple Bootloader Menu', 13, 10
db '1. Option 1', 13, 10
db '2. Option 2', 13, 10
db 'Select an option: ', 0
option1_msg db 13, 10, 'You selected Option 1!', 13, 10
db 'Press any key to return to menu...', 13, 10, 0
option2_msg db 13, 10, 'You selected Option 2!', 13, 10
db 'Press any key to return to menu...', 13, 10, 0
rb 510-($-$$)
db 0x55, 0xAA
This is the result:

Posted by
Cătălin George Feștilă
Labels:
2024,
artificial intelligence,
assembly,
design,
FASM,
graphic,
graphics,
tutorial,
tutorials

duminică, 10 noiembrie 2024
Blender 3D : how to model this Snowflake Decor in blender _ blender modeling
... another video tutorial with a snowflake by CG VOICE !!!
Posted by
Cătălin George Feștilă
Labels:
2024,
2D,
3D,
Blender 3D,
design,
graphic,
graphics,
tutorial,
tutorials,
video tutorial,
youtube

sâmbătă, 26 octombrie 2024
Breaking the Windows Clipboard
... this will help you to understand how clipboards is designed to work, from the ThioJoe - youtube channel:
News : many videos from Marvelous Designer.
... many videos with features from the Marvelous Designer - youtube channel.
Posted by
Cătălin George Feștilă
Labels:
2024,
2024 news,
Marvelous,
Marvelous Designer,
news,
tutorial,
tutorials,
video tutorial,
youtube

joi, 3 octombrie 2024
Pydroid 3 android application for python ...
The Pydroid3 android application is the best way to test and run python scripts.
I install python packages with the install option, the pip command on terminal comes with errors for same python package.
I used the free version but if you pay for monthly or lifetime then you can have more features.
Same team come with android applications to have add more features, see these IIEC team appplicatons.




Abonați-vă la:
Postări (Atom)