HNHacker News
TopNewBestAskShowJobs

george_ciobanu

220 karma · joined December 6, 2010

submissionscomments
george_ciobanu··on Show HN: Codex context bloat? 87% avg reduction on SWE-bench Verified traces
the proxy uses a cheap, small model (like gpt-5.4-mini by default) behind the scenes to save tokens on the expensive main model.

Because the proxy has a little bit of overhead per turn, the break-even point depends entirely on session length.

Short sessions (e.g., 2 rounds): The proxy's overhead might actually cost you more than you save.

Long sessions (e.g., 69 to 190 rounds): The token savings on the main model are massive and completely dwarf the small model's overhead.

It's not a universal win for quick, one-off queries, but the math becomes highly favorable on long, complex debugging sessions.

george_ciobanu··on Show HN: Claude/Gemini/Codex 10-100x faster with pandō (CAD for code)
What was different than you expected? Would love to get your feedback in detail, positive or not. George (at)human(dot)software
george_ciobanu··on Show HN: Claude/Gemini/Codex 10-100x faster with pandō (CAD for code)
Thank you - we both map out the dependency graph :-) I'll check yours out too asap!
george_ciobanu··on Show HN: Depwire – Dependency graph and MCP tools so AI stops refactoring blind
Haha we literally posted at the same time - very cool, also check out mine in the same vein: getpando.ai
george_ciobanu··on Show HN: Claude/Gemini/Codex 10-100x faster with pandō (CAD for code)
I'll be online for the next 3-4 hours, ask me anything!
george_ciobanu··on Chrome extension to easily jump around long chats(no more intense scrolling)
If you have long chats scrolling becomes tedious. So I made a simple, clean UI to easily navigate. No data sent anywhere, no login required, 100% free (I can share code if interested). Feedback much appreciated.
george_ciobanu··on Composable SQL
I built a 100% composable SQL at www.human.software
george_ciobanu··on MusicGen: Simple and controllable music generation
I think it's about the ability of someone who perhaps has a great idea (imagination) but lacks time, resources or the skills (execution) to make it happen. Of course that a talented producer will create a more compelling song (at least for now) but if the tool is an amplifier it should also boost talented composers - their prompts or inputs to prompts might be much more detailed, more interesting, more creative than those of a neophyte. This of course makes some assumptions but I think the draw for most people is that they can "make" something that sounds cool with almost no effort. My belief is that someone who puts more effort in a GPT and has more expertise can get a lot more out of it as well. I could of course be wrong and GPTs might be the big equalizers, but I doubt it.
george_ciobanu··on Fix your resume using AI
Not bad
george_ciobanu··on ChatGPT passes the 2022 AP Computer Science A free response section
It actually understands code:

what does this code do q2 = {"id"=>"270", "name"=>"s1", "nodes"=>[ {"operation"=>"list of", "collection"=>"film", "path"=>[{"table"=>"film"}]}, {"operation"=>"list of", "collection"=>"language", "path"=>[{"table"=>"film", "type"=>"outbound_relationships", "connection_info"=>{"source_column"=>"original_language_id", "referenced_column"=>"language_id"}, "referenced_table"=>"language"}, {"table"=>"language"}]}]} # {"operation"=>"by", "collection"=>"address", "path"=>[{"table"=>"language", "type"=>"inbound_relationships", "connection_info"=>{"source_column"=>"language_id", "referenced_column"=>"language_id"}, "referencing_table"=>"film"}, {"table"=>"film", "type"=>"inbound_relationships", "connection_info"=>{"source_column"=>"film_id", "referenced_column"=>"film_id"}, "referencing_table"=>"inventory"}, {"table"=>"inventory", "type"=>"outbound_relationships", "connection_info"=>{"source_column"=>"store_id", "referenced_column"=>"store_id"}, "referenced_table"=>"store"}, {"table"=>"store", "type"=>"outbound_relationships", "connection_info"=>{"source_column"=>"address_id", "referenced_column"=>"address_id"}, "referenced_table"=>"address"}, {"table"=>"address"}], "firstDifferentTable"=>"store", "selectedField"=>"address_id"}, # {"operation"=>"by", "collection"=>"actor", "path"=>[{"table"=>"address", "type"=>"inbound_relationships", "connection_info"=>{"source_column"=>"address_id", "referenced_column"=>"address_id"}, "referencing_table"=>"staff"}, {"table"=>"staff", "type"=>"inbound_relationships", "connection_info"=>{"source_column"=>"staff_id", "referenced_column"=>"staff_id"}, "referencing_table"=>"rental"}, {"table"=>"rental", "type"=>"outbound_relationships", "connection_info"=>{"source_column"=>"inventory_id", "referenced_column"=>"inventory_id"}, "referenced_table"=>"inventory"}, {"table"=>"inventory", "type"=>"outbound_relationships", "connection_info"=>{"source_column"=>"film_id", "referenced_column"=>"film_id"}, "referenced_table"=>"film"}, {"table"=>"film", "type"=>"inbound_relationships", "connection_info"=>{"source_column"=>"film_id", "referenced_column"=>"film_id"}, "referencing_table"=>"film_actor"}, {"table"=>"film_actor", "type"=>"outbound_relationships", "connection_info"=>{"source_column"=>"actor_id", "referenced_column"=>"actor_id"}, "referenced_table"=>"actor"}, {"table"=>"actor"}], "firstDifferentTable"=>"staff", "selectedField"=>"first_name"}, # {"operation"=>"", "collection"=>"", "selectedField"=>""}]}

nodes = q2["nodes"]

DB = Sequel.connect('postgres://xwpgxmmowukccz:f2b1682fb9ee2d0b05b011c5d2bcbad4b54642deedddefd3dda0f33a427cc076@ec2-52-200-5-135.compute-1.amazonaws.com:5432/dads298u253qm0')

calculatedQuery = {"joins" => [], "group_by" => {"collection" => "", "selectedField" => "", "aggregations" => []}} qualifiedColumns = [] query = nil

def generateJoinInfo(tableToJoin, path) prevPathElement = path[path.length() - 2] partialJoin = {"table" => tableToJoin, "prev_node_table" => prevPathElement["table"]} # join(type, cur_table, prev_table.prev_column, cur_table.cur_column) if prevPathElement["type"] == "outbound_relationships" then completeJoin = partialJoin.merge( {"prev_node_key" => prevPathElement["connection_info"]["source_column"], "cur_node_key" => prevPathElement["connection_info"]["referenced_column"]}) [..] puts(query.sql)

This code appears to define a dictionary called q2, which contains information about a query to a database. The q2 dictionary contains a list of nodes, which are objects that describe the operations to be performed on the database, such as "list of" or "by". Each node has a collection and path field, which describe the collection of items to be queried and the path to follow in the database to retrieve the items, respectively.

The code then defines a DB object, which is a connection to a PostgreSQL database using the Sequel library. The calculatedQuery dictionary is also defined, which will store the final result of the query.

The code then iterates over the nodes in the q2 dictionary, and for each node, it performs the operation specified in the operation field. For example, for the first node, which has the operation "list of", the code constructs a SELECT statement to retrieve the list of items from the specified collection, using the path field to construct the JOIN clauses in the query.

Once all the nodes have been processed, the code constructs a final SELECT statement using the calculatedQuery dictionary, which contains the JOIN clauses and GROUP BY clause for the query, as well as the selected field to be returned. The code then executes the SELECT statement using the DB object, and returns the result.

Overall, this code appears to be a function that takes a q2 dictionary containing a query and a DB object representing a database connection, and returns the result of the query. I hope this helps! Let me know if you have any other questions.

Ionut Georgian Ciobanu how did you figure that out

I figured out what the code does by carefully reading and interpreting each line of code, and using my knowledge of the Python programming language, the Sequel library, and SQL queries.

To understand the code, I first looked at the q2 dictionary, which is defined at the beginning of the code. I saw that the q2 dictionary contains a nodes field, which is a list of objects that describe the operations to be performed on the database. I also saw that each node has a collection and path field, which describe the collection of items to be queried and the path to follow in the database to retrieve the items, respectively.

Next, I saw that the code defines a DB object, which is a connection to a PostgreSQL database using the Sequel library. I also saw that the calculatedQuery dictionary is defined, which will store the final result of the query.

Then, I saw that the code iterates over the nodes in the q2 dictionary, and for each node, it performs the operation specified in the operation field. For example, for the first node, which has the operation "list of", the code constructs a SELECT statement to retrieve the list of items from the specified collection, using the path field to construct the JOIN clauses in the query.

Finally, I saw that once all the nodes have been processed, the code constructs a final SELECT statement using the calculatedQuery dictionary, which contains the JOIN clauses and GROUP BY clause for the query, as well as the selected field to be returned. The code then executes the SELECT statement using the DB object, and returns the result.

Based on this analysis, I concluded that this code is a function that takes a q2 dictionary containing a query and a DB object representing a database connection, and returns the result of the query. I hope

Ionut Georgian Ciobanu how would you improve this code

It is difficult to say how to improve this code without knowing its intended purpose or the context in which it will be used. However, here are a few suggestions for ways that the code could be improved:

Add comments to the code to explain its purpose and the logic behind each step. This would make the code easier to understand and maintain.

Use more descriptive variable names to make the code more readable. For example, instead of using q2, nodes, and DB, you could use more descriptive names like query, query_nodes, and database_connection.

Use more consistent formatting and indentation to make the code more readable. For example, you could use a code formatter like black to automatically format the code according to a set of predefined rules.

Use error handling to handle potential exceptions that may be thrown when executing the code. For example, you could add try/except blocks around the code that makes the database connection and executes the query, to handle potential exceptions that may be thrown if the connection fails or the query is invalid.

Use more modular code design to make the code more reusable and easier to maintain. For example, you could break the code into smaller functions that each perform a specific task, such as connecting to the database, constructing a query, or executing the query. This would make the code easier to read and understand, and easier to test and debug.

george_ciobanu··on Building a Virtual Machine Inside ChatGPT
https://docs.google.com/document/d/1hfCiyjiotMZvtPlGN_0uqbK9...
george_ciobanu··on Building a Virtual Machine Inside ChatGPT
https://docs.google.com/document/d/1hfCiyjiotMZvtPlGN_0uqbK9...
george_ciobanu··on Building a Virtual Machine Inside ChatGPT
It's quite incredible https://docs.google.com/document/d/1hfCiyjiotMZvtPlGN_0uqbK9...
george_ciobanu··on Building a Virtual Machine Inside ChatGPT
https://docs.google.com/document/d/1hfCiyjiotMZvtPlGN_0uqbK9...
george_ciobanu··on Building a Virtual Machine Inside ChatGPT
https://docs.google.com/document/d/1hfCiyjiotMZvtPlGN_0uqbK9...
george_ciobanu··on Building a Virtual Machine Inside ChatGPT
https://docs.google.com/document/d/1hfCiyjiotMZvtPlGN_0uqbK9...
george_ciobanu··on Building a Virtual Machine Inside ChatGPT
It wrote code for stuff I explained to it https://docs.google.com/document/d/1hfCiyjiotMZvtPlGN_0uqbK9...
george_ciobanu··on Building a Virtual Machine Inside ChatGPT
the name of the company is human.software and I also own the domain name for it. how should the logo look?

The name of your company, human.software, suggests a focus on creating software that is designed for and used by people. This name implies that your company values the human aspect of technology and seeks to create software that is intuitive, user-friendly, and beneficial for people.

Given this, a potential logo for your company could feature a stylized image of a person or a human figure, combined with a visual element that represents software or technology. For example, the logo could feature a simple outline of a person's head and shoulders, with a computer monitor or other technology-related image overlaid on top. This could help to convey the idea of a human-centered approach to software development, and could also be visually appealing and memorable.

Another option for the logo could be to use a more abstract or symbolic approach. For example, the logo could feature a geometric shape or pattern that evokes the idea of a person and technology working together. This could be combined with a simple, clean font for the company name, which could help to create a modern and professional look for the logo.

Overall, the logo for your company should be designed to reflect the values and goals of your business, and to communicate the idea of human-centered software development in a clear and visually appealing way.

george_ciobanu··on Building a Virtual Machine Inside ChatGPT
I named the database querying product Eloquence

Eloquence is a great name for a database querying product. The word "eloquence" means the ability to speak or write in a clear, fluent, and persuasive way. This is a fitting name for a product that helps users build complex queries and extract data from a database, as it suggests that the product can help users express themselves and communicate their data needs in a clear and effective way.

In addition to being a descriptive and fitting name, Eloquence is also a catchy and memorable name that could help your product stand out in the marketplace. It has a pleasant sound and a positive connotation, which can make it more appealing to potential users and customers.

Overall, I think Eloquence is a strong choice for the name of your database querying product, and I believe it has the potential to be successful and well-received in the market.

george_ciobanu··on Building a Virtual Machine Inside ChatGPT
This is absolutely incredible. I described to it the tool I built at www.human.software, explained to it how it works and it generated valid SQL code based on a question I asked in this language I designed and explained to it ad hoc. It has the ability to learn on the fly and conceptualize based on minimal descriptions of complex systems. You cannot see it below but I even had a conversation about how to pitch the concept and brainstormed a few ideas (very heavily guided by me).

Ionut Georgian Ciobanu I created a tool that enables users to build english sentences via consecutive dropdowns in order to query a database, given that it has the schema and access to the database. the user can combine verbs such as "all users" or "all orders" to see the list of users or orders, or "the number of users" or "the average order amount" in order to form complex data questions. what other verbs might be helpful?

Ionut Georgian Ciobanu if the user is non-technical such as a salesperson or marketing person, how can we make it easier for them to query data without having to use the word join?

If the user is non-technical, such as a salesperson or marketing person, it may be helpful to provide a more user-friendly interface for querying the database. Instead of requiring the user to specify which tables to join and the type of join to use, the tool can provide pre-defined options for common queries that the user can select from. For example, the tool could provide options like "Show me all orders," "Find customers in a specific city," or "Sort customers by order amount," and then automatically generate the appropriate query to retrieve the desired data. This can make it easier for non-technical users to query the database without having to understand the technical details of how the tables are joined.

Ionut Georgian Ciobanu if there are 50 tables in the database there are too many possible pre-made queries to generate. how else can we make it easy for the user to query

If there are many tables in the database, it may not be practical to provide pre-defined options for every possible query. In this case, there are a few other ways to make it easier for the user to query the database:

Provide a search function that allows the user to enter keywords or phrases related to the data they are looking for. The tool can then use natural language processing (NLP) to understand the user's intent and generate the appropriate query. Use machine learning to predict which tables and fields are most likely to be relevant to the user's query, and automatically suggest them as options in the query builder. Provide a way for the user to browse the schema and see the structure and contents of the tables in the database. This can help the user understand the data that is available and make it easier to identify which tables and fields to include in the query. By providing these features, the tool can make it easier for the user to query the database, even if there are many tables and a large amount of data available.

Ionut Georgian Ciobanu if the verbs the user can build are "list of", "for each", "number of" and the nouns are the tables of the schema, how should the user build the same question as before: Who are the top 10 users by number of orders for each city?"

To build the query "Who are the top 10 users by number of orders for each city?" using the verbs "list of," "for each," and "number of" and the nouns in the schema, the user would need to select the appropriate nouns and verbs from the dropdown menus provided by the tool. The user would first need to select the "users" table as the subject of the query, and then use the "list of" verb to retrieve a list of users.

Next, the user would need to specify the criteria for identifying the top 10 users. This can be done by selecting the "orders" table and using the "number of" verb to count the number of orders for each user. The user can then use the "for each" verb to group the users by city and the "top" option to select the top 10 users in each group.

Finally, the user can specify the fields to include in the results, such as the user's name and city, and the format of the results, such as a table or chart. The tool can then generate the appropriate query and retrieve the results from the database. The user can view the results in the schema browser and analyze the data to answer the question.

Ionut Georgian Ciobanu wouldn't it make more sense for the user to pick the action first and then the table and field?

It may make more sense for the user to pick the action first and then the table and field, depending on the user's preferences and the design of the tool. Some users may find it easier to think about the actions they want to perform on the data before selecting the specific tables and fields to use. For example, the user may want to "find" the top 10 users by number of orders before specifying which table to use to identify the users and which field to use to count the orders.

In general, the design of the tool should be flexible and allow the user to select the tables and fields in the order that makes the most sense to them. The tool can provide options for selecting the action, the tables and fields, and the criteria for the query, and then use these inputs to generate the appropriate query and retrieve the results from the database. This can help make the tool more user-friendly and allow the user to build the queries they need in the most efficient and intuitive way.

Ionut Georgian Ciobanu what would the sql query for such a question look like?

The SQL query for the question "Who are the top 10 users by number of orders for each city?" would depend on the specific schema of the database and the details of the query. Here is one possible SQL query that could be used to answer this question:

Copy code SELECT u.name, u.city, COUNT(o.id) AS num_orders FROM users u INNER JOIN orders o ON o.user_id = u.id GROUP BY u.city HAVING COUNT(o.id) >= ( SELECT COUNT(o2.id) FROM orders o2 WHERE o2.user_id = u.id ORDER BY COUNT(o2.id) DESC LIMIT 10 ) ORDER BY num_orders DESC

george_ciobanu··on Ask HN: Does anyone else think SQL needs help?
Check out https://human.software, a visual language replacement (no code)
george_ciobanu··on Dolt is Git for Data
also check out Datomic.
george_ciobanu··on Show HN: Svelvet – A component library for building interactive flow diagrams
Also check out ant vision components they're super broad and they also have a node based editor. https://antv.vision/en/
george_ciobanu··on Show HN: Arctype, a cross-platform database GUI for developers and teams
also check out www.human.software
george_ciobanu··on Ultorg: A user interface for relational databases [video]
Signup fixed, now updating the FAQ
george_ciobanu··on Ultorg: A user interface for relational databases [video]
Thank you for taking the time to check it out tacotime :-)

I'm looking into why sign up didn't work for you, the UX where I allow people to sign up and sign in with the same UI might be at fault here (I don't see any failed signups in the backend). I will simplify it and update the FAQ. Grateful for your feedback.

george_ciobanu··on Ultorg: A user interface for relational databases [video]
Awesome tool the UI is really smart.

Shameless plug: I built a similar, web-based tool for exploring a database at www.human.software

george_ciobanu··on Free Open Source Tailwind CSS Components
Didn't get to that point yet, so far their styling is fine for my needs. I have some experience with less but it's been a while.
george_ciobanu··on Free Open Source Tailwind CSS Components
Thank you, this is really helpful.
george_ciobanu··on Free Open Source Tailwind CSS Components
Forgive me if this is a dumb question: why would I use Tailwind over say ant design when the latter is free and has hundreds of components?
Page 1 of 5Next →