CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
sagemathinc

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/next/components/testimonials.tsx
Views: 687
1
/*
2
* This file is part of CoCalc: Copyright © 2023 Sagemath, Inc.
3
* License: MS-RSL – see LICENSE.md for details
4
*/
5
6
import { StaticImageData } from "next/image";
7
8
import Markdown from "@cocalc/frontend/editors/slate/static-markdown";
9
import { COLORS } from "@cocalc/util/theme";
10
import kiran from "public/features/kiran.jpeg";
11
import conley from "public/features/will_conley.jpg";
12
import { Paragraph } from "./misc";
13
import A from "./misc/A";
14
import Image from "./landing/image";
15
16
export interface Testimonial {
17
name: string;
18
image?: StaticImageData;
19
website?: string; // a URL
20
affiliation?: string | { url: string; name: string };
21
date: string;
22
content: string; // markdown
23
}
24
export const TESTIMONIALS: Readonly<Testimonial[]> = [
25
{
26
name: "Undergraduate Student",
27
date: "March 2024",
28
content: `CoCalc is likely the best online environment for project-based work, even for undergraduate students like myself. In our class, we have to train large machine learning models on Python notebooks, so we wanted to look for an easy-to-use online solution where we could collaborate and rent powerful compute servers for training. Not only was the setup and documentation easy to follow, the environment and tools that CoCalc provides are top-notch. You can tell that CoCalc was built with care and passion.
29
30
A few days in, our group faced a problem with compute servers (completely our own fault, I may add). We contacted support, initially expecting the usual long, drawn-out exchange with support staff to debug our issue. We never expected that the CEO and founder of CoCalc himself would give a practically instantaneous reply with his insights on our issue. In fact, he nailed our issue on the first try, and we have not had a problem since.
31
32
CoCalc has been an incredible resource and force multiplier for my undergraduate studies with its ease of use and powerful capabilities. There were some issues due to our relative inexperience with remote platforms and Linux servers, but I believe the amazing support provided by CoCalc wholly negates any concerns we have from now on. I would wholeheartedly recommend this to any student considering CoCalc as an extension of their local environment for studying and practicing machine learning.`,
33
},
34
{
35
name: "John Spitzer",
36
date: "March 2024",
37
content: `
38
I have used SageMath for a long time.
39
The mathematics community does make an effort to provide open source options unlike the physics community which is only now discovering the attractions of open source.
40
41
I have been using CoCalc for some time now and I have noticed a significant improvement in performance over recent times while the pricing is excellent.
42
43
My recent work has been done entirely on CoCalc and it all worked fine.
44
It is a great development environment.
45
All the best and keep up the good work!`,
46
},
47
{
48
name: "Travis",
49
date: "Winter 2024",
50
content: `
51
I turned to CoCalc for a few major reasons:
52
1. some familiarity with the platform already
53
2. instructor/course features
54
3. responsive support if needed
55
4. transparent pricing
56
5. trusted data privacy and handling (avoiding some other platforms for questionable practices)
57
58
Setting up the course was straightforward with the website guides, and the message I sent for some advice was promptly replied. Setting up the course was intuitive, from adding students to distributing the handouts. I did not use any grading features for this, as it was a workshop just for learning.
59
60
The purchase of computation resources was transparent, intuitive, and easy to navigate. Furthermore, I was pleased with the price and because of the affordability, I was able to keep the project upgraded throughout the entire 3 weeks so that participants could practice in between sessions instead of only during the workshop. This was well received by everyone involved and helped promote self learning.
61
`,
62
},
63
{
64
// https://sagemathcloud.zendesk.com/agent/tickets/13633
65
name: "Hugh Thomas",
66
date: "October 2023",
67
affiliation:
68
"LaCIM, Département de Mathématiques, Université du Québec à Montréal",
69
content: `
70
I do different things with CoCalc.
71
Right now, I am editing a shared LaTeX document which is a math paper.
72
73
I also use it for simple calculations with rational functions, which I would screw up if I did them by hand.
74
Recently I used it as a convenient interface to Macauay2, which it is great for since I can never figure out how Macaulay2's interface is supposed to work.
75
76
All that to say, I feel like I am using only a tiny fraction of the power of CoCalc, but it is making my life easier, and I am grateful for it.`,
77
},
78
79
{
80
// https://sagemathcloud.zendesk.com/agent/tickets/13664
81
name: "Chuck Livingston",
82
date: "September 2023",
83
website: "https://math.indiana.edu/about/emeriti/livingston-charles.html",
84
affiliation: {
85
url: "https://math.indiana.edu/",
86
name: "Department of Mathematics, Indiana University",
87
},
88
content: `
89
CoCalc has provided me with a stable, fully equipped, environment in which I've been able to build my programming skills and develop some worthwhile programs for my mathematics community – all for the cost of a cup of coffee each month. It's been a tremendously valuable resource for me.`,
90
},
91
92
// https://sagemathcloud.zendesk.com/agent/tickets/13676
93
{
94
name: "Scott Smith",
95
website:
96
"https://www.wlu.ca/academics/faculties/faculty-of-science/faculty-profiles/scott-smith/index.html",
97
affiliation: {
98
name: "Dept. of Chemistry and Biochemistry, Wilfrid Laurier University",
99
url: "https://www.wlu.ca/",
100
},
101
date: "May 2023",
102
content: `
103
Amazing! Now a chemistry nerd like me can do some pretty fancy things
104
without having to also become a computer scientist.
105
And share those things with those even less computer-programmy than myself.
106
So that chemistry advances without “getting lost in the weeds”.
107
108
Time travel !!! wow !! I love that. (I could have used that many many times. Haha).
109
110
I was pretty sad when mybinder stopped working. [...] I know that CoCalc will be a new and improved replacement for mybinder. And does not seem like a steep learning curve at all.
111
112
The documentation (and support!) is fabulous !!`,
113
},
114
115
{
116
name: "Kiran Kedlaya",
117
image: kiran,
118
date: "March 2017",
119
website: "https://kskedlaya.org/",
120
affiliation: {
121
url: "https://math.ucsd.edu/",
122
name: "Department of Mathematics, University of California, San Diego",
123
},
124
content: `
125
I just found out that my CoCalc class got by far the best course evaluations for any course I've taught at UCSD to date (over 85% on the favorable/unfavorable scale), which makes it a sure thing that I'll be teaching this course again (in some form) next year! Many thanks for the backend work on CoCalc, for the course materials, for the guest lecture...`,
126
},
127
{
128
name: "Will Conley",
129
image: conley,
130
date: "Fall 2016",
131
website: "https://www.math.ucla.edu/~conley/",
132
affiliation: {
133
url: "https://www.math.ucla.edu/",
134
name: "Department of Mathematics, University of California, Los Angeles",
135
},
136
content: `
137
CoCalc provides a user-friendly interface.
138
Students don't need to install any software at all.
139
They just open up a web browser and go to cocalc.com and that's it.
140
141
They just type code directly in, hit shift+enter and it runs, and they can see if it works.
142
It provides immediate feedback.
143
The course management features work really well.`,
144
},
145
] as const;
146
147
export function twoRandomTestimonials(): [Testimonial, Testimonial] {
148
let t1 = TESTIMONIALS[Math.floor(Math.random() * TESTIMONIALS.length)];
149
let t2 = t1;
150
while (t2 === t1) {
151
t2 = TESTIMONIALS[Math.floor(Math.random() * TESTIMONIALS.length)];
152
}
153
return [t1, t2];
154
}
155
156
const STYLE: React.CSSProperties = {
157
borderLeft: `3px solid ${COLORS.GRAY_L}`,
158
paddingLeft: "1em",
159
color: COLORS.GRAY_DD,
160
fontStyle: "italic",
161
};
162
163
const STYLE_BELOW: React.CSSProperties = {
164
textAlign: "right",
165
fontSize: "80%",
166
fontStyle: "italic",
167
};
168
169
export function TestimonialComponent({
170
testimonial,
171
}: {
172
testimonial: Testimonial;
173
}) {
174
const { name, website, affiliation, content, date, image } = testimonial;
175
176
function renderName() {
177
if (website) {
178
return <A href={website}>{name}</A>;
179
} else {
180
return name;
181
}
182
}
183
184
function renderAffiliation() {
185
if (!affiliation) return;
186
if (typeof affiliation === "string") {
187
return <>({affiliation})</>;
188
} else {
189
return <>({<A href={affiliation.url}>{affiliation.name}</A>})</>;
190
}
191
}
192
193
function renderDate() {
194
return `${date}`;
195
}
196
197
function renderImage() {
198
if (!image) return;
199
return (
200
<Image
201
src={image}
202
alt={name}
203
style={{
204
width: "90px",
205
borderRadius: "6px",
206
float: "left",
207
margin: "0 15px 15px 0",
208
}}
209
/>
210
);
211
}
212
213
return (
214
<Paragraph style={STYLE}>
215
{renderImage()}
216
<Markdown value={content} />
217
<div style={STYLE_BELOW}>
218
{renderName()}, {renderDate()}
219
</div>
220
<div style={STYLE_BELOW}>{renderAffiliation()}</div>
221
</Paragraph>
222
);
223
}
224
225