07 February, 2024
What do you actually do with Laravel?
Programing Coderfunda
February 07, 2024
No comments
I work for a company that have both shared and dedicated servers for their clients, and we mostly create standard website or intranet sites for comparitively low traffic audiences. So the projects usually follow a classic style (db-> front end or external api -> front end) with no need for these extras. The most I've done is a TALL stack plus Filament. And these projects are pretty solid - they're fast, efficient (more efficient recently thanks to better solutions such as Livewire and ES module-bsased javascript). But I feel like I'm out of date because I generally don't understand a lot of these other things, and I don't know when I'd ever need to use them over what I currently work with.
So my question is, what types of projects are you all working on? How advanced are these projects? Do you eveer do "classic" projects anymore?
Am I in the minority, building classic projects?
How can I improve my projects if what I'm doing already works well? I feel like I'm getting left behind a bit.
Edit: Thanks for the replies. Interesting to see all the different points of view. I'm glad I'm not the only one. submitted by /u/No-Echo-8927
[link] [comments]
06 February, 2024
Pass a button variable to controller codeigner 4
Programing Coderfunda
February 06, 2024
No comments
here is my code :
`id") . '" data-quotation="' . $row->id_quotation . '">Edit`
my ajax :
`$(document).on('click', '.edit', function() {
var quotation = $(this).attr('data-quotation');
$.ajax({
type: 'POST',
dataType: 'json',
url: baseurl + 'purchase/senddata/' + quotation,
data: {
'quotation': quotation
},
success: function(data) {
window.location = url;
}.then(function() {
})
});
});
`
this my Controller :
public function edit_data($id)
{
$id_quotation = $this->request->getVar('quotation');
$data = [
'title' => 'Edit Purchase Order',
'invoice' => $this->purchases->getPurchase($id),
'dataQuotation' => $this->purchases->getQuotationById($id_quotation)
];
dd($id_quotation);
return view('purchase-order/edit-data', $data);
}
and this my routes :
$routes-\>post('purchase/senddata/(:segment)', 'Purchase::edit_data/$1');
on my controller there I do a var_dump but the value is always null
from the way I tried to do it above can someone be kind enough to tell me where I made a mistake in my code
Search Through exel file using a search html
Programing Coderfunda
February 06, 2024
No comments
/*
Use css to set the display to none first
*/
let allClientIDRows = document.querySelectorAll("ClientID-row > a");
for(let i = 0; i < allClientIDRows.length; i++){
let row = allClientIDRows[i]
let ClientID = row.getElementsByClassName("ClientID")[0]
if(allClientIDRows[i].textContent.trim() == userInput.trim()){
//You can also convert to lowercase for more accurate result
allClientIDRows[i].style.display = "inline";
}
}
}
This is the function that applys the filter to allow you to search and show what you search for and not the entire form.
i am only looking to show the searched item and not the entire spreadsheet
Data
Type in your ID
No ID FOUND
Loading
Failed to get data. Please refresh
function setErrorDisplay(loaderElm, allClientIDsElm, errorMessageElm){
loaderElm.style.display = "none"
allClientIDsElm.style.display = "none"
errorMessageElm.style.display = "block"
}
let allClientIDsElm = document.getElementById("allClientIDs")
let loaderElm = document.getElementById("loader")
let errorMessageElm = document.getElementById("errorMessage")
fetch("
{
https://api.apispreadsheets.com/data/").then(res=>{
/> if (res.status === 200){
//sucess
res.json().then(data=>{
const yourData = data["data"]
for(let i = 0; i < yourData.length; i++){
let rowInfo = yourData[i]
let rowInfoDiv = document.createElement("div")
rowInfoDiv.classList.add("ClientID-row")
let rowClientID = document.createElement("h4")
let rowClientIDNode = document.createTextNode(rowInfo["ClientID"])
rowClientID.appendChild(rowClientIDNode)
rowClientID.classList.add("ClientID")
let rowRA = document.createElement("p")
let rowRANode = document.createTextNode(rowInfo["RA"])
rowRA.appendChild(rowRANode)
rowRA.classList.add("RA")
rowInfoDiv.appendChild(rowClientID)
rowInfoDiv.appendChild(rowRA)
allClientIDsElm.appendChild(rowInfoDiv)
}
loaderElm.style.display = "none"
allClientIDsElm.style.display = "block"
errorMessageElm.style.display = "none"
}).catch(err => {
setErrorDisplay(loaderElm, allClientIDsElm, errorMessageElm)
})
}
else{
setErrorDisplay(loaderElm, allClientIDsElm, errorMessageElm)
}
}).catch(err =>{
setErrorDisplay(loaderElm, allClientIDsElm, errorMessageElm)
})
This is the HTML part that runs the html search part
For some reason when i run with the function its still showing all the spreadsheet. What i am trying to do is How to make a search list in which element is only shown when user search for its exact value
when you type it shows you the result but the form will be empty untiil you type
i tryed with a search function with a filter but it shows the entire spreadsheet. Maybe i am doing something wrong or messed up somewhere in the code.
the applyfilter isnt working for me maybe there is another way i can do this
Resources covering modern non-cloud (Laravel) deployment? Best practices for deploying updates, serving new features to beta-testers, reliable backups, security, etc.
Programing Coderfunda
February 06, 2024
No comments
my background building Laravel apps is working on comparably small projects for a few clients that just needed more custom functionality than WordPress could offer and a handful of personal one-off projects for organizations I volunteer for. Mostly apps that you build and not touch anymore for long stretches of time.
Recently, someone approached me with a very interesting offer to develop a more complex application they'd use internally. Laravel seems suitable as no mobile app is required. Even down the road a progressive web app would totally suffice if necessary at all. Their business is on the smaller side of what can be considered a SMB, I'd estimate
My package Laravel, Lara Hierarchial Collections has been updated to support Laravel 11 - package to performantly convert a flat collection of hierarchical data to a nested collection for things like Org Charts.
Programing Coderfunda
February 06, 2024
No comments
Laravel Purity vs Spatie's laravel-query-builder?
Programing Coderfunda
February 06, 2024
No comments
Is there anyone who has tried both packages or prefers one over another for any good reason? submitted by /u/DigitalEntrepreneur_
[link] [comments]
05 February, 2024
How to know IP of the request made in python using amazon api gateway
Programing Coderfunda
February 05, 2024
No comments
The code I tried:
import requests
import xml.etree.ElementTree as ET
from requests_ip_rotator import ApiGateway, EXTRA_REGIONS
# Define Class
class QuestionsExplorer:
def GetQuestions(self, questionType, userInput, countryCode):
questionResults = []
# Build Google Search Query
searchQuery = questionType + " " + userInput + " "
# API Call
googleSearchUrl = "
http://google.com/complete/search?output=toolbar&gl=" + \
countryCode + "&q=" + searchQuery
# Call The URL and Read Data
result = session.get(googleSearchUrl)
tree = ET.ElementTree(ET.fromstring(result.content))
root = tree.getroot()
for suggestion in root.findall('CompleteSuggestion'):
question = suggestion.find('suggestion').attrib.get('data')
questionResults.append(question)
return questionResults
gateway = ApiGateway(site="
http://google.com",">
http://google.com", regions=["us-east-1"], access_key_id = "AWS_ACCESS_KEY_ID", access_key_secret = "AWS_SECRET_ACCESS_KEY")
gateway.start()
session = requests.Session()
session.mount("
http://google.com",">
http://google.com", gateway)
# use a Keyword for testing
userInput = "email marketing"
# Create Object of the QuestionsExplorer Class
qObj = QuestionsExplorer()
print("Keyword ideas about 'is'")
# Call The Method and pass the parameters
questions = qObj.GetQuestions("is", userInput, "us")
# Loop over the list and pring the questions
for result in questions:
print(result)
print("Keyword ideas about 'can'")
questions = qObj.GetQuestions("can", userInput, "us")
# Loop over the list and pring the questions
for result in questions:
print(result)
print("Done")
gateway.shutdown()
FindQt5.cmake in CMAKE_MODULE_PATH
Programing Coderfunda
February 05, 2024
No comments
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt5 COMPONENTS Multimedia REQUIRED)
add_executable(MyMp3Player main.cpp mainwindow.cpp)
target_link_libraries(MyMp3Player Qt5::Multimedia)
How do i tweak my YAML file so that it builds but does not deploy? I want to set up a PR Build pipeline to test build each PR
Programing Coderfunda
February 05, 2024
No comments
I'm hoping to create a new pipeline that triggers when there is a PR to the "main" branch, and it builds the branch in the PR to see if there are any build issues before we merge it with the "main" branch. I believe the name for this is Build Validation, but I'm stuck with creating the pipeline. Or is this right and I need to handle this with settings in the build validation setup?
I tried to update the YAML so it only runs when a PR is created, I think that part is okay. But I can't seem to figure out how to cancel the deployment part. The changes I make keep breaking in the build process of my existing normal pipeline.
name: Azure Static Web Apps CI/CD
pr:
branches:
include:
- main
trigger: none
jobs:
- job: build_and_deploy_job
displayName: Build and Deploy Job
condition: or(eq(variables['Build.Reason'], 'Manual'),or(eq(variables['Build.Reason'], 'PullRequest'),eq(variables['Build.Reason'], 'IndividualCI')))
pool:
vmImage: ubuntu-latest
variables:
- group: Azure-Static-Web-Apps
steps:
- checkout: self
submodules: true
- task: AzureStaticWebApp@0
inputs:
azure_static_web_apps_api_token: $(AZURE_STATIC_WEB_APPS)
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit:
https://aka.ms/swaworkflowconfig
/> app_location: "/" # App source code path
api_location: "" # Api source code path - optional
output_location: "" # Built app content directory - optional
env:
NEXT_PUBLIC_OPENAI_KEY: $(NEXT_PUBLIC_OPENAI_KEY)
###### End of Repository/Build Configurations ######
Laravel Reverb: First-party WebSocket server
Programing Coderfunda
February 05, 2024
No comments
Best practice for API versioning
Programing Coderfunda
February 05, 2024
No comments
04 February, 2024
How to get 30 days prior to current date?
Programing Coderfunda
February 04, 2024
No comments
var today = new Date(),
dd = today.getDate(),
mm = today.getMonth(),
yyyy = today.getFullYear(),
month = ["January", "February", "March",
"April", "May", "June", "July", "August",
"September", "October" "November", "December"],
startdate = month[mm] + ", " + yyyy.toString();
The end date would be something like var enddate = startdate - 30; Obviously this won't work.
So if the current date is December 30, 2011 I'd want the start date to read December 1, 2011.
EDIT: My question was answered... sort of. Date.today(); and Date.today().add(-30); work but I need the date in the format of January 13, 2012. Not Fri Jan 13 2012 10:48:56 GMT -055 (EST). Any help?
MORE EDIT: As of this writing it's 2018. Just use Moment.js. It's the best.
Correctly displaying parsed MJML in a Laravel mailable class
Programing Coderfunda
February 04, 2024
No comments
public function content()
{
$preview_text = 'Your Test Drive Has Been Scheduled!';
$lead = $this->lead;
$html = Mjml::new()->toHtml(view("emails.lead-created", compact('lead', 'preview_text'))->render());
return new Content(
view: $html,
);
}
The MJML correctly gets parsed as html. How can I pass it to my new Content class to display the email. The way I'm doing above is erroring out.
Error: View [the html strings that gets produced] not found.
Typescript eslint dont not recognize object in array
Programing Coderfunda
February 04, 2024
No comments
I show code, and next try to explain the error.
types.ts
export type TSettingsIputsState = {
personal: {
label: string;
name: keyof TApiResponseProfile;
value: string;
activeEdit: boolean;
onActionButtonClick: () => void;
}[];
display: boolean;
};
component.tsx
const [profileInputs, setProfileInputs] = useState();
useEffect(() => {
const setFormData = async () => {
if (!profileData) return;
const inputs = await inputsItems();
setProfileInputs({
personal: [
...inputs.personalSettings.map(({ label, name }) => ({
label,
name,
activeEdit: false,
value: profileData[name],
onActionButtonClick: () => console.log("asd"),
})),
],
display: false,
});
};
setFormData();
}, [profileData]);
This code give me no error from ts or eslint, but when i delete name and add dummy value, the ts dont suggest me to add name, and dont not recognize that dummy shouldn't be there.
Another error is when i change onActionButtonClick: (testing: string) => void in type there is no error when no change in onActionButtonClick: () => console.log("asd")
Please see image on link belowa
Why no error? doesn't suggest 'name'? IMAGE
https://i.stack.imgur.com/ppIAv.png
/>
tsconfig
{
"compilerOptions": {
"baseUrl": ".",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": false,
"strict": true,
"noEmit": true,
"target": "ES2015",
"esModuleInterop": true,
"module": "esnext",
"strictPropertyInitialization": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"preserveConstEnums": true,
"sourceMap": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"noImplicitAny": false,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/layouts/*": ["./layouts/*"],
"@/complex/*": ["./components/complex/*"],
"@/parts/*": ["./components/parts/*"],
"@/inputs/*": ["./components/inputs/*"],
"@/forms/*": ["./components/forms/*"],
"@/hooks/*": ["./hooks/*"],
"@/skeletons/*": ["./components/skeletons/*"],
"@/utils/*": ["./utils/*"],
"@/middlewares/*": ["./middlewares/*"],
"@/providers/*": ["./providers/*"],
"@/types/*": ["./types/*"],
"@/apiTypes/*": ["./app/api/_types/*"],
"@/yupSchema/*": ["./yupSchema/*"],
"@/apiYupSchema/*": ["./app/api/_yupSchema/*"],
"@/dbPrisma": ["./utils/db.ts"],
"@/formsInitialValues/*": ["./formsInitialValues/*"],
"@/wretch": ["./utils/wretch"]
}
},
"include": ["next-env.d.ts", "types/**/*.ts", "app/_types/**/*.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}
eslintrc.json
{
"env": {
"browser": true,
"es2021": true,
"jest": true
},
"extends": [
"airbnb",
"airbnb-typescript",
"eslint:recommended",
"plugin:import/typescript",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended",
"plugin:@tanstack/eslint-plugin-query/recommended"
],
"globals": {
"__dirname": true
},
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": "latest",
"sourceType": "module",
"project": "./tsconfig.json"
},
"plugins": [
"react",
"react-hooks",
"@typescript-eslint",
"prettier",
"@kalimahapps/eslint-plugin-tailwind"
],
"rules": {
"react/react-in-jsx-scope": ["off"],
"no-unused-vars": ["off"],
"react/jsx-uses-react": ["off"],
"react/jsx-props-no-spreading": ["off"],
"react/function-component-definition": ["off"],
"react/no-unescaped-entities": ["off"],
"react-hooks/rules-of-hooks": ["error"],
"react-hooks/exhaustive-deps": ["warn"],
"react/no-array-index-key": ["off"],
"arrow-body-style": ["error", "as-needed"],
"import/extensions": ["off"],
"import/prefer-default-export": ["off"],
"import/no-extraneous-dependencies": ["off"],
"@kalimahapps/tailwind/sort": ["warn"],
"@kalimahapps/tailwind/multiline": ["warn"],
"@typescript-eslint/no-throw-literal": ["off"],
"jsx-a11y/click-events-have-key-events": ["off"],
"jsx-a11y/no-static-element-interactions": ["off"],
"no-return-await": ["off"],
"@typescript-eslint/return-await": ["off"],
"react/button-has-type": [
"off",
{
"button": true,
"submit": true,
"reset": true
}
],
"padding-line-between-statements": [
"error",
{ "blankLine": "always", "prev": "*", "next": "return" }
]
}
}
P.S.
It's only happend when personal is array, but the error with function parameter check persist anyway.
When i do this, and testing, typescript sugges ok, but not error on function parameter
personal: {
label: string;
name: keyof TApiResponseProfile;
value: string;
activeEdit: boolean;
onActionButtonClick: (testing: string) => void;
};
Can you guys/girls cam check if tsconfig or eslint have some bug?
Ty alot for your time
Weekly /r/Laravel Help Thread
Programing Coderfunda
February 04, 2024
No comments
* What steps have you taken so far?
* What have you tried from the documentation?
* Did you provide any error messages you are getting?
* Are you able to provide instructions to replicate the issue?
* Did you provide a code example?
* Please don't post a screenshot of your code. Use the code block in the Reddit text editor and ensure it's formatted correctly.
For more immediate support, you can ask in the official Laravel Discord.
Thanks and welcome to the /r/Laravel community! submitted by /u/AutoModerator
[link] [comments]
Java Thread: Real world Application Example
Programing Coderfunda
February 04, 2024
No comments
Consider the following scenario:
I have a list of integers. I need to print all the values from the list. Can it be done using threads concept where i have multiple threads running on each item in the list and where each thread is used to print out a value rather than one thread printing all the values? I am not trying to modify any value in the list.
03 February, 2024
"I'm running a cgo application in an Android environment, and it crashes at _cgo_topofstack. How can I troubleshoot this issue?"
Programing Coderfunda
February 03, 2024
No comments
How can I troubleshoot this issue?"
signal 11 (SIGSEGV), code -6 (SI_TKILL), fault addr --------
r0 00000000 r1 000028f3 r2 0000000b r3 00000008
r4 00002829 r5 92589500 r6 92589548 r7 0000010c
r8 00000007 r9 f2dda124 r10 92589400 r11 bc3218ca
ip bf21e9cc sp eeb7fc00 lr bb39d2f8 pc bb3c07d8
backtrace:
#00 pc 0049a7d8 /data/app/~~RaMB3k_xm7v41sDHB5G52Q==/com.tencent.supercar-Qe2_Smo7BnMcTvBrMSmgRA==/lib/arm/libtskm.so
enter image description here
# ./arm-linux-androideabi-addr2line result:
_cgo_topofstack
??:?
Pyomo error: No value for uninitialized NumericValue object
Programing Coderfunda
February 03, 2024
No comments
`# Import of the pyomo module
from pyomo.environ import *
# Creation of a Concrete Model
model = ConcreteModel()
## Define sets ##
# Sets
model.I = RangeSet(1, N, doc='Farms')
model.J = RangeSet(1, n_max, doc='Turbines')
model.T = RangeSet(1, T, doc='Time horizon')
model.T_minus_1 = RangeSet(1, T-1, doc='Time horizon up to T-1')
model.R = RangeSet(1, R, doc='Maintenance Crews')
## Define variables ##
# Variables
model.Xpm_ijt = Var(model.I, model.J, model.T, domain=Binary, doc='Binary variable for shipment decision')
model.Xcm_ijt = Var(model.I, model.J, model.T, domain=Binary, doc='Binary variable for shipment decision')
model.y_rt = Var(model.R, model.T, domain=Binary, doc='Binary variable for shipment decision')
model.z_rit = Var(model.R, model.I, model.T, domain=Binary, doc='Binary variable for shipment decision')
model.f_ijt = Var(model.I, model.J, model.T, domain=Binary, doc='Binary variable for shipment decision')
model.a_ijt = Var(model.I, model.J, model.T, domain=NonNegativeIntegers, bounds=(0, H*10), doc='Operating time of turbine j at farm i at time t')
#Constraints
#Constraint 1
def init_a_ijt_rule(model, i, j, t):
if t == 1 and i == 1:
if j == 1:
return 0
elif j == 2:
return 0
elif j == 3:
return 10
elif j == 4:
return 20
elif j == 5:
return 23
elif t == 1 and i == 2:
if j == 1:
return 12
elif j == 2:
return 20
elif j == 3:
return 34
else:
return 0
model.constraint_a_ijt = Var(model.I, model.J, model.T, initialize=init_a_ijt_rule, doc='Operating time of turbine j at farm i at time t')
#Constraint 2
def operating_time_rule(model, i, j, t):
if model.Xpm_ijt[i, j, t].value == 1 or model.Xcm_ijt[i, j, t].value == 1:
return model.a_ijt[i, j, t+1] == 0
else:
return model.a_ijt[i, j, t+1] == model.a_ijt[i, j, t] + 1
model.constraint_operating_time = Constraint(model.I, model.J, model.T_minus_1, rule=operating_time_rule)
#Constraint 3
def PM_rule(model, i, j, t):
if value(model.a_ijt[i, j, t]) = H:
return model.Xpm_ijt[i, j, t] == 0
else:
return Constraint.Skip
model.constraint_Xpm = Constraint(model.I, model.J, model.T, rule=PM_rule)`
Until the 3rd constraint everything runs fine but I get this error when I run the PM_rule:
ERROR: evaluating object as numeric value: a_ijt[1,1,1] (object: ) No value for uninitialized NumericValue object a_ijt[1,1,1] ERROR: Rule failed when generating expression for Constraint constraint_Xpm with index (1, 1, 1): ValueError: No value for uninitialized NumericValue object a_ijt[1,1,1] ERROR: Constructing component 'constraint_Xpm' from data=None failed: ValueError: No value for uninitialized NumericValue object a_ijt[1,1,1]
I'm a new Pyomo user, so any help is welcome ! Thank you :)
Transform a blurhash to grayscale
Programing Coderfunda
February 03, 2024
No comments
I need it because I use blurhashes as image holders, but in a part of my application I need to display images in black and white. Thanks in advance
---
EDIT
I managed to arrive at a code like this. the problem is that the blurhashes seem stretched and deformed compared to the originals
const WIDTH = 30;
const ASPECT_RATIO = validationConfig.media.profilePicture.aspectRatio;
const HEIGHT = Math.floor(WIDTH / ASPECT_RATIO);
export function convertBlurhashToGreyscale(blurhash: string) {
const pixels = decode(blurhash, WIDTH, HEIGHT);
for (let i = 0; i < pixels.length; i += 4) {
const grayValue = Math.round(
(pixels[i] + pixels[i + 1] + pixels[i + 2]) / 3
);
pixels[i] = grayValue;
pixels[i + 1] = grayValue;
pixels[i + 2] = grayValue;
pixels[i + 3] = 255; // Imposta l'opacità a 255
}
const newHeight = Math.floor(WIDTH / ASPECT_RATIO);
return encode(pixels, WIDTH, newHeight, 4, 3);
}
Laravel Breeze with PrimeVue
Programing Coderfunda
February 03, 2024
No comments
I'm considering abstracting this into a composer package, but decided to see if there was any interest in the idea first. Perhaps a PrimeReact version as well?
You check it out here:
https://github.com/connorabbas/primevue-auth-starter
Thanks! submitted by /u/DevDrJinx
[link] [comments]
add values to the array object key by clicking the button with this value react
Programing Coderfunda
February 03, 2024
No comments
const [Fields, setFields] = useState([
{ value: null, current: true },
{ value: null, current: false }
]);
value - is the key I want to add values to when the button is clicked
current - these keys store the state of the selected field when the field is clicked on
const [Fields, setFields] = useState([
{ value: null, current: true },
{ value: null, current: false }
]);
const GetSymbol = (event) => {
const symbol = event.currentTarget.dataset.value;
return symbol;
}
const InsertSymbol = (curField) => {
curField = GetSymbol;
return curField;
}
GetSymbol(event)} data-value="A">A
GetSymbol(event)} data-value="B">B
GetSymbol(event)} data-value="C">C
{Fields.map((field, i) => {
return (
{
setFields((oldArr) => {
let newArr = oldArr.map((item, index) => {
return {
...item,
current: index === i ? true : false,
};
});
return newArr;
});
}}
>
InsertSymbol(field.value)
);
})}
if the key current is true in the current field, then you must populate the values in field.value for that field.
I.e. If you click on A and B buttons, the value of field.value will be AB.
In my code, the functions GetSymbol and InsertSymbol are incorrect.
Please help me with this!
02 February, 2024
How to target the Nth element in a webcomponent shadowDOM with CSS ::part()
Programing Coderfunda
February 02, 2024
No comments
MathML's msqrt not tall enough for fraction
Programing Coderfunda
February 02, 2024
No comments
A
B
But the results show the sqrt only over "A". I want it to be taller so it is over A and B.
I tried playing around with changing the css file, like margins and padding, but nothing seemed to work.
What's a better solution to tackle this problem - export / clone and restore for complex nested relations
Programing Coderfunda
February 02, 2024
No comments
Allow me to summarize. Our company provides an architecture design tool that, to simplify, allows customers to create projects, which contain architectures, which contain elements, interfaces, which contain requirements, tests, which contain.. etc etc. Lots and lots of nested relations. A project, after a few months usage, can easily contain thousands of records spanning two dozen tables, representing one-to-one, one-to-many and many-to-many relationships.
Currently all tables use an auto-increment numerical ids.. your standard stuff. Most tables also contain a project_id table which itself is just an integer.
Enter feature #1. The ability to export your project with all of its nested relations. This was simply enough.. we just load our project and recursively load all of its relationships, and then we just dump that whole thing as an array to a json file. This saves a full copy of the project with all of its relations represented by the values of thousands of primary keys at the time of export. Easy.
Enter feature #2. The ability to clone the above extremely complex project. Currently, we export the above, and then we have this complex script that iterates over every level of relation from the json dump and creates a new copy of everything. As it's doing this, it's storing all the reference primary ids from the json dump, and creating a relation map of sorts that it then uses to re-attach all the relations but using the new ids that are being created thanks to the auto-increment ids of the new copies.
Read that again if you must.. this one is a bit of a nightmare, this is not a piece of code I am happy with right now and is the constant source of issues. Before I describe what I think is a better way.. let's talk about the last feature.
Enter feature #3, the ability to restore a previous import (you can also think of these imports as a versioning system but not just for a single model but for a huge project). When you restore a project, you're overwriting the existing project and you must end up with the full working project with its thousand nested relations.
In a way, both cloning and restoring results in the same project state, but in the former case you end up with two projects where the cloned project will of likely diverge from the original, and in the case of restoring you still only have just the one project. I haven't done the restore feature yet.
Keeping in mind that the same database houses hundreds of these complex projects.. and each table having tens of thousands of records with different numerical ids that belong to different projects.
So restoring a project with the current system.. for example taking a project which at the time of export had 1000 nested records and now the current project has 3000, but after restoring we need to be back to 1000 (as an example).. this operation is quite a tricky one when using auto incrementing ids.
So voila.. this is the problem I'm currently facing. And I was just thinking aloud tonight of how to do this in a much better way.. and I'd love to hear all your thoughts about it before I talk about my new idea.
Really appreciate your thoughts actually : ) I don't come to Reddit often for coding problems but this one is a bigger task that's been on my mind a lot.
Oh and btw of course I'm using Laravel 10 here.
The first thought I had is that this could be dealt with with a NoSQL approach. But I kind of dread NoSQL and no way do i want to suggest that we move away from MySQL to something like Mongo at this time so we must stick to using a relational DB. I also don't want to use a different DB for each project. I am already dealing with 40+tables and having hundreds of dbs to manage would be a big nope.
The second thought I had is: use composite primary keys everywhere. Each project has a unique hash for a primary key and then everything else that is attached to it has a primary key that makes use of the project's unique key. Ignoring the pains and caveats that come with using composite primary keys.. this appears to make everything waaaaay easier. The export feature is the same as before. Cloning just involves creating a new project hash and then replacing it everywhere before inserting every records as is.. no need to relink things it just works and we just need to change one key.
And same for restoring.. we just wipe absolutely every record that contains the project key that's being restored and then we just restore the dump as-is.
Am I missing something or is this a waaay better solution?
The caveats with composite keys is that it can be less performant when making queries and it requires a lot of refactoring. Sometimes dependencies don't play well with composite keys.
I can't really think of another approach at the moment. What do you think about the composite key approach?
if you read this far.. I hope you're finding this mildly interesting! Thank you for making it this far and thanks a lot should you decide to share your wisdom developer to developer ;-)
Kind regards! submitted by /u/spar_x
[link] [comments]
Question regarding arrays and sequences in Java
Programing Coderfunda
February 02, 2024
No comments
This is the code that's relevant:
*
import java.util.function.Consumer;
/**
A Robot implemented with a dynamic array data structure
and providing "Sequence" capabilities. This is a homework assignment
inspired by Main: "Data Structures and Other Objects in Java" Chapter 3
(Sequence ADT). */
*
public class DynamicArrayPartSeq implements Robot, Cloneable { private static final int INITIAL_CAPACITY = 1;
// Data structure: Do not add or subtract from this: private String[] functions; private Part[] parts; private int size; private String function; private int currentIndex;
private static Consumer reporter = (s) -> System.out.println ("Invariant error: "+ s);
private boolean report(String error) { reporter.accept(error); return false; }
private boolean wellFormed() { // XXX: The invariant should be adjusted: no holes allowed // and it needs to check currentIndex and function
// 1. The "functions" and "parts" arrays must not be null.
// TODO
if (functions == null) {
return report("functions cant be null");
}
if (parts == null) {
return report("parts cant be null");
}
// 2. The "functions" and "parts" arrays are always the same length.
// TODO
if (functions.length != parts.length) {
return report ("functions and parts arrays should always bt the same length");
}
// 3. The size cannot be negative or greater than the length of the arrays.
// TODO
if (size < 0) {
return report ("size cant be negative");
}
if (size > functions.length) {
return report ("size can't be greater than functions length");
}
if (size > parts.length) {
return report ("size can't be greater than parts length");
}
// 4. None of the first “size” elements of either array can be null. (ie. no holes)
// TODO
if (size == 0) {
return report("first 'size' elements of either array cant be null");
}
// 5. The current index cannot be negative or greater than the size.
// TODO
if (currentIndex < 0) {
return report ("index cant be negative");
}
if (currentIndex > size) {
return report ("index cant be greater than the size");
}
// 6. If the function is not null and the current index is less than the size, then the
// function array must agree with the field at the current index.
// TODO
if (function != null && currentIndex < size) {
}
// If no problems discovered, return true
return true; }
I wrote out the first if regarding to check that the function isn't null and the current index is less than size. The second comment "function array must agree with the field at the current index" is throwing me off. I tried writing it as a second if statement inside the first, but I'm unsure on what to insert as the conditions.
A simple statistic tool for Laravel apps
Programing Coderfunda
February 02, 2024
No comments
a problem that I often face, when using analytic tools like Google Analytics oder Fathom Analytics is that they mostly show you data like visits, views, and page impressions. Everything beyond that, you need to integrate manually. That's why I started working on SimpleStats; it gives you KPIs like Reg, DAU, ARPU, ROI and much more out of the box, with a very simple installation!
The tool is not yet ready to launch and I don't know if anybody is interested in such a thing, but all tools I found out there, seem far to complicated to setup for me.
🚀 All you will need to do to get SimpleStats up and running is: Install a composer package, adjust the config to your needs, create an account, and add the token to your env file. Congrats, you're ready to analyze your campaigns and users!
📈 Here are a few of the KPIs that the tool provides: Registrations, Daily Active Users, New Active Paying Users, Average Revenue per User, Paying User, Revenue and much more. Everything filterable by date and UTMs!
🌟 Since the statistics tool and the composer client package are tailored precisely to Laravel, they can collect very interesting and important data without any additional complexity for you as the integrator of the package.
💻 Even though the composer client package is dedicated to Laravel, the API basically works with every client! So if you'd like to use the tool, even if you're not using Laravel, just trigger the API requests manually.
📍 Since the tool by default collects UTMs and Referrers for you and connects it with your users and their payments, it's super easy to see which of your marketing activities leads to revenue. You can simply analyze the ROI of your campaigns from the dashboard!
🛡️ We are fully committed to privacy compliance! No cookies are required or stored, ensuring your data remains confidential. You can rely on SimpleStats to respect your privacy and guarantee that your data will never be shared.
🏢 Collaborate by creating a team, inviting your co-workers to your projects, and assigning permissions to them. Each team is separated by tenancy, ensuring highly secure and robust data integration!
🎁 There will always be a free plan! If your business grows, you can support us with by subscribing. We would love to help you analyzing your campaigns. No need to enter credit card information at the registration.
📊 Feel free to checkout the current demo and hit that notify button to not miss the app launch:
https://simplestats.io
Thanks for reading.
I would love to here your feedback! submitted by /u/Nodohx
[link] [comments]
01 February, 2024
Function is not running as expected [duplicate]
Programing Coderfunda
February 01, 2024
No comments
function getComputerChoice() {
return rock || paper || scissors, Math.floor(Math.random() * 3);
let rock = 0
let paper = 1
let scissors = 2
if (0) {
return "rock"
} else if (1) {
return "paper"
} else {
return "scissors"
}
}
I tried what I included above and I expected the log to bring up either rock, paper, or scissors but it's only bringing up the random number! I tried moving the variables to the beginning of the code but that made no difference in the results.
Why insertMany does not create ObjectIds in mongoose?
Programing Coderfunda
February 01, 2024
No comments
When I use insertMany all documents _id fields are strings instead of ObjectId. However when I use create and pass an array it works fine but instead of one query it performs separate query for each item of the array.
As it is obvious as the array grows it would be critical problem.
How can I use insertMany with the fields of type ObjectId instead of string?
PHP 8.3 Performance Improvement with Laravel
Programing Coderfunda
February 01, 2024
No comments
https://kinsta.com/blog/php-benchmarks/ submitted by /u/ejunker
[link] [comments]

